NtImpersonateThread
NTSTATUS __stdcall NtImpersonateThread(
PVOID ServerThreadHandle,
PVOID ClientThreadHandle,
SECURITY_QUALITY_OF_SERVICE *SecurityQos){
KPROCESSOR_MODE v6;
NTSTATUS result;
int v8;
struct _DMA_ADAPTER *v9;
PVOID Object;
struct _SECURITY_QUALITY_OF_SERVICE ClientSecurityQos;
struct _SECURITY_CLIENT_CONTEXT ClientContext;
PVOID v13;
*(_QWORD *)&ClientSecurityQos.Length = 0i64;
*(_DWORD *)&ClientSecurityQos.ContextTrackingMode = 0;
memset((INT64)&ClientContext, 0i64);
v6 = *((_BYTE *)KeGetCurrentThread() + 562);
if( v6 && ((unsigned __int8)SecurityQos & 3) != 0 )
ExRaiseDatatypeMisalignment();
ClientSecurityQos = *SecurityQos;
Object = 0i64;
result = ObReferenceObjectByHandle(ClientThreadHandle, 0x200u, (POBJECT_TYPE)PsThreadType, v6, &Object, 0i64);
if( result >= 0 )
{
v13 = 0i64;
v8 = ObReferenceObjectByHandle(ServerThreadHandle, 0x100u, (POBJECT_TYPE)PsThreadType, v6, &v13, 0i64);
v9 = (struct _DMA_ADAPTER *)Object;
if( v8 >= 0 )
{
v8 = SeCreateClientSecurity((PETHREAD)Object, &ClientSecurityQos, 0, &ClientContext);
if( v8 >= 0 )
{
v8 = SeImpersonateClientEx(&ClientContext, (PETHREAD)v13);
HalPutDmaAdapter((PADAPTER_OBJECT)ClientContext.ClientToken);
}
HalPutDmaAdapter((PADAPTER_OBJECT)v13);
}
HalPutDmaAdapter(v9);
return v8;
}
return result;
}Referenced by:
No references.