ReactOS  0.4.15-dev-3163-gf17c2c0
session.c
Go to the documentation of this file.
1 /*
2  * PROJECT: Local Security Authority Server DLL
3  * LICENSE: GPL - See COPYING in the top level directory
4  * FILE: dll/win32/lsasrv/session.c
5  * PURPOSE: Logon session management routines
6  * COPYRIGHT: Copyright 2013 Eric Kohl
7  */
8 
9 #include "lsasrv.h"
10 
11 typedef struct _LSAP_LOGON_SESSION
12 {
26 
27 
28 /* GLOBALS *****************************************************************/
29 
32 
33 /* FUNCTIONS ***************************************************************/
34 
35 VOID
37 {
39  SessionCount = 0;
40 }
41 
42 
43 static
46 {
47  PLIST_ENTRY SessionEntry;
48  PLSAP_LOGON_SESSION CurrentSession;
49 
50  SessionEntry = SessionListHead.Flink;
51  while (SessionEntry != &SessionListHead)
52  {
53  CurrentSession = CONTAINING_RECORD(SessionEntry,
55  Entry);
56  if (RtlEqualLuid(&CurrentSession->LogonId, LogonId))
57  return CurrentSession;
58 
59  SessionEntry = SessionEntry->Flink;
60  }
61 
62  return NULL;
63 }
64 
65 
70  _In_ PUNICODE_STRING UserName,
71  _In_ PUNICODE_STRING LogonDomain,
72  _In_ PSID Sid)
73 {
75  PLSAP_LOGON_SESSION Session;
76  ULONG Length;
77 
78  TRACE("LsapSetLogonSessionData(%p)\n", LogonId);
79 
80  Session = LsapGetLogonSession(LogonId);
81  if (Session == NULL)
83 
84  TRACE("LogonType %lu\n", LogonType);
85  Session->LogonType = LogonType;
86 
87  Status = RtlValidateUnicodeString(0, UserName);
88  if (!NT_SUCCESS(Status))
90 
91  /* UserName is mandatory and cannot be an empty string */
92  TRACE("UserName %wZ\n", UserName);
93  Session->UserName.Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
95  UserName->MaximumLength);
96  if (Session->UserName.Buffer == NULL)
98 
99  Session->UserName.Length = UserName->Length;
100  Session->UserName.MaximumLength = UserName->MaximumLength;
101  RtlCopyMemory(Session->UserName.Buffer, UserName->Buffer, UserName->MaximumLength);
102 
103  Status = RtlValidateUnicodeString(0, LogonDomain);
104  if (!NT_SUCCESS(Status))
105  {
106  /* Cleanup and fail */
107  if (Session->UserName.Buffer != NULL)
108  RtlFreeHeap(RtlGetProcessHeap(), 0, Session->UserName.Buffer);
109 
111  }
112 
113  /* LogonDomain is optional and can be an empty string */
114  TRACE("LogonDomain %wZ\n", LogonDomain);
115  if (LogonDomain->Length)
116  {
117  Session->LogonDomain.Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
119  LogonDomain->MaximumLength);
120  if (Session->LogonDomain.Buffer == NULL)
121  {
122  /* Cleanup and fail */
123  if (Session->UserName.Buffer != NULL)
124  RtlFreeHeap(RtlGetProcessHeap(), 0, Session->UserName.Buffer);
125 
127  }
128 
129  Session->LogonDomain.Length = LogonDomain->Length;
130  Session->LogonDomain.MaximumLength = LogonDomain->MaximumLength;
131  RtlCopyMemory(Session->LogonDomain.Buffer, LogonDomain->Buffer, LogonDomain->MaximumLength);
132  }
133  else
134  {
135  RtlInitEmptyUnicodeString(&Session->LogonDomain, NULL, 0);
136  }
137 
139  Session->Sid = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, Length);
140  if (Session->Sid == NULL)
141  {
142  /* Cleanup and fail */
143  if (Session->LogonDomain.Buffer != NULL)
144  RtlFreeHeap(RtlGetProcessHeap(), 0, Session->LogonDomain.Buffer);
145  if (Session->UserName.Buffer != NULL)
146  RtlFreeHeap(RtlGetProcessHeap(), 0, Session->UserName.Buffer);
147 
149  }
150 
151  RtlCopyMemory(Session->Sid, Sid, Length);
152 
153  return STATUS_SUCCESS;
154 }
155 
156 
157 NTSTATUS
158 NTAPI
160 {
161  PLSAP_LOGON_SESSION Session;
163 
164  TRACE("LsapCreateLogonSession(%p)\n", LogonId);
165 
166  /* Fail, if a session already exists */
169 
170  /* Allocate a new session entry */
171  Session = RtlAllocateHeap(RtlGetProcessHeap(),
173  sizeof(LSAP_LOGON_SESSION));
174  if (Session == NULL)
176 
177  /* Initialize the session entry */
178  RtlCopyLuid(&Session->LogonId, LogonId);
179 
180  TRACE("LsapCreateLogonSession(<0x%lx,0x%lx>)\n",
181  LogonId->HighPart, LogonId->LowPart);
182 
183  /* Tell ntoskrnl to create a new logon session */
185  if (!NT_SUCCESS(Status))
186  {
187  RtlFreeHeap(RtlGetProcessHeap(), 0, Session);
188  return Status;
189  }
190 
191  /* Insert the new session into the session list */
192  InsertHeadList(&SessionListHead, &Session->Entry);
193  SessionCount++;
194 
195  return STATUS_SUCCESS;
196 }
197 
198 
199 NTSTATUS
200 NTAPI
202 {
203  PLSAP_LOGON_SESSION Session;
205 
206  TRACE("LsapDeleteLogonSession(%p)\n", LogonId);
207 
208  /* Fail, if the session does not exist */
209  Session = LsapGetLogonSession(LogonId);
210  if (Session == NULL)
212 
213  TRACE("LsapDeleteLogonSession(0x%08lx%08lx)\n",
214  LogonId->HighPart, LogonId->LowPart);
215 
216  /* Tell ntoskrnl to delete the logon session */
218  if (!NT_SUCCESS(Status))
219  return Status;
220 
221  /* Notify the authentication packages */
223 
224  /* Remove the session entry from the list */
225  RemoveEntryList(&Session->Entry);
226  SessionCount--;
227 
228  /* Free the session data */
229  if (Session->Sid != NULL)
230  RtlFreeHeap(RtlGetProcessHeap(), 0, Session->Sid);
231 
232  if (Session->UserName.Buffer != NULL)
233  RtlFreeHeap(RtlGetProcessHeap(), 0, Session->UserName.Buffer);
234 
235  if (Session->LogonDomain.Buffer != NULL)
236  RtlFreeHeap(RtlGetProcessHeap(), 0, Session->LogonDomain.Buffer);
237 
238  if (Session->AuthenticationPackage.Buffer != NULL)
239  RtlFreeHeap(RtlGetProcessHeap(), 0, Session->AuthenticationPackage.Buffer);
240 
241  if (Session->LogonServer.Buffer != NULL)
242  RtlFreeHeap(RtlGetProcessHeap(), 0, Session->LogonServer.Buffer);
243 
244  if (Session->DnsDomainName.Buffer != NULL)
245  RtlFreeHeap(RtlGetProcessHeap(), 0, Session->DnsDomainName.Buffer);
246 
247  if (Session->Upn.Buffer != NULL)
248  RtlFreeHeap(RtlGetProcessHeap(), 0, Session->Upn.Buffer);
249 
250  /* Free the session entry */
251  RtlFreeHeap(RtlGetProcessHeap(), 0, Session);
252 
253  return STATUS_SUCCESS;
254 }
255 
256 
257 NTSTATUS
258 NTAPI
262  _In_ PLSA_STRING PrimaryKeyValue,
263  _In_ PLSA_STRING Credential)
264 {
265 
266  return STATUS_SUCCESS;
267 }
268 
269 
270 NTSTATUS
271 NTAPI
275  _Inout_ PULONG QueryContext,
276  _In_ BOOLEAN RetrieveAllCredentials,
277  _Inout_ PLSA_STRING PrimaryKeyValue,
278  _Out_ PULONG PrimaryKeyLength,
279  _Out_ PLSA_STRING Credentials)
280 {
281 
282  return STATUS_SUCCESS;
283 }
284 
285 
286 NTSTATUS
287 NTAPI
291  _In_ PLSA_STRING PrimaryKeyValue)
292 {
293 
294  return STATUS_SUCCESS;
295 }
296 
297 
298 NTSTATUS
300 {
303  PLIST_ENTRY SessionEntry;
304  PLSAP_LOGON_SESSION CurrentSession;
305  PLUID SessionList;
306  ULONG i, Length;
307  SIZE_T MemSize;
308  PVOID ClientBaseAddress = NULL;
310 
311  TRACE("LsapEnumLogonSessions(%p)\n", RequestMsg);
312 
313  Length = SessionCount * sizeof(LUID);
314  SessionList = RtlAllocateHeap(RtlGetProcessHeap(),
316  Length);
317  if (SessionList == NULL)
319 
320  i = 0;
321  SessionEntry = SessionListHead.Flink;
322  while (SessionEntry != &SessionListHead)
323  {
324  CurrentSession = CONTAINING_RECORD(SessionEntry,
326  Entry);
327 
328  RtlCopyLuid(&SessionList[i],
329  &CurrentSession->LogonId);
330 
331  SessionEntry = SessionEntry->Flink;
332  i++;
333  }
334 
336  NULL,
337  0,
338  NULL,
339  NULL);
340 
344  &RequestMsg->h.ClientId);
345  if (!NT_SUCCESS(Status))
346  {
347  TRACE("NtOpenProcess() failed (Status %lx)\n", Status);
348  goto done;
349  }
350 
351  TRACE("Length: %lu\n", Length);
352 
353  MemSize = Length;
355  &ClientBaseAddress,
356  0,
357  &MemSize,
358  MEM_COMMIT,
360  if (!NT_SUCCESS(Status))
361  {
362  TRACE("NtAllocateVirtualMemory() failed (Status %lx)\n", Status);
363  goto done;
364  }
365 
366  TRACE("MemSize: %lu\n", MemSize);
367  TRACE("ClientBaseAddress: %p\n", ClientBaseAddress);
368 
370  ClientBaseAddress,
371  SessionList,
372  Length,
373  NULL);
374  if (!NT_SUCCESS(Status))
375  {
376  TRACE("NtWriteVirtualMemory() failed (Status %lx)\n", Status);
377  goto done;
378  }
379 
380  RequestMsg->EnumLogonSessions.Reply.LogonSessionCount = SessionCount;
381  RequestMsg->EnumLogonSessions.Reply.LogonSessionBuffer = ClientBaseAddress;
382 
383 done:
384  if (ProcessHandle != NULL)
386 
387  if (SessionList != NULL)
388  RtlFreeHeap(RtlGetProcessHeap(), 0, SessionList);
389 
390  return Status;
391 }
392 
393 
394 NTSTATUS
396 {
399  PLSAP_LOGON_SESSION Session;
400  PSECURITY_LOGON_SESSION_DATA LocalSessionData;
401  PVOID ClientBaseAddress = NULL;
402  ULONG TotalLength, SidLength = 0;
403  SIZE_T MemSize;
404  PUCHAR Ptr;
406 
407  TRACE("LsapGetLogonSessionData(%p)\n", RequestMsg);
408 
409  TRACE("LogonId: %lx\n", RequestMsg->GetLogonSessionData.Request.LogonId.LowPart);
410  Session = LsapGetLogonSession(&RequestMsg->GetLogonSessionData.Request.LogonId);
411  if (Session == NULL)
413 
414  /* Calculate the required buffer size */
416  Session->UserName.MaximumLength +
417  Session->LogonDomain.MaximumLength +
419  Session->LogonServer.MaximumLength +
420  Session->DnsDomainName.MaximumLength +
421  Session->Upn.MaximumLength;
422  if (Session->Sid != NULL)
423  {
424  SidLength = RtlLengthSid(Session->Sid);
425  TotalLength += SidLength;
426  }
427  TRACE("TotalLength: %lu\n", TotalLength);
428 
429  /* Allocate the buffer */
430  LocalSessionData = RtlAllocateHeap(RtlGetProcessHeap(),
432  TotalLength);
433  if (LocalSessionData == NULL)
435 
436  Ptr = (PUCHAR)((ULONG_PTR)LocalSessionData + sizeof(SECURITY_LOGON_SESSION_DATA));
437  TRACE("LocalSessionData: %p Ptr: %p\n", LocalSessionData, Ptr);
438 
439  LocalSessionData->Size = sizeof(SECURITY_LOGON_SESSION_DATA);
440 
441  /* Copy the LogonId */
442  RtlCopyLuid(&LocalSessionData->LogonId,
443  &RequestMsg->GetLogonSessionData.Request.LogonId);
444 
445  /* Copy the UserName string */
446  LocalSessionData->UserName.Length = Session->UserName.Length;
447  LocalSessionData->UserName.MaximumLength = Session->UserName.MaximumLength;
448  if (Session->UserName.MaximumLength != 0)
449  {
450  RtlCopyMemory(Ptr, Session->UserName.Buffer, Session->UserName.MaximumLength);
451  LocalSessionData->UserName.Buffer = (PWSTR)((ULONG_PTR)Ptr - (ULONG_PTR)LocalSessionData);
452 
453  Ptr = (PUCHAR)((ULONG_PTR)Ptr + Session->UserName.MaximumLength);
454  }
455 
456  /* Copy the LogonDomain string */
457  LocalSessionData->LogonDomain.Length = Session->LogonDomain.Length;
458  LocalSessionData->LogonDomain.MaximumLength = Session->LogonDomain.MaximumLength;
459  if (Session->LogonDomain.MaximumLength != 0)
460  {
462  LocalSessionData->LogonDomain.Buffer = (PWSTR)((ULONG_PTR)Ptr - (ULONG_PTR)LocalSessionData);
463 
464  Ptr = (PUCHAR)((ULONG_PTR)Ptr + Session->LogonDomain.MaximumLength);
465  }
466 
467  /* Copy the AuthenticationPackage string */
468  LocalSessionData->AuthenticationPackage.Length = Session->AuthenticationPackage.Length;
470  if (Session->AuthenticationPackage.MaximumLength != 0)
471  {
473  LocalSessionData->AuthenticationPackage.Buffer = (PWSTR)((ULONG_PTR)Ptr - (ULONG_PTR)LocalSessionData);
474 
476  }
477 
478  LocalSessionData->LogonType = Session->LogonType;
479  LocalSessionData->Session = 0;
480 
481  /* Sid */
482  if (Session->Sid != NULL)
483  {
484  RtlCopyMemory(Ptr, Session->Sid, SidLength);
485  LocalSessionData->Sid = (PSID)((ULONG_PTR)Ptr - (ULONG_PTR)LocalSessionData);
486 
487  Ptr = (PUCHAR)((ULONG_PTR)Ptr + SidLength);
488  }
489 
490  /* LogonTime */
491  LocalSessionData->LogonTime.QuadPart = Session->LogonTime.QuadPart;
492 
493  /* Copy the LogonServer string */
494  LocalSessionData->LogonServer.Length = Session->LogonServer.Length;
495  LocalSessionData->LogonServer.MaximumLength = Session->LogonServer.MaximumLength;
496  if (Session->LogonServer.MaximumLength != 0)
497  {
499  LocalSessionData->LogonServer.Buffer = (PWSTR)((ULONG_PTR)Ptr - (ULONG_PTR)LocalSessionData);
500 
501  Ptr = (PUCHAR)((ULONG_PTR)Ptr + Session->LogonServer.MaximumLength);
502  }
503 
504  /* Copy the DnsDomainName string */
505  LocalSessionData->DnsDomainName.Length = Session->DnsDomainName.Length;
506  LocalSessionData->DnsDomainName.MaximumLength = Session->DnsDomainName.MaximumLength;
507  if (Session->DnsDomainName.MaximumLength != 0)
508  {
510  LocalSessionData->DnsDomainName.Buffer = (PWSTR)((ULONG_PTR)Ptr - (ULONG_PTR)LocalSessionData);
511 
513  }
514 
515  /* Copy the Upn string */
516  LocalSessionData->Upn.Length = Session->Upn.Length;
517  LocalSessionData->Upn.MaximumLength = Session->Upn.MaximumLength;
518  if (Session->Upn.MaximumLength != 0)
519  {
520  RtlCopyMemory(Ptr, Session->Upn.Buffer, Session->Upn.MaximumLength);
521  LocalSessionData->Upn.Buffer = (PWSTR)((ULONG_PTR)Ptr - (ULONG_PTR)LocalSessionData);
522 
523  Ptr = (PUCHAR)((ULONG_PTR)Ptr + Session->Upn.MaximumLength);
524  }
525 
527  NULL,
528  0,
529  NULL,
530  NULL);
531 
535  &RequestMsg->h.ClientId);
536  if (!NT_SUCCESS(Status))
537  {
538  TRACE("NtOpenProcess() failed (Status %lx)\n", Status);
539  goto done;
540  }
541 
542  MemSize = TotalLength;
544  &ClientBaseAddress,
545  0,
546  &MemSize,
547  MEM_COMMIT,
549  if (!NT_SUCCESS(Status))
550  {
551  TRACE("NtAllocateVirtualMemory() failed (Status %lx)\n", Status);
552  goto done;
553  }
554 
555  TRACE("MemSize: %lu\n", MemSize);
556  TRACE("ClientBaseAddress: %p\n", ClientBaseAddress);
557 
559  ClientBaseAddress,
560  LocalSessionData,
561  TotalLength,
562  NULL);
563  if (!NT_SUCCESS(Status))
564  {
565  TRACE("NtWriteVirtualMemory() failed (Status %lx)\n", Status);
566  goto done;
567  }
568 
569  RequestMsg->GetLogonSessionData.Reply.SessionDataBuffer = ClientBaseAddress;
570 
571 done:
572  if (ProcessHandle != NULL)
574 
575  if (LocalSessionData != NULL)
576  RtlFreeHeap(RtlGetProcessHeap(), 0, LocalSessionData);
577 
578  return Status;
579 }
580 
581 /* EOF */
NTSTATUS LsapEnumLogonSessions(IN OUT PLSA_API_MSG RequestMsg)
Definition: session.c:299
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
struct _LSAP_LOGON_SESSION LSAP_LOGON_SESSION
#define IN
Definition: typedefs.h:39
#define STATUS_LOGON_SESSION_COLLISION
Definition: ntstatus.h:497
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
#define _Inout_
Definition: ms_sal.h:378
USHORT MaximumLength
Definition: env_spec_w32.h:370
#define _Out_
Definition: ms_sal.h:345
struct _SECURITY_LOGON_SESSION_DATA SECURITY_LOGON_SESSION_DATA
#define STATUS_NO_SUCH_LOGON_SESSION
Definition: ntstatus.h:331
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
NTSTATUS NTAPI LsapAddCredential(_In_ PLUID LogonId, _In_ ULONG AuthenticationPackage, _In_ PLSA_STRING PrimaryKeyValue, _In_ PLSA_STRING Credential)
Definition: session.c:259
uint16_t * PWSTR
Definition: typedefs.h:56
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
Definition: rtlfuncs.h:201
static PLSAP_LOGON_SESSION LsapGetLogonSession(IN PLUID LogonId)
Definition: session.c:45
unsigned char * PUCHAR
Definition: retypes.h:3
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
Definition: fsrtlfuncs.h:898
NTSTATUS LsapGetLogonSessionData(IN OUT PLSA_API_MSG RequestMsg)
Definition: session.c:395
LONG NTSTATUS
Definition: precomp.h:26
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:606
UNICODE_STRING UserName
Definition: session.c:19
UNICODE_STRING LogonServer
Definition: session.c:22
if(dx==0 &&dy==0)
Definition: linetemp.h:174
_In_ ULONG TotalLength
Definition: usbdlib.h:158
#define MEM_COMMIT
Definition: nt_native.h:1313
UNICODE_STRING LogonDomain
Definition: session.c:20
NTSTATUS NTAPI NtOpenProcess(OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PCLIENT_ID ClientId)
Definition: process.c:1440
NTSTATUS NTAPI LsapCreateLogonSession(IN PLUID LogonId)
Definition: session.c:159
UNICODE_STRING AuthenticationPackage
Definition: session.c:21
uint32_t ULONG_PTR
Definition: typedefs.h:65
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
Definition: rtlfuncs.h:105
struct _LUID LUID
NTSTATUS LsapSetLogonSessionData(_In_ PLUID LogonId, _In_ ULONG LogonType, _In_ PUNICODE_STRING UserName, _In_ PUNICODE_STRING LogonDomain, _In_ PSID Sid)
Definition: session.c:67
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
NTSTATUS LsapRmDeleteLogonSession(PLUID LogonId)
Definition: srm.c:285
#define RtlEqualLuid(Luid1, Luid2)
Definition: rtlfuncs.h:301
NTSTATUS LsapRmCreateLogonSession(PLUID LogonId)
Definition: srm.c:245
NTSYSAPI NTSTATUS NTAPI RtlValidateUnicodeString(_In_ ULONG Flags, _In_ PCUNICODE_STRING String)
Definition: unicode.c:2559
unsigned char BOOLEAN
#define _In_
Definition: ms_sal.h:308
_In_ ULONG _In_ ACCESS_MASK _In_ PSID Sid
Definition: rtlfuncs.h:1103
NTSYSAPI ULONG NTAPI RtlLengthSid(IN PSID Sid)
Definition: sid.c:150
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
Definition: heap.c:588
Status
Definition: gdiplustypes.h:24
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define TRACE(s)
Definition: solgame.cpp:4
#define PROCESS_VM_WRITE
Definition: pstypes.h:162
VOID LsapInitLogonSessions(VOID)
Definition: session.c:36
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
UNICODE_STRING DnsDomainName
Definition: session.c:23
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3398
struct _SID * PSID
Definition: eventlog.c:35
LIST_ENTRY SessionListHead
Definition: session.c:30
LSA_UNICODE_STRING LogonDomain
Definition: ntsecapi.h:307
LSA_UNICODE_STRING DnsDomainName
Definition: ntsecapi.h:314
ULONG AuthenticationPackage
Definition: logon.c:18
Definition: typedefs.h:119
NTSTATUS NTAPI LsapDeleteCredential(_In_ PLUID LogonId, _In_ ULONG AuthenticationPackage, _In_ PLSA_STRING PrimaryKeyValue)
Definition: session.c:288
UNICODE_STRING Upn
Definition: session.c:24
ULONG_PTR SIZE_T
Definition: typedefs.h:80
NTSTATUS NTAPI NtAllocateVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *UBaseAddress, IN ULONG_PTR ZeroBits, IN OUT PSIZE_T URegionSize, IN ULONG AllocationType, IN ULONG Protect)
Definition: virtual.c:4481
LSA_UNICODE_STRING LogonServer
Definition: ntsecapi.h:313
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
USHORT MaximumLength
Definition: ntsecapi.h:164
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE LogonType
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
LARGE_INTEGER LogonTime
Definition: session.c:17
unsigned int * PULONG
Definition: retypes.h:1
#define NULL
Definition: types.h:112
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID _Out_ PULONG _Inout_ PLUID LogonId
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
NTSYSAPI void WINAPI RtlCopyLuid(PLUID, const LUID *)
#define PROCESS_VM_READ
Definition: pstypes.h:161
#define OUT
Definition: typedefs.h:40
unsigned int ULONG
Definition: retypes.h:1
#define ULONG_PTR
Definition: config.h:101
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
#define PROCESS_VM_OPERATION
Definition: pstypes.h:160
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define STATUS_SUCCESS
Definition: shellext.h:65
LSA_UNICODE_STRING AuthenticationPackage
Definition: ntsecapi.h:308
NTSTATUS NTAPI LsapGetCredentials(_In_ PLUID LogonId, _In_ ULONG AuthenticationPackage, _Inout_ PULONG QueryContext, _In_ BOOLEAN RetrieveAllCredentials, _Inout_ PLSA_STRING PrimaryKeyValue, _Out_ PULONG PrimaryKeyLength, _Out_ PLSA_STRING Credentials)
Definition: session.c:272
_In_ HANDLE ProcessHandle
Definition: mmfuncs.h:403
LSA_UNICODE_STRING Upn
Definition: ntsecapi.h:315
NTSTATUS NTAPI NtWriteVirtualMemory(IN HANDLE ProcessHandle, IN PVOID BaseAddress, IN PVOID Buffer, IN SIZE_T NumberOfBytesToWrite, OUT PSIZE_T NumberOfBytesWritten OPTIONAL)
Definition: virtual.c:2919
ULONG SessionCount
Definition: session.c:31
LIST_ENTRY Entry
Definition: session.c:13
base of all file and directory entries
Definition: entries.h:82
LSA_UNICODE_STRING UserName
Definition: ntsecapi.h:306
NTSTATUS NTAPI LsapDeleteLogonSession(IN PLUID LogonId)
Definition: session.c:201
struct _LSAP_LOGON_SESSION * PLSAP_LOGON_SESSION
LONGLONG QuadPart
Definition: typedefs.h:114
VOID LsapTerminateLogon(_In_ PLUID LogonId)
Definition: authpackage.c:545
#define PAGE_READWRITE
Definition: nt_native.h:1304