PiDrvDbUnloadNode

NTSTATUS __stdcall PiDrvDbUnloadNode(PI_DRVDB_NODE *DrvDbNode, VOID **BaseKeyHandle){
  INT64 v2; 
  _ETHREAD *CurrentThread; 
  __int64 v6; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquireResourceExclusiveLite((UINT64)(DrvDbNode + 22), 1, v2);
  if( *((_QWORD *)DrvDbNode + 9) )
  {
    v6 = *((_QWORD *)DrvDbNode + 60);
    if( v6 )
    {
      if( v6 < 0 )
        KeSetCoalescableTimer(
          (INT64)(DrvDbNode + 66),
          *((_QWORD *)DrvDbNode + 60),
          0i64,
          0x3A98ui64,
          (INT64)(DrvDbNode + 82));
    }
    else
    {
      KiSetTimerEx((_KTIMER *)(DrvDbNode + 66), 0i64, 0i64, 0, (_KDPC *)(DrvDbNode + 82));
    }
    *((_BYTE *)DrvDbNode + 488) = 1;
  }
  *BaseKeyHandle = 0i64;
  ExReleaseResourceLite((PERESOURCE)(DrvDbNode + 22));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return 0;
}

Referenced by:

PiDrvDbNodeActionCallback