Sync to trunk head (r42241)
[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 #include <wine/debug.h>
13
14 WINE_DEFAULT_DEBUG_CHANNEL(kernel32session);
15
16 DWORD ActiveConsoleSessionId = 0;
17
18
19 /*
20 * @unimplemented
21 */
22 DWORD WINAPI
23 DosPathToSessionPathW (DWORD SessionID, LPWSTR InPath, LPWSTR * OutPath)
24 {
25 UNIMPLEMENTED;
26 return 0;
27 }
28
29 /*
30 * From: ActiveVB.DE
31 *
32 * Declare Function DosPathToSessionPath _
33 * Lib "kernel32.dll" _
34 * Alias "DosPathToSessionPathA" ( _
35 * ByVal SessionId As Long, _
36 * ByVal pInPath As String, _
37 * ByVal ppOutPath As String ) _
38 * As Long
39 *
40 * @unimplemented
41 */
42 DWORD WINAPI
43 DosPathToSessionPathA (DWORD SessionId, LPSTR InPath, LPSTR * OutPath)
44 {
45 //DosPathToSessionPathW (SessionId,InPathW,OutPathW);
46 UNIMPLEMENTED;
47 return 0;
48 }
49
50 /*
51 * @implemented
52 */
53 BOOL WINAPI ProcessIdToSessionId (IN DWORD dwProcessId,
54 OUT DWORD* pSessionId)
55 {
56 PROCESS_SESSION_INFORMATION SessionInformation;
57 OBJECT_ATTRIBUTES ObjectAttributes;
58 CLIENT_ID ClientId;
59 HANDLE ProcessHandle;
60 NTSTATUS Status;
61
62 if(IsBadWritePtr(pSessionId, sizeof(DWORD)))
63 {
64 SetLastError(ERROR_INVALID_PARAMETER);
65 return FALSE;
66 }
67
68 ClientId.UniqueProcess = (HANDLE)(ULONG_PTR)dwProcessId;
69 ClientId.UniqueThread = 0;
70
71 InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL);
72
73 Status = NtOpenProcess(&ProcessHandle,
74 PROCESS_QUERY_INFORMATION,
75 &ObjectAttributes,
76 &ClientId);
77 if(NT_SUCCESS(Status))
78 {
79 Status = NtQueryInformationProcess(ProcessHandle,
80 ProcessSessionInformation,
81 &SessionInformation,
82 sizeof(SessionInformation),
83 NULL);
84 NtClose(ProcessHandle);
85
86 if(NT_SUCCESS(Status))
87 {
88 *pSessionId = SessionInformation.SessionId;
89 return TRUE;
90 }
91 }
92
93 SetLastErrorByStatus(Status);
94 return FALSE;
95 }
96
97 /*
98 * @implemented
99 */
100 DWORD WINAPI
101 WTSGetActiveConsoleSessionId (VOID)
102 {
103 return ActiveConsoleSessionId;
104 }
105
106 /* EOF */