PnpConvertDevpropcompkeyArrayToString

NTSTATUS __fastcall PnpConvertDevpropcompkeyArrayToString(
        __int64 a1,
        unsigned int a2,
        WCHAR *a3,
        unsigned int a4,
        unsigned int *a5){
  unsigned int v5; 
  WCHAR *v6; 
  unsigned int v10; 
  unsigned int v11; 
  NTSTATUS result; 
  UINT64 RequiredSize; 

  v5 = a4;
  v6 = a3;
  LODWORD(RequiredSize) = 0;
  v10 = 2;
  if( a4 >= 2 )
    *a3 = 0;
  v11 = 0;
  if( a2 )
  {
    while( 1 )
    {
      result = ConvertDevpropcompkeyToString((_DEVPROPCOMPKEY *const)(a1 + 32i64 * v11), v6, v5, &RequiredSize);
      if( (int)(result + 0x80000000) >= 0 && result != -1073741789 )
        break;
      if( v10 + (_DWORD)RequiredSize - 2 < v10 )
        return -1073741675;
      v10 += RequiredSize - 2;
      if( v5 >= (unsigned __int64)(unsigned int)RequiredSize - 2 )
      {
        v5 += 2 - RequiredSize;
        v6 += ((unsigned __int64)(unsigned int)RequiredSize - 2) >> 1;
      }
      if( ++v11 >= a2 )
        goto LABEL_10;
    }
  }
  else
  {
LABEL_10:
    result = 0;
    if( a5 )
      *a5 = v10;
    if( v10 > a4 )
      return -1073741789;
  }
  return result;
}

Referenced by:

PiDqIrpQueryCreate