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