PnpPrepareDriverLoading

__int64 __fastcall PnpPrepareDriverLoading(
        _UNICODE_STRING *KeyName,
        void *KeyHandle,
        void *ImageBase,
        unsigned int IsFilter,
        unsigned int *PnpFlags){
  IMAGE_NT_HEADERS *v9; 
  unsigned int v10; 
  PVOID v12; 
  UINT64 IsFiltera; 
  PVOID P; 
  GUID BlockedDriverGuid; 
  P = 0i64;
  *PnpFlags = 0;
  v9 = RtlImageNtHeader(ImageBase);
  if( !v9 )
    return 3221225473i64;
  BlockedDriverGuid = 0i64;
  LODWORD(IsFiltera) = IsFilter;
  v10 = PpCheckInDriverDatabase(
          KeyName,
          KeyHandle,
          ImageBase,
          v9->OptionalHeader.SizeOfImage,
          IsFiltera,
          &BlockedDriverGuid);
  if( v10 + 1073740949 <= 1 )
    PnpSetBlockedDriverEvent(&BlockedDriverGuid);
  if( IopGetRegistryValue(KeyHandle, (PWCHAR)&stru_1407D01E0.Xmm9, 0i64, (KEY_VALUE_FULL_INFORMATION **)&P) >= 0 )
  {
    v12 = P;
    if( *((_DWORD *)P + 1) == 4 && *((_DWORD *)P + 3) == 4 )
      *PnpFlags = *(_DWORD *)((char *)P + *((unsigned int *)P + 2));
    ExFreePoolWithTag(v12, 0);
  }
  return v10;
}

Referenced by:

IopInitializeBuiltinDriver
IopLoadDriver