IopCreateLegacyDeviceIds

NTSTATUS __stdcall IopCreateLegacyDeviceIds(INT64 a1, UINT16 *a2, INT64 a3){
  int v3; 
  WCHAR *v4; 
  __int64 v5; 
  int v6; 
  __int64 v7; 
  __int64 v8; 
  size_t v9; 
  VOID **PoolWithTag; 
  int v11; 
  UINT64 dwFlags; 
  const wchar_t *PropertySize; 
  UINT64 Flags; 
  WCHAR *ppszDestEnd; 
  UINT64 pcchRemaining; 

  v3 = HIDWORD(a2);
  ppszDestEnd = 0i64;
  v4 = 0i64;
  pcchRemaining = 0i64;
  if( a1 )
    v5 = *(_QWORD *)(*(_QWORD *)(a1 + 312) + 40i64);
  else
    v5 = 0i64;
  if( v5 && *(_QWORD *)(v5 + 48) )
  {
    if( a3 )
    {
      v6 = *(_DWORD *)(a3 + 4);
      if( (unsigned int)(v6 + 1) > 0x13 )
        v6 = 18;
    }
    else
    {
      v6 = 0;
    }
    v7 = v6;
    v8 = -1i64;
    do
      ++v8;
    while( *(_WORD *)(*((_QWORD *)&stru_140009520 + v7 + 3) + 2 * v8) );
    v9 = 2 * (*a2 + (_DWORD)v8) + 42;
    PoolWithTag = ExAllocatePoolWithTag(1ui64, v9, 1869181008i64);
    v4 = (WCHAR *)PoolWithTag;
    if( !PoolWithTag )
      return -1073741670;
    memset(PoolWithTag, 0i64, v9);
    Flags = *((_QWORD *)&stru_140009520 + v7 + 3);
    PropertySize = L"DETECTED";
    v11 = RtlStringCchPrintfExW(
            v4,
            (unsigned __int64)v9 >> 1,
            &ppszDestEnd,
            &pcchRemaining,
            0i64,
            (WCHAR *)L"%ws%ws\\%wZ");
    if( v11 >= 0 )
    {
      HIDWORD(dwFlags) = v3;
      v11 = RtlStringCchPrintfW(ppszDestEnd + 1, pcchRemaining - 1, (WCHAR *)L"%ws\\%wZ");
      if( v11 >= 0 )
      {
        LODWORD(Flags) = 0;
        LODWORD(PropertySize) = v9;
        LODWORD(dwFlags) = 7;
        v11 = CmSetDeviceRegProp(
                *(&stru_140CF2E80 + 607),
                *(WCHAR **)(v5 + 48),
                0i64,
                CM_REG_PROP_COMPATIBLEIDS,
                dwFlags,
                (UINT8 *)v4,
                (UINT64)PropertySize,
                Flags);
      }
    }
  }
  else
  {
    v11 = -1073741811;
  }
  if( v4 )
    ExFreePoolWithTag(v4, 0);
  return v11;
}

Referenced by:

IoReportDetectedDevice