PiIsDriverBlocked

VOID __fastcall PiIsDriverBlocked(VOID *SdbHandle, _UNICODE_STRING *FullPath, VOID *ImageBase, UINT64 ImageSize){
  wchar_t *Buffer; 
  VOID *v6; 
  INT64 v8; 
  unsigned int DatabaseMatch; 
  unsigned int v10; 
  const WCHAR *v11; 
  char v12; 
  CHAR IsHVCIEnabled; 
  WORD *v14; 
  wchar_t *v15; 
  bool v16; 
  int cbBufferSize; 
  unsigned int cbBufferSize_4; 
  _UNICODE_STRING DestinationString; 
  UINT64 v20; 
  UINT64 dwDataType; 
  VOID *v22; 
  __int128 v23[2]; 
  __int64 v24; 
  _OWORD *v25; 

  v24 = 0i64;
  Buffer = FullPath->Buffer;
  v6 = ImageBase;
  v22 = ImageBase;
  cbBufferSize = 0;
  memset(v23, 0, sizeof(v23));
  DatabaseMatch = SdbGetDatabaseMatch(SdbHandle, Buffer, ImageBase, ImageBase, (unsigned int)ImageSize);
  if( !DatabaseMatch )
  {
    v10 = 0;
    goto LABEL_3;
  }
  *(_QWORD *)&DestinationString.Length = 0i64;
  LODWORD(dwDataType) = 4;
  cbBufferSize_4 = 0;
  v20 = 0x400000000i64;
  if( SdbTagRefToTagID(SdbHandle, DatabaseMatch, (_DB **)&DestinationString, (UINT64 *)&cbBufferSize_4) )
  {
    if( !SdbQueryDataExTagID(
            *(_DB **)&DestinationString.Length,
            cbBufferSize_4,
            v11,
            &dwDataType,
            &cbBufferSize,
            (UINT64 *)((char *)&v20 + 4),
            &v20) )
    {
      v10 = 0;
      v12 = cbBufferSize;
      if( (cbBufferSize & 0x10) != 0 )
      {
        IsHVCIEnabled = PiIsHVCIEnabled();
        v12 = cbBufferSize;
        if( IsHVCIEnabled )
          v10 = -1073740949;
      }
      else if( (cbBufferSize & 4) == 0 || ExIsProcessorFeaturePresent(9ui64) )
      {
        v10 = ((v12 & 1) != 0) - 1073740949;
      }
      if( (v12 & 8) != 0 && HIDWORD(qword_140C50A2C) )
        v10 = -1073740949;
      goto LABEL_13;
    }
  }
  else
  {
    AslLogCallPrintf(1ui64, (INT8 *)"SdbQueryDataEx", 0x162Dui64, (INT8 *)"Failed to convert tagref 0x%x to tagid");
  }
  v10 = -1073740949;
LABEL_13:
  if( !(unsigned int)SdbReadEntryInformation(SdbHandle, DatabaseMatch, (__int64)v23)
    && (PiLoggedErrorEventsMask & 0x100) == 0 )
  {
    PiLoggedErrorEventsMask |= 0x100u;
    DestinationString = 0i64;
    RtlInitUnicodeString(&DestinationString, L"READ DRIVER ID FAILED");
    PnpLogEvent((const VOID **)&DestinationString, 0i64, -1073740947, 0i64, 0);
  }
  v6 = v22;
LABEL_3:
  if( v10 + 1073740949 <= 1 )
  {
    v14 = wcsrchr(FullPath->Buffer, 92);
    if( v14 )
      v15 = v14 + 1;
    else
      v15 = FullPath->Buffer;
    DestinationString = 0i64;
    RtlInitUnicodeString(&DestinationString, v15);
    PnpLogEvent((const VOID **)&DestinationString, 0i64, v10, v23, 0x10u);
    PnpTraceDriverBlocked((__int64)v15, (__int64)v23);
  }
  if( !v10 || v10 + 1073740949 <= 1 )
  {
    PiUpdateDriverDBCache(FullPath, v6, v8, (_GUID *)v10);
    if( v10 + 1073740949 <= 1 && v25 )
    {
      v16 = (cbBufferSize & 0x10) == 0;
      *v25 = v23[0];
      if( !v16 )
        PiNotifyCiDriverBlocked(v25, (const VOID **)FullPath);
    }
  }
}

Referenced by:

PiLookupInDDB