PiIsDriverBlocked

INT64 __stdcall PiIsDriverBlocked(
        PVOID SdbHandle,
        _UNICODE_STRING *FullPath,
        PVOID ImageBase,
        UINT64 ImageSize,
        _GUID *EntryGuid){
  wchar_t *Buffer; 
  PVOID v7; 
  INT64 v9; 
  unsigned int DatabaseMatch; 
  unsigned int v11; 
  INT64 v13; 
  char v14; 
  CHAR IsHVCIEnabled; 
  WCHAR *v16; 
  WCHAR v17; 
  wchar_t *v18; 
  bool v19; 
  UINT64 cbImageSize; 
  int v21; 
  int v22[5]; 
  UINT64 v23; 
  INT64 v24; 
  PVOID v25; 
  GUID Guid; 
  __int128 v27; 
  __int64 v28; 
  v28 = 0i64;
  Buffer = FullPath->Buffer;
  v7 = ImageBase;
  v25 = ImageBase;
  v21 = 0;
  Guid = 0i64;
  v27 = 0i64;
  DatabaseMatch = SdbGetDatabaseMatch(SdbHandle, Buffer, ImageBase, ImageBase, (unsigned int)ImageSize);
  if( !DatabaseMatch )
  {
    v11 = 0;
    goto LABEL_3;
  }
  *(_QWORD *)&v22[1] = 0i64;
  LODWORD(v24) = 4;
  v22[0] = 0;
  v23 = 0x400000000i64;
  if( (unsigned int)SdbTagRefToTagID((__int64)SdbHandle, DatabaseMatch, (PVOID **)&v22[1], v22) )
  {
    if( !(unsigned int)SdbQueryDataExTagID(
                          *(RTL_RUN_ONCE **)&v22[1],
                          (unsigned int)v22[0],
                          v13,
                          &v24,
                          &v21,
                          (UINT64 *)((char *)&v23 + 4),
                          &v23) )
    {
      v11 = 0;
      v14 = v21;
      if( (v21 & 0x10) != 0 )
      {
        IsHVCIEnabled = PiIsHVCIEnabled();
        v14 = v21;
        if( IsHVCIEnabled )
          v11 = -1073740949;
      }
      else if( (v21 & 4) == 0 || ExIsProcessorFeaturePresent(9u) )
      {
        v11 = ((v14 & 1) != 0) - 1073740949;
      }
      if( (v14 & 8) != 0
        && (PnpSetupInProgress || PnpSetupOOBEInProgress
                               || PnpSetupUpgradeInProgress
                               || PnpSetupRollbackActiveInProgress) )
      {
        v11 = -1073740949;
      }
      goto LABEL_13;
    }
  }
  else
  {
    LODWORD(cbImageSize) = DatabaseMatch;
    AslLogCallPrintf(1ui64, "SdbQueryDataEx", 0x162Dui64, "Failed to convert tagref 0x%x to tagid", cbImageSize);
  }
  v11 = -1073740949;
LABEL_13:
  if( !(unsigned int)SdbReadEntryInformation((__int64)SdbHandle, DatabaseMatch, (__int64)&Guid)
    && (PiLoggedErrorEventsMask & 0x100) == 0 )
  {
    PiLoggedErrorEventsMask |= 0x100u;
    *(_OWORD *)&v22[1] = 0i64;
    RtlInitUnicodeString((PUNICODE_STRING)&v22[1], L"READ DRIVER ID FAILED", v9);
    LODWORD(cbImageSize) = 0;
    PnpLogEvent((UNICODE_STRING *)&v22[1], 0i64, 3221226349i64, 0i64, cbImageSize);
  }
  v7 = v25;
LABEL_3:
  if( v11 + 1073740949 <= 1 )
  {
    v16 = wcsrchr(FullPath->Buffer, 0x5Cu);
    if( v16 )
      v18 = v16 + 1;
    else
      v18 = FullPath->Buffer;
    *(_OWORD *)&v22[1] = 0i64;
    RtlInitUnicodeString((PUNICODE_STRING)&v22[1], v18, v17);
    LODWORD(cbImageSize) = 16;
    PnpLogEvent((UNICODE_STRING *)&v22[1], 0i64, v11, &Guid, cbImageSize);
    PnpTraceDriverBlocked((INT64)v18, (INT64)&Guid);
  }
  if( !v11 || v11 + 1073740949 <= 1 )
  {
    PiUpdateDriverDBCache(FullPath, v7, v9, (GUID *)v11, &Guid);
    if( v11 + 1073740949 <= 1 )
    {
      if( EntryGuid )
      {
        v19 = (v21 & 0x10) == 0;
        *EntryGuid = Guid;
        if( !v19 )
          PiNotifyCiDriverBlocked(EntryGuid, (UINT8 **)FullPath);
      }
    }
  }
  return v11;
}

Referenced by:

PiLookupInDDB