PiDqConvertQueryFlagsToString

NTSTATUS __stdcall PiDqConvertQueryFlagsToString(
        UINT64 QueryFlags,
        WCHAR *QueryFlagsString,
        UINT64 QueryFlagsStringSize,
        UINT64 *RequiredSize){
  unsigned int v4; 
  WCHAR *v6; 
  int v7; 
  NTSTATUS result; 
  unsigned int v9; 
  UINT64 v10; 
  UINT64 dwFlags; 
  size_t cbDest[2]; 
  _NTSTRSAFE_PWSTR ppszDestEnd[2]; 

  v4 = QueryFlagsStringSize;
  v6 = QueryFlagsString;
  v7 = QueryFlags;
  result = 0;
  if( (QueryFlags & 0xFFFFFFF8) != 0 )
    return -1073741811;
  v9 = 2;
  if( (unsigned int)QueryFlagsStringSize >= 2 )
    *QueryFlagsString = 0;
  *(_QWORD *)ppszDestEnd = QueryFlagsString;
  v10 = (unsigned int)QueryFlagsStringSize;
  *(_QWORD *)cbDest = (unsigned int)QueryFlagsStringSize;
  if( (QueryFlags & 1) != 0 )
  {
    v7 = QueryFlags & 0xFFFFFFFE;
    v9 = 54;
    if( (unsigned int)QueryFlagsStringSize >= 0x36 )
    {
      LODWORD(dwFlags) = 1024;
      result = RtlStringCbCopyExW(
                 v6,
                 (unsigned int)QueryFlagsStringSize,
                 (WCHAR *)L"DevQueryFlagUpdateResults ",
                 (WCHAR **)ppszDestEnd,
                 (UINT64 *)cbDest,
                 dwFlags);
      if( result < 0 )
        return result;
      v6 = *(WCHAR **)ppszDestEnd;
      v10 = *(_QWORD *)cbDest;
    }
  }
  if( (v7 & 2) != 0 )
  {
    v7 &= ~2u;
    v9 += 52;
    if( v9 <= v4 )
    {
      LODWORD(dwFlags) = 1024;
      result = RtlStringCbCopyExW(
                 v6,
                 v10,
                 (WCHAR *)L"DevQueryFlagAllProperties ",
                 (WCHAR **)ppszDestEnd,
                 (UINT64 *)cbDest,
                 dwFlags);
      if( result < 0 )
        return result;
      v6 = *(WCHAR **)ppszDestEnd;
      v10 = *(_QWORD *)cbDest;
    }
  }
  if( (v7 & 4) != 0 )
  {
    v7 &= ~4u;
    v9 += 42;
    if( v9 <= v4 )
    {
      LODWORD(dwFlags) = 1024;
      result = RtlStringCbCopyExW(
                 v6,
                 v10,
                 (WCHAR *)L"DevQueryFlagLocalize ",
                 (WCHAR **)ppszDestEnd,
                 (UINT64 *)cbDest,
                 dwFlags);
      if( result < 0 )
        return result;
      v6 = *(WCHAR **)ppszDestEnd;
      v10 = *(_QWORD *)cbDest;
    }
  }
  if( !v7
    || (v9 += 24, v9 > v4)
    || (LODWORD(dwFlags) = 1024,
        result = RtlStringCbCopyExW(v6, v10, (WCHAR *)L"", (WCHAR **)ppszDestEnd, (UINT64 *)cbDest, dwFlags),
        result >= 0) )
  {
    if( RequiredSize )
      *(_DWORD *)RequiredSize = v9;
    if( v9 < v4 )
      return -1073741789;
  }
  return result;
}

Referenced by:

PiDqIrpQueryCreate