ExEnterCriticalRegionAndAcquireResourceExclusive
VOID *__stdcall ExEnterCriticalRegionAndAcquireResourceExclusive(_ERESOURCE *Resource){
_ETHREAD *CurrentThread;
__int16 v2;
unsigned __int8 CurrentIrql;
_ETHREAD *v5;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
if( (Resource->Flag & 0x41) == 1 )
KeBugCheckEx(0x1C6u, (PVOID)0xF, Resource, 0i64, 0i64);
v2 = Resource->Flag & 1;
if( v2 )
{
CurrentIrql = KeGetCurrentIrql();
v5 = (_ETHREAD *)KeGetCurrentThread();
if( CurrentIrql > 1u )
KeBugCheckEx(0x1C6u, 0i64, (PVOID)CurrentIrql, (PVOID)1, 0i64);
if( (v5->Tcb.ApcState.InProgressFlags & 2) != 0 )
KeBugCheckEx(0x1C6u, (PVOID)6, 0i64, 0i64, 0i64);
if( !CurrentIrql && (v5->Tcb._bf_0 & 0x400) == 0 && !v5->Tcb.WaitBlock[3].SpareLong )
KeBugCheckEx(0x1C6u, (PVOID)7, 0i64, 0i64, 0i64);
}
if( v2 )
ExpFastResourceLegacyAcquireExclusive(Resource);
else
ExpAcquireResourceExclusiveLite(Resource, 1);
return KeGetCurrentThread()->WaitBlock[2].SparePtr;
}Referenced by:
No references.