IoRegisterIoTracking

NTSTATUS __fastcall IoRegisterIoTracking(INT64 a1, INT64 *a2){
  VOID **PoolWithTag; 
  VOID **v5; 
  NTSTATUS result; 
  _ETHREAD *CurrentThread; 
  VOID ***v8; 

  *a2 = 0i64;
  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x18ui64, 1918136137i64);
  v5 = PoolWithTag;
  if( !PoolWithTag )
    return -1073741670;
  *(_OWORD *)PoolWithTag = 0i64;
  PoolWithTag[2] = 0i64;
  PoolWithTag[2] = *(VOID **)(a1 + 8);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.SpecialApcDisable;
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&stru_140C452E0 + 206, 0i64);
  v8 = (VOID ***)*(&stru_140C452E0 + 211);
  if( (_UNKNOWN *)**(&stru_140C452E0 + 211) != (_UNKNOWN *)((char *)&stru_140C452E0 + 1680) )
    __fastfail(3u);
  *v5 = (char *)&stru_140C452E0 + 1680;
  v5[1] = v8;
  *v8 = v5;
  *(&stru_140C452E0 + 211) = v5;
  if( (_InterlockedExchangeAdd64((_QWORD *)&stru_140C452E0 + 206, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((_EX_PUSH_LOCK *)&stru_140C452E0 + 206);
  KeAbPostRelease((char *)&stru_140C452E0 + 1648);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  IopIrpExtensionControl(2ui64, 1ui64);
  IoPerfInit(2ui64);
  result = 0;
  *a2 = (INT64)v5;
  return result;
}

Referenced by:

No references.