PiDrvDbUnloadNodeWorkerCallback

VOID __stdcall PiDrvDbUnloadNodeWorkerCallback(PVOID Parameter){
  _ETHREAD *CurrentThread; 
  void *v3; 
  PiDrvDbUnloadNodeReset((INT64)Parameter);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquireResourceExclusiveLite((ERESOURCE *)((char *)Parameter + 88), 1u);
  if( *((_BYTE *)Parameter + 488) )
  {
    PnpDiagnosticTraceObject(&KMPnPEvt_DriverDatabaseUnload_Start, (_UNICODE_STRING *)Parameter + 1);
    v3 = (void *)*((_QWORD *)Parameter + 9);
    if( v3 )
    {
      ZwClose(v3);
      *((_QWORD *)Parameter + 9) = 0i64;
    }
    *((_WORD *)Parameter + 244) = 0;
    PnpDiagnosticTraceObject(&KMPnPEvt_DriverDatabaseUnload_Pend, (_UNICODE_STRING *)Parameter + 1);
    *((_QWORD *)Parameter + 55) = 0i64;
    *((_QWORD *)Parameter + 57) = PiDrvDbUnloadNodeWaitWorkerCallback;
    *((_QWORD *)Parameter + 58) = Parameter;
    ExQueueWorkItem((WORK_QUEUE_ITEM *)((char *)Parameter + 440), DelayedWorkQueue);
  }
  ExReleaseResourceLite((PERESOURCE)((char *)Parameter + 88));
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}

Referenced by:

No references.