ExReleaseFastResourceExclusive

NTSTATUS __stdcall ExReleaseFastResourceExclusive(ULONG_PTR BugCheckParameter2, ULONG_PTR a2){
  unsigned __int8 CurrentIrql; 
  _ETHREAD *CurrentThread; 
  _ETHREAD *v4; 
  char v5; 

  if( (*(_BYTE *)(*(_QWORD *)&BugCheckParameter2 + 26i64) & 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);
  v4 = *(_ETHREAD **)(*(_QWORD *)&a2 + 32i64);
  if( v4 != CurrentThread )
    KeBugCheckEx(0x1C6u, (PVOID)9, *(PVOID *)&a2, v4, 0i64);
  if( *(_QWORD *)(*(_QWORD *)&a2 + 24i64) != *(_QWORD *)&BugCheckParameter2 )
    KeBugCheckEx(0x1C6u, (PVOID)8, *(PVOID *)&BugCheckParameter2, *(PVOID *)&a2, *(PVOID *)(*(_QWORD *)&a2 + 24i64));
  v5 = *(_BYTE *)(*(_QWORD *)&a2 + 17i64);
  if( (v5 & 1) != 0 )
    KeBugCheckEx(0x1C6u, (PVOID)0xA, *(PVOID *)&a2, 0i64, 0i64);
  if( (v5 & 4) == 0 )
    KeBugCheckEx(0x1C6u, (PVOID)0xB, *(PVOID *)&a2, (PVOID)(((unsigned __int64)(v5 & 4) << 14) | 1), 0i64);
  return ExpReleaseFastResourceExclusive(*(PVOID *)&BugCheckParameter2);
}

Referenced by:

No references.