ExpPrepareToWakeResourceShared
NTSTATUS __stdcall ExpPrepareToWakeResourceShared(INT64 a1, INT64 *a2, INT64 *a3, INT64 *a4){
INT64 v4;
INT64 v5;
int v8;
NTSTATUS result;
bool v10;
INT64 v11;
v4 = a1;
v5 = 0i64;
v11 = 0i64;
v8 = 1;
if( *(_DWORD *)(v4 + 64) > 1u )
goto LABEL_4;
if( *(_DWORD *)(v4 + 76) )
{
KeCaptureWaitChainHeadEx((_QWORD **)(v4 + 40), a2, &v11);
--*(_DWORD *)(v4 + 76);
*(_WORD *)(v4 + 26) |= 0x80u;
v5 = v11;
}
else
{
if( !*(_DWORD *)(v4 + 72) )
{
LABEL_4:
v8 = 0;
*a2 = 0i64;
goto LABEL_5;
}
*a2 = *(_QWORD *)(v4 + 32);
v8 = *(_DWORD *)(v4 + 72);
*(_DWORD *)(v4 + 72) = 0;
*(_QWORD *)(v4 + 32) = 0i64;
}
LABEL_5:
result = v8 - 1;
v10 = v8 - 1 + *(_DWORD *)(v4 + 64) == 0;
*(_DWORD *)(v4 + 64) += v8 - 1;
if( v10 )
*(_WORD *)(v4 + 24) = 0;
*(_DWORD *)a4 = v8;
*a3 = v5;
return result;
}Referenced by:
ExpReleaseDisownedFastResourceShared
ExpReleaseFastResourceShared