[KERNEL32]: While working on the CMAKE branch, Amine and myself discovered a rather...
[reactos.git] / reactos / dll / win32 / kernel32 / process / session.c
1 /* $Id$
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: lib/kernel32/proc/session.c
6 * PURPOSE: Win32 session (TS) functions
7 * PROGRAMMER: Emanuele Aliberti
8 * UPDATE HISTORY:
9 * 2001-12-07 created
10 */
11 #include <k32.h>
12 #define NDEBUG
13 #include <debug.h>
14
15 DWORD ActiveConsoleSessionId = 0;
16
17
18 /*
19 * @unimplemented
20 */
21 DWORD
22 WINAPI
23 DosPathToSessionPathW(DWORD SessionID,
24 LPWSTR InPath,
25 LPWSTR *OutPath)
26 {
27 UNIMPLEMENTED;
28 return 0;
29 }
30
31 /*
32 * From: ActiveVB.DE
33 *
34 * Declare Function DosPathToSessionPath _
35 * Lib "kernel32.dll" _
36 * Alias "DosPathToSessionPathA" ( _
37 * ByVal SessionId As Long, _
38 * ByVal pInPath As String, _
39 * ByVal ppOutPath As String ) _
40 * As Long
41 *
42 * @unimplemented
43 */
44 DWORD
45 WINAPI
46 DosPathToSessionPathA(DWORD SessionId,
47 LPSTR InPath,
48 LPSTR *OutPath)
49 {
50 //DosPathToSessionPathW (SessionId,InPathW,OutPathW);
51 UNIMPLEMENTED;
52 return 0;
53 }
54
55 /*
56 * @implemented
57 */
58 BOOL
59 WINAPI
60 ProcessIdToSessionId(IN DWORD dwProcessId,
61 OUT DWORD *pSessionId)
62 {
63 PROCESS_SESSION_INFORMATION SessionInformation;
64 OBJECT_ATTRIBUTES ObjectAttributes;
65 CLIENT_ID ClientId;
66 HANDLE ProcessHandle;
67 NTSTATUS Status;
68
69 if (IsBadWritePtr(pSessionId, sizeof(DWORD)))
70 {
71 SetLastError(ERROR_INVALID_PARAMETER);
72 return FALSE;
73 }
74
75 ClientId.UniqueProcess = UlongToHandle(dwProcessId);
76 ClientId.UniqueThread = 0;
77
78 InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL);
79
80 Status = NtOpenProcess(&ProcessHandle,
81 PROCESS_QUERY_INFORMATION,
82 &ObjectAttributes,
83 &ClientId);
84 if (NT_SUCCESS(Status))
85 {
86 Status = NtQueryInformationProcess(ProcessHandle,
87 ProcessSessionInformation,
88 &SessionInformation,
89 sizeof(SessionInformation),
90 NULL);
91 NtClose(ProcessHandle);
92
93 if (NT_SUCCESS(Status))
94 {
95 *pSessionId = SessionInformation.SessionId;
96 return TRUE;
97 }
98 }
99
100 SetLastErrorByStatus(Status);
101 return FALSE;
102 }
103
104 /*
105 * @implemented
106 */
107 DWORD
108 WINAPI
109 WTSGetActiveConsoleSessionId(VOID)
110 {
111 return ActiveConsoleSessionId;
112 }
113
114 /* EOF */