PspThreadFromTicket
INT64 __fastcall PspThreadFromTicket(_QWORD *a1, _QWORD *a2){
_ETHREAD *CurrentThread;
__int64 v4;
__int64 v5;
_EJOB *CurrentServerSilo;
bool v7;
int v9[10];
__int64 v10;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v10 = PspWorkOnBehalfEncodingKey ^ *a1;
--*((_WORD *)CurrentThread + 243);
LODWORD(v4) = PspReferenceCidTableEntry((PVOID)(int)v10, 6u);
v5 = v4;
if( v4 )
{
CurrentServerSilo = PsGetCurrentServerSilo();
if( (*(_DWORD *)(v5 + 1296) & 2) == 0 )
{
_InterlockedOr(v9, 0);
if( (*(_QWORD *)(v5 + 1280) & 1) != 0 )
ExfAcquireReleasePushLockExclusive((VOID *)(v5 + 1280));
if( (*(_DWORD *)(v5 + 1296) & 2) == 0 )
goto LABEL_7;
}
if( !PsIsProcessInSilo(*(_QWORD *)(v5 + 544), (__int64)CurrentServerSilo) )
{
LABEL_7:
HalPutDmaAdapter((PADAPTER_OBJECT)v5);
v5 = 0i64;
}
}
v7 = (*((_WORD *)CurrentThread + 243))++ == 0xFFFF;
if( v7 && *((_ETHREAD **)CurrentThread + 19) != (_ETHREAD *)((char *)CurrentThread + 152) )
KiCheckForKernelApcDelivery();
if( !v5 )
return 3221225483i64;
*a2 = v5;
if( *(_DWORD *)(v5 + 1072) == HIDWORD(v10) )
return 0i64;
HalPutDmaAdapter((PADAPTER_OBJECT)v5);
return 3221226021i64;
}Referenced by:
NtSetInformationThread