ExReleaseDisownedFastResourceShared
NTSTATUS __stdcall ExReleaseDisownedFastResourceShared(ULONG_PTR BugCheckParameter2, ULONG_PTR a2){
__int16 v2;
unsigned __int8 CurrentIrql;
_ETHREAD *CurrentThread;
char v5;
v2 = *(_WORD *)(*(_QWORD *)&BugCheckParameter2 + 26i64);
if( (v2 & 1) == 0 )
KeBugCheckEx(0x1C6u, (PVOID)3, *(PVOID *)&BugCheckParameter2, 0i64, 0i64);
CurrentIrql = KeGetCurrentIrql();
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( CurrentIrql > 2u )
KeBugCheckEx(0x1C6u, 0i64, (PVOID)CurrentIrql, (PVOID)2, 0i64);
if( !CurrentIrql && (CurrentThread->Tcb._bf_0 & 0x400) == 0 && !CurrentThread->Tcb.WaitBlock[3].SpareLong )
KeBugCheckEx(0x1C6u, (PVOID)7, 0i64, 0i64, 0i64);
v5 = *(_BYTE *)(*(_QWORD *)&a2 + 17i64);
if( (v5 & 4) != 0 )
KeBugCheckEx(0x1C6u, (PVOID)0xB, *(PVOID *)&a2, (PVOID)((unsigned __int64)(v5 & 4) << 14), 0i64);
if( *(_QWORD *)(*(_QWORD *)&a2 + 24i64) != *(_QWORD *)&BugCheckParameter2 )
KeBugCheckEx(0x1C6u, (PVOID)0xC, *(PVOID *)&BugCheckParameter2, *(PVOID *)&a2, *(PVOID *)(*(_QWORD *)&a2 + 24i64));
if( (v5 & 1) == 0 )
KeBugCheckEx(0x1C6u, (PVOID)0xD, *(PVOID *)&a2, 0i64, 0i64);
if( (v2 & 0x80u) == 0 )
return ExpReleaseDisownedFastResourceShared(*(__int64 *)&BugCheckParameter2, *(__int64 *)&a2);
else
return ExpReleaseDisownedFastResourceExclusive(*(__int64 *)&BugCheckParameter2, *(__int64 *)&a2);
}Referenced by:
No references.