PnpFixupID

UINT64 __stdcall PnpFixupID(
        PWCHAR ID,
        UINT64 MaxIDLength,
        UINT64 Multi,
        UINT64 AllowedSeparators,
        UNICODE_STRING *LogString){
  unsigned int v5; 
  unsigned int v7; 
  PWCHAR v8; 
  PWCHAR v9; 
  WCHAR *v10; 
  WCHAR v11; 
  UNICODE_STRING *v13; 
  wchar_t *p_OutputLength; 
  UINT64 DumpDataSize; 
  UNICODE_STRING InsertionString2; 
  unsigned int v17; 
  v5 = AllowedSeparators;
  *(_DWORD *)(&InsertionString2.MaximumLength + 1) = 0;
  v7 = 0;
  v8 = 0i64;
  v9 = ID;
  v10 = &ID[(unsigned int)MaxIDLength];
  if( ID < v10 )
  {
    while( 1 )
    {
      v11 = *v9;
      if( *v9 )
      {
        if( v11 == 32 )
        {
          *v9 = 95;
        }
        else
        {
          if( (unsigned __int16)(v11 - 32) > 0x5Fu || v11 == 44 )
          {
            v13 = LogString;
            if( !LogString )
              return 0i64;
            *(_DWORD *)&InsertionString2.Length = 2359330;
            p_OutputLength = (wchar_t *)&stru_1407D01E0.OutputLength;
            LODWORD(DumpDataSize) = 2;
LABEL_26:
            InsertionString2.Buffer = p_OutputLength;
            PnpLogEvent(v13, &InsertionString2, 3221487672i64, v9, DumpDataSize);
            return 0i64;
          }
          if( v11 == 92 )
          {
            v17 = ++v7;
            if( v7 > v5 )
            {
              v13 = LogString;
              if( !LogString )
                return 0i64;
              *(_DWORD *)&InsertionString2.Length = 2621478;
              p_OutputLength = (wchar_t *)&stru_1407D01E0.Rsi;
              LODWORD(DumpDataSize) = 4;
              v9 = (PWCHAR)&v17;
              goto LABEL_26;
            }
          }
        }
      }
      else
      {
        if( !(_DWORD)Multi || v8 && v9 == v8 + 1 )
        {
LABEL_8:
          if( v9 < v10 && (v7 == v5 || v5 == -1) )
            return(unsigned int)(v9 - ID) + 1;
          break;
        }
        v8 = v9;
      }
      if( ++v9 >= v10 )
        goto LABEL_8;
    }
  }
  v13 = LogString;
  if( LogString )
  {
    *(_DWORD *)&InsertionString2.Length = 7471216;
    p_OutputLength = L"not terminated, too long or invalid number of separators";
    LODWORD(DumpDataSize) = 0;
    v9 = 0i64;
    goto LABEL_26;
  }
  return 0i64;
}

Referenced by:

PnpQueryID