Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 22 of file security.c.
Referenced by ImpersonateSelf().
{ HANDLE ProcessToken; HANDLE ImpersonationToken; NTSTATUS Status; OBJECT_ATTRIBUTES ObjAttr; SECURITY_QUALITY_OF_SERVICE Sqos; PAGED_CODE_RTL(); Status = ZwOpenProcessToken(NtCurrentProcess(), TOKEN_DUPLICATE, &ProcessToken); if (!NT_SUCCESS(Status)) { DPRINT1("NtOpenProcessToken() failed (Status %lx)\n", Status); return(Status); } Sqos.Length = sizeof(SECURITY_QUALITY_OF_SERVICE); Sqos.ImpersonationLevel = ImpersonationLevel; Sqos.ContextTrackingMode = 0; Sqos.EffectiveOnly = FALSE; InitializeObjectAttributes( &ObjAttr, NULL, 0, NULL, NULL ); ObjAttr.SecurityQualityOfService = &Sqos; Status = ZwDuplicateToken(ProcessToken, TOKEN_IMPERSONATE, &ObjAttr, Sqos.EffectiveOnly, /* why both here _and_ in Sqos? */ TokenImpersonation, &ImpersonationToken); if (!NT_SUCCESS(Status)) { DPRINT1("NtDuplicateToken() failed (Status %lx)\n", Status); NtClose(ProcessToken); return(Status); } Status = ZwSetInformationThread(NtCurrentThread(), ThreadImpersonationToken, &ImpersonationToken, sizeof(HANDLE)); if (!NT_SUCCESS(Status)) { DPRINT1("NtSetInformationThread() failed (Status %lx)\n", Status); } ZwClose(ImpersonationToken); ZwClose(ProcessToken); return(Status); }