PiDrvDbLoadNode

NTSTATUS __stdcall PiDrvDbLoadNode(PI_DRVDB_NODE *DrvDbNode, VOID **BaseKeyHandle){
  INT64 v2; 
  int v3; 
  _ETHREAD *CurrentThread; 
  VOID **v7; 
  int v9; 
  int v10; 
  VOID *Handle; 

  v3 = 0;
  Handle = 0i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquireResourceExclusiveLite((UINT64)(DrvDbNode + 22), 1, v2);
  if( *((_BYTE *)DrvDbNode + 80) )
  {
    v3 = -1073740697;
  }
  else
  {
    if( *((_BYTE *)DrvDbNode + 488) )
    {
      KeCancelTimer((INT64)(DrvDbNode + 66));
      *((_BYTE *)DrvDbNode + 488) = 0;
    }
    v7 = (VOID **)(DrvDbNode + 18);
    if( !*((_QWORD *)DrvDbNode + 9) )
    {
      if( SysCtxRegOpenKey(0i64, 0i64, *((const WCHAR **)DrvDbNode + 5), 0, 0x2000000u, &Handle) < 0
        || (v3 = SysCtxRegOpenKey(0i64, Handle, L"DriverDatabase", 0, 0x2000000u, (VOID **)DrvDbNode + 9),
            ZwClose((_HANDLE)Handle),
            v3 < 0) )
      {
        if( *(&PnpReplaceEvent + 1665) )
        {
          v3 = -1073741077;
          goto LABEL_6;
        }
        v9 = ZwWaitForSingleObject(*((_QWORD *)DrvDbNode + 59), 0, 0i64);
        v10 = v9;
        if( !*((_BYTE *)DrvDbNode + 489) )
        {
          *((_BYTE *)DrvDbNode + 489) = 1;
          PnpDiagnosticTraceObjectWithStatus(&KMPnPEvt_DriverDatabaseUnload_Stop, (unsigned __int16 *)DrvDbNode + 8, v9);
          PnpDiagnosticTraceObjectWithStatus(
            &KMPnPEvt_DriverDatabaseLoaded_Stop,
            (unsigned __int16 *)DrvDbNode + 8,
            v10);
        }
        *((_QWORD *)DrvDbNode + 28) = 0i64;
        *((_QWORD *)DrvDbNode + 30) = PiDrvDbLoadNodeWorkerCallback;
        *((_QWORD *)DrvDbNode + 31) = DrvDbNode;
        KeInitializeEvent((INT64)(DrvDbNode + 50), 1, 0);
        ExQueueWorkItem((PWORK_QUEUE_ITEM)DrvDbNode + 7, CriticalWorkQueue);
        KeWaitForSingleObject((UINT64)(DrvDbNode + 50), 0, 0, 0, 0i64);
        if( *v7 )
        {
          v3 = 0;
        }
        else if( *((_BYTE *)DrvDbNode + 80) )
        {
          v3 = -1073740697;
        }
        else
        {
          v3 = -1073741823;
          if( DrvDbNode[64] < 0 )
            v3 = DrvDbNode[64];
        }
      }
    }
    *BaseKeyHandle = *v7;
  }
LABEL_6:
  ExReleaseResourceLite((PERESOURCE)(DrvDbNode + 22));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return v3;
}

Referenced by:

PiDrvDbNodeActionCallback