ExpPrepareToWakeResourceExclusive
NTSTATUS __stdcall ExpPrepareToWakeResourceExclusive(INT64 a1, INT64 *a2, INT64 *a3, INT64 *a4){
INT64 v4;
INT64 v6;
int v8;
NTSTATUS result;
INT64 v10;
v4 = a1;
v6 = 0i64;
v10 = 0i64;
if( *(_DWORD *)(v4 + 72) )
{
*a2 = *(_QWORD *)(v4 + 32);
v8 = *(_DWORD *)(v4 + 72);
*(_DWORD *)(v4 + 72) = 0;
*(_QWORD *)(v4 + 32) = 0i64;
}
else
{
if( *(_DWORD *)(v4 + 76) )
{
KeCaptureWaitChainHeadEx((_QWORD **)(v4 + 40), a2, &v10);
--*(_DWORD *)(v4 + 76);
v8 = 1;
v6 = v10;
goto LABEL_8;
}
*a2 = 0i64;
v8 = 0;
}
*(_WORD *)(v4 + 26) &= ~0x80u;
if( v8 )
{
LABEL_8:
result = v8 + *(_DWORD *)(v4 + 64) - 1;
goto LABEL_6;
}
*(_WORD *)(v4 + 24) = 0;
result = 0;
LABEL_6:
*(_DWORD *)(v4 + 64) = result;
*(_DWORD *)a4 = v8;
*a3 = v6;
return result;
}Referenced by:
ExpReleaseDisownedFastResourceExclusive
ExpReleaseFastResourceExclusive