PiDrvDbLoadNode

INT64 __fastcall PiDrvDbLoadNode(INT64 a1, _QWORD *a2){
  int v2; 
  _ETHREAD *CurrentThread; 
  _QWORD *v6; 
  unsigned int v8; 
  unsigned int v9; 
  HANDLE Handle; 
  v2 = 0;
  Handle = 0i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquireResourceExclusiveLite((ERESOURCE *)(a1 + 88), 1u);
  if( *(_BYTE *)(a1 + 80) )
  {
    v2 = -1073740697;
  }
  else
  {
    if( *(_BYTE *)(a1 + 488) )
    {
      KeCancelTimer((PKTIMER)(a1 + 264));
      *(_BYTE *)(a1 + 488) = 0;
    }
    v6 = (_QWORD *)(a1 + 72);
    if( !*(_QWORD *)(a1 + 72) )
    {
      if( (int)SysCtxRegOpenKey(0i64, 0i64, *(const WCHAR **)(a1 + 40), 0, 0x2000000u, &Handle) < 0
        || (v2 = SysCtxRegOpenKey(
                   0i64,
                   (char *)Handle,
                   (const WCHAR *)L"DriverDatabase",
                   0,
                   0x2000000u,
                   (void **)(a1 + 72)),
            ZwClose(Handle),
            v2 < 0) )
      {
        if( PnpShutdownEvent.Header.SignalState )
        {
          v2 = -1073741077;
          goto LABEL_6;
        }
        v8 = ZwWaitForSingleObject(*(HANDLE *)(a1 + 472), 0, 0i64);
        v9 = v8;
        if( !*(_BYTE *)(a1 + 489) )
        {
          *(_BYTE *)(a1 + 489) = 1;
          PnpDiagnosticTraceObjectWithStatus(&KMPnPEvt_DriverDatabaseUnload_Stop, (_UNICODE_STRING *)(a1 + 16), v8);
          PnpDiagnosticTraceObjectWithStatus(&KMPnPEvt_DriverDatabaseLoaded_Stop, (_UNICODE_STRING *)(a1 + 16), v9);
        }
        *(_QWORD *)(a1 + 224) = 0i64;
        *(_QWORD *)(a1 + 240) = PiDrvDbLoadNodeWorkerCallback;
        *(_QWORD *)(a1 + 248) = a1;
        KeInitializeEvent((_KEVENT *)(a1 + 200), SynchronizationEvent, 0);
        ExQueueWorkItem((WORK_QUEUE_ITEM *)(a1 + 224), CriticalWorkQueue);
        KeWaitForSingleObject((PVOID)(a1 + 200), Executive, 0, 0, 0i64);
        if( *v6 )
        {
          v2 = 0;
        }
        else if( *(_BYTE *)(a1 + 80) )
        {
          v2 = -1073740697;
        }
        else
        {
          v2 = -1073741823;
          if( *(int *)(a1 + 256) < 0 )
            v2 = *(_DWORD *)(a1 + 256);
        }
      }
    }
    *a2 = *v6;
  }
LABEL_6:
  ExReleaseResourceLite((PERESOURCE)(a1 + 88));
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  return(unsigned int)v2;
}

Referenced by:

PiDrvDbNodeActionCallback