PiRearrangeDeviceInstances

VOID __stdcall PiRearrangeDeviceInstances(PVOID ServiceEnumHandle, UINT64 InstanceCount, UINT64 InstanceDeleted){
  int v3; 
  int v4; 
  signed __int64 v6; 
  PVOID v7; 
  signed __int64 v8; 
  PVOID v9; 
  NTSTRSAFE_PCWSTR pszFormat; 
  __int64 v11; 
  NTSTRSAFE_PWSTR ppszDestEnd; 
  struct _UNICODE_STRING ValueName; 
  UINT64 dwFlags; 
  PVOID P; 
  __int128 KeyInformation[3]; 
  wchar_t pszDest[12]; 
  *(_DWORD *)(&ValueName.MaximumLength + 1) = 0;
  LODWORD(dwFlags) = 0;
  P = 0i64;
  v3 = InstanceDeleted;
  v4 = InstanceCount;
  memset(KeyInformation, 0, sizeof(KeyInformation));
  ZwQueryKey(ServiceEnumHandle, KeyFullInformation, KeyInformation, 0x30ui64, &dwFlags);
  ppszDestEnd = pszDest;
  RtlStringCchPrintfExW(pszDest, 0xAui64, &ppszDestEnd, 0i64, 0i64, L"%u", v4);
  v6 = ppszDestEnd - pszDest;
  ValueName.MaximumLength = 20;
  if( (_DWORD)v6 == -1 )
    ValueName.Length = 20;
  else
    ValueName.Length = 2 * v6;
  ValueName.Buffer = pszDest;
  if( IopGetRegistryValue(ServiceEnumHandle, pszDest, 0i64, (KEY_VALUE_FULL_INFORMATION **)&P) >= 0 )
  {
    ZwDeleteValueKey(ServiceEnumHandle, &ValueName);
    LODWORD(v11) = v3;
    ppszDestEnd = pszDest;
    RtlStringCchPrintfExW(pszDest, 0xAui64, &ppszDestEnd, 0i64, 0i64, L"%u", v11);
    ValueName.MaximumLength = 20;
    v8 = ppszDestEnd - pszDest;
    if( (_DWORD)v8 == -1 )
      ValueName.Length = 20;
    else
      ValueName.Length = 2 * v8;
    v9 = P;
    ValueName.Buffer = pszDest;
    LODWORD(pszFormat) = *((_DWORD *)P + 3);
    ZwSetValueKey(ServiceEnumHandle, &ValueName, 0i64, 1ui64, (char *)P + *((unsigned int *)P + 2), (UINT64)pszFormat);
    ExFreePoolWithTag(v9, 0);
    v7 = 0i64;
  }
  else
  {
    v7 = P;
  }
  if( v7 )
    ExFreePoolWithTag(v7, 0);
}

Referenced by:

PiProcessDriverInstance