ExBlockOnAddressPushLock
NTSTATUS __stdcall ExBlockOnAddressPushLock(
_EX_PUSH_LOCK *PushLock,
VOID *Address,
VOID *CompareAddress,
UINT64 AddressSize,
_LARGE_INTEGER *Timeout){
int v9;
bool v10;
int v12;
int v13;
_EX_PUSH_LOCK_WAIT_BLOCK WaitBlock[16];
memset(WaitBlock, 0i64, sizeof(WaitBlock));
ExBlockPushLock(PushLock, WaitBlock);
if( AddressSize > 8 )
goto LABEL_10;
v9 = AddressSize - 1;
if( v9 )
{
v12 = v9 - 1;
if( v12 )
{
v13 = v12 - 2;
if( v13 )
{
if( v13 != 4 )
goto LABEL_10;
v10 = *(_QWORD *)Address == *(_QWORD *)CompareAddress;
}
else
{
v10 = *(_DWORD *)Address == *(_DWORD *)CompareAddress;
}
}
else
{
v10 = *(_WORD *)Address == *(_WORD *)CompareAddress;
}
}
else
{
v10 = *(_BYTE *)Address == *(_BYTE *)CompareAddress;
}
if( v10 )
return ExTimedWaitForUnblockPushLock(PushLock, WaitBlock, Timeout);
LABEL_10:
ExpUnblockPushLock(PushLock, WaitBlock, 0);
return 0;
}Referenced by:
CmLoadAppKey
CmShutdownSystem
CmUnRegisterCallback
CmpRollbackLightWeightTransaction
CmpTransSearchAddTrans
CmpWaitForLateUnloadWorker
ExpBlockOnLockedHandleEntry
MiLockImageSection
PopBatteryUpdateCurrentState
PsSetVmProcessorHostProcess
RtlUpdateSwapReference
RtlpCSparseBitmapWaitOnAddress