#include "117828F1-DA7D-4BC1-8B58-9A954FED5121.h"
// 117828F1-DA7D-4BC1-8B58-9A954FED5121 - Regenerated from IDA
// Total functions: 906
// Function: HiiGetString @ 0x2e0 (0x15a bytes)
// Index: 1/906
EFI_STRING __cdecl HiiGetString(EFI_HII_HANDLE HiiHandle, EFI_STRING_ID StringId, const CHAR8 *Language)
{
const CHAR8 *FirstString_1; // r9
const CHAR8 *FirstString; // rbx
EFI_STRING result; // rax
UINTN v8; // rax
__int64 v9; // rsi
EFI_STRING v10; // rbx
EFI_STRING v11; // r9
__int64 v12; // rax
EFI_STRING_ID StringId_1; // [rsp+68h] [rbp+10h] BYREF
StringId_1 = StringId; /*0x2ef*/
FirstString = FirstString_1; /*0x305*/
if ( !HiiHandle ) /*0x315*/
DebugAssert( /*0x329*/
"c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c",
0x46u,
"HiiHandle != ((void *) 0)");
if ( !Language ) /*0x33b*/
DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c", 0x47u, "String != ((void *) 0)"); /*0x350*/
if ( FirstString ) /*0x358*/
{
v8 = AsciiStrLen(FirstString); /*0x367*/
result = (EFI_STRING)MemAllocCopyPool(4, v8 + 1, (__int64)FirstString); /*0x378*/
}
else
{
result = (EFI_STRING)HiiGetHiiHandle(HiiHandle); /*0x35d*/
}
if ( result ) /*0x383*/
{
v9 = 0x8000000000000002uLL; /*0x38e*/
v10 = result; /*0x398*/
if ( *(_BYTE *)result ) /*0x39b*/
{
do /*0x406*/
{
v11 = v10; /*0x3a0*/
if ( *(_BYTE *)v10 ) /*0x3a3*/
{
do /*0x3b0*/
{
if ( *(_BYTE *)v10 == 59 ) /*0x3ab*/
break; /*0x3ab*/
v10 = (EFI_STRING)((char *)v10 + 1); /*0x3ad*/
}
while ( *(_BYTE *)v10 ); /*0x3b0*/
if ( *(_BYTE *)v10 ) /*0x3b5*/
{
*(_BYTE *)v10 = 0; /*0x3ba*/
v10 = (EFI_STRING)((char *)v10 + 1); /*0x3bd*/
}
}
if ( StringId_1 ) /*0x3d7*/
v12 = (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, _QWORD, EFI_STRING, const CHAR8 *, _QWORD))(qword_58080 + 16))( /*0x3fb*/
qword_58080,
HiiHandle,
StringId_1,
v11,
Language,
0);
else
v12 = (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, EFI_STRING_ID *, EFI_STRING, _QWORD, const CHAR8 *, _QWORD))qword_58080)( /*0x3ed*/
qword_58080,
HiiHandle,
&StringId_1,
v11,
0,
Language,
0);
v9 = v12; /*0x401*/
}
while ( v12 >= 0 && *(_BYTE *)v10 ); /*0x406*/
}
MemFreePool(); /*0x40e*/
LOWORD(result) = 0; /*0x416*/
if ( v9 >= 0 ) /*0x41a*/
LOWORD(result) = StringId_1; /*0x41c*/
}
else
{
LOWORD(result) = 0; /*0x385*/
}
return result; /*0x430*/
}
// Function: HiiGetStringToLanguage @ 0x43c (0x21a bytes)
// Index: 2/906
__int64 __fastcall HiiGetStringToLanguage(void *HiiHandle, unsigned __int16 a2, void *a3)
{
__int64 v6; // rdi
char *HiiHandle_1; // r12
__int64 v8; // rax
__int64 v9; // rbx
void *v10; // r8
_BYTE *StringByGuid; // rsi
unsigned __int64 n8; // [rsp+40h] [rbp-38h] BYREF
unsigned __int64 n8_1; // [rsp+48h] [rbp-30h] BYREF
char v15; // [rsp+98h] [rbp+20h] BYREF
if ( !HiiHandle ) /*0x472*/
DebugAssert( /*0x487*/
"c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c",
0xE7u,
"HiiHandle != ((void *) 0)");
if ( !a2 ) /*0x49a*/
DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c", 0xE8u, "StringId != 0"); /*0x4af*/
v6 = 0; /*0x4b7*/
HiiHandle_1 = (char *)HiiGetHiiHandle(HiiHandle); /*0x4bf*/
if ( HiiHandle_1 ) /*0x4c5*/
{
n8 = 0; /*0x4e8*/
if ( (*(__int64 (__fastcall **)(const wchar_t *, void *, _QWORD, unsigned __int64 *, _QWORD))(RuntimeServices + 72))( /*0x502*/
L"PlatformLang",
&unk_27830,
0,
&n8,
0) == 0x8000000000000005uLL )
{
v8 = MemAllocPool(4, n8); /*0x50e*/
v9 = v8; /*0x513*/
if ( v8 ) /*0x519*/
{
if ( (*(__int64 (__fastcall **)(const wchar_t *, void *, _QWORD, unsigned __int64 *, __int64))(RuntimeServices + 72))( /*0x543*/
L"PlatformLang",
&unk_27830,
0,
&n8,
v8) >= 0 )
{
LABEL_11:
v10 = &unk_2515A; /*0x550*/
if ( a3 ) /*0x56a*/
v10 = a3; /*0x56a*/
StringByGuid = HiiGetStringByGuid(HiiHandle_1, 0, v10); /*0x57c*/
if ( StringByGuid ) /*0x582*/
{
n8_1 = 0; /*0x5b8*/
if ( (*(__int64 (__fastcall **)(__int64, _BYTE *, void *, _QWORD, char *, unsigned __int64 *, _QWORD))(qword_58080 + 8))( /*0x5c3*/
qword_58080,
StringByGuid,
HiiHandle,
a2,
&v15,
&n8_1,
0) == 0x8000000000000005uLL )
{
v6 = MemAllocZeroPool(n8_1); /*0x5cf*/
if ( v6 ) /*0x5d5*/
{
if ( (*(__int64 (__fastcall **)(__int64, _BYTE *, void *, _QWORD, __int64, unsigned __int64 *, _QWORD))(qword_58080 + 8))( /*0x606*/
qword_58080,
StringByGuid,
HiiHandle,
a2,
v6,
&n8_1,
0) < 0 )
{
MemFreePool(); /*0x60b*/
v6 = 0; /*0x610*/
}
}
}
}
MemFreePool(); /*0x616*/
if ( v9 ) /*0x61e*/
MemFreePool(); /*0x623*/
if ( StringByGuid ) /*0x62b*/
MemFreePool(); /*0x630*/
return v6; /*0x630*/
}
MemFreePool(); /*0x548*/
}
}
v9 = 0; /*0x54d*/
goto LABEL_11; /*0x54d*/
}
return v6; /*0x649*/
}
// Function: HiiPackageListBuild @ 0x658 (0x148 bytes)
// Index: 3/906
__int64 HiiPackageListBuild(__int64 a1, __int64 a2, ...)
{
unsigned int *v4; // rdi
int v5; // ebx
unsigned int *v6; // rax
unsigned int **v7; // rsi
unsigned int n8; // ebx
__int64 *v9; // rax
__int64 *v10; // rsi
va_list v11; // rbx
_BYTE *v12; // rbp
int n4; // eax
__int64 v14; // r12
__int64 v15; // rax
__int64 v16; // rcx
__int64 v18[9]; // [rsp+20h] [rbp-48h] BYREF
unsigned int *v19; // [rsp+80h] [rbp+18h] BYREF
va_list va; // [rsp+80h] [rbp+18h]
va_list va1; // [rsp+88h] [rbp+20h] BYREF
va_start(va1, a2);
va_start(va, a2);
v19 = va_arg(va1, unsigned int *); /*0x658*/
if ( !a1 ) /*0x68a*/
DebugAssert( /*0x69f*/
"c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
0x9Bu,
"PackageListGuid != ((void *) 0)");
v4 = v19; /*0x6a4*/
v5 = 0; /*0x6ac*/
v6 = v19; /*0x6af*/
if ( !v19 ) /*0x6b5*/
return 0; /*0x6b5*/
va_copy((va_list)v7, va); /*0x6bb*/
do /*0x6d3*/
{
++v7; /*0x6cb*/
v5 = v5 + StrLenAscii(v6) - 4; /*0x6cf*/
v6 = *v7; /*0x6d3*/
}
while ( *v7 ); /*0x6d3*/
if ( !v5 ) /*0x6de*/
return 0; /*0x6de*/
n8 = v5 + 24; /*0x6e4*/
v9 = (__int64 *)MemAllocZeroPool(n8); /*0x6e9*/
v10 = v9; /*0x6ee*/
if ( !v9 ) /*0x6f4*/
return 0; /*0x78f*/
Assert_59(v9, a1); /*0x700*/
*((_DWORD *)v10 + 4) = n8; /*0x705*/
va_copy(v11, va); /*0x708*/
v12 = (char *)v10 + 20; /*0x710*/
do /*0x73b*/
{
n4 = StrLenAscii(v4); /*0x717*/
v14 = (unsigned int)(n4 - 4); /*0x71c*/
if ( n4 != 4 ) /*0x723*/
RstCopyMemOverlapped(v12, (_BYTE *)v4 + 4, (unsigned int)(n4 - 4)); /*0x72f*/
++v11; /*0x734*/
v12 += v14; /*0x738*/
v4 = (unsigned int *)*v11; /*0x73b*/
}
while ( *v11 ); /*0x73b*/
RstCopyMemOverlapped(v12, byte_251D0, 4); /*0x753*/
v15 = (*(__int64 (__fastcall **)(__int64, __int64 *, __int64, __int64 *))qword_58090)(qword_58090, v10, a2, v18); /*0x76d*/
v16 = v18[0]; /*0x76f*/
if ( v15 < 0 ) /*0x777*/
v16 = 0; /*0x777*/
v18[0] = v16; /*0x77b*/
MemFreePool(); /*0x783*/
return v18[0]; /*0x791*/
}
// Function: HiiNewString @ 0x7a0 (0x86 bytes)
// Index: 4/906
void __fastcall HiiNewString(EFI_HII_HANDLE HiiHandle)
{
__int64 v2; // rax
if ( !HiiHandle ) /*0x7b5*/
DebugAssert( /*0x7ca*/
"c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
0x101u,
"HiiHandle != ((void *) 0)");
v2 = (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE))(qword_58090 + 8))(qword_58090, HiiHandle); /*0x7dc*/
if ( v2 < 0 ) /*0x7ed*/
{
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v2); /*0x803*/
DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c", 0x103u, "!EFI_ERROR (Status)"); /*0x81b*/
}
}
// Function: HiiConfigRoutingExtractConfig @ 0x828 (0xbb bytes)
// Index: 5/906
__int64 __fastcall HiiConfigRoutingExtractConfig(__int64 StartOfBuffer, __int64 a2, __int64 n310)
{
__int64 v6; // rax
__int64 v7; // rcx
_BYTE v9[24]; // [rsp+30h] [rbp-18h] BYREF
__int64 v10; // [rsp+68h] [rbp+20h] BYREF
if ( !StartOfBuffer ) /*0x854*/
DebugAssert( /*0x869*/
"c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
0x1B8u,
"ConfigRequest != ((void *) 0)");
if ( !a2 ) /*0x87b*/
DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c", 0x1B9u, "Block != ((void *) 0)"); /*0x890*/
v6 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64, __int64 *, _BYTE *))(qword_58098 + 24))( /*0x8bc*/
qword_58098,
StartOfBuffer,
a2,
n310,
&v10,
v9);
v7 = v10; /*0x8bf*/
if ( v6 < 0 ) /*0x8d1*/
return 0; /*0x8d1*/
return v7; /*0x8dd*/
}
// Function: HiiGetStringByLanguage @ 0x8e4 (0x100 bytes)
// Index: 6/906
__int64 __fastcall HiiGetStringByLanguage(__int64 a1, wchar_t *RstHiiConfig, __int64 a3, __int64 a4)
{
__int64 v4; // rax
__int64 v9; // rbx
__int64 v10; // rax
unsigned __int64 n8[5]; // [rsp+30h] [rbp-28h] BYREF
char v12; // [rsp+78h] [rbp+20h] BYREF
v4 = qword_58050; /*0x8f6*/
if ( !qword_58050 ) /*0x90c*/
{
if ( (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27990, 0, &qword_58050) < 0 ) /*0x92e*/
return 0; /*0x92e*/
v4 = qword_58050; /*0x930*/
if ( !qword_58050 ) /*0x93a*/
return 0; /*0x93a*/
}
n8[0] = 0; /*0x943*/
if ( a3 ) /*0x94b*/
{
v9 = a3; /*0x94d*/
}
else
{
LOBYTE(a4) = 1; /*0x95c*/
v10 = (*(__int64 (__fastcall **)(__int64, unsigned __int64 *, char *, __int64, __int64, wchar_t *))(v4 + 8))( /*0x96c*/
v4,
n8,
&v12,
a4,
a1,
RstHiiConfig);
if ( v10 >= 0 ) /*0x972*/
return MemAllocZeroPool(2u); /*0x97e*/
if ( v10 != 0x8000000000000005uLL ) /*0x98d*/
return 0; /*0x98d*/
v9 = MemAllocZeroPool(n8[0]); /*0x999*/
if ( !v9 ) /*0x99f*/
return 0; /*0x93e*/
v4 = qword_58050; /*0x9a1*/
}
LOBYTE(a4) = a3 == 0; /*0x9b6*/
if ( (*(__int64 (__fastcall **)(__int64, unsigned __int64 *, __int64, __int64, __int64, wchar_t *))(v4 + 8))( /*0x9ca*/
v4,
n8,
v9,
a4,
a1,
RstHiiConfig) < 0 )
return 0; /*0x9ca*/
return v9; /*0x9db*/
}
// Function: HiiConfigRoutingExtract @ 0x9e4 (0x1ee bytes)
// Index: 7/906
__int64 __fastcall HiiConfigRoutingExtract(__int64 a1, unsigned __int16 *RstHiiConfig, __int64 ImageHandle)
{
unsigned __int16 *RstHiiConfig_1; // rbx
UINTN v6; // rsi
const CHAR16 *FirstString_1; // rbp
unsigned __int64 j_1; // r12
const CHAR16 *FirstString; // rax
CHAR16 *StartOfBuffer; // rax
const CHAR16 *StartOfBuffer_4; // rsi
__int64 v13; // rdi
CHAR16 *StartOfBuffer_1; // rsi
unsigned __int64 i; // r13
unsigned __int64 v16; // rax
CHAR16 *StartOfBuffer_2; // rsi
unsigned __int16 v18; // ax
CHAR16 *StartOfBuffer_3; // rbx
unsigned __int64 j; // rsi
unsigned __int64 v21; // rax
unsigned __int16 *v22; // rcx
char k; // dl
unsigned __int16 n0x41; // ax
RstHiiConfig_1 = RstHiiConfig; /*0xa06*/
v6 = 0; /*0xa0c*/
if ( RstHiiConfig ) /*0xa12*/
v6 = StrLen(RstHiiConfig); /*0xa1c*/
FirstString_1 = 0; /*0xa1f*/
j_1 = 0; /*0xa22*/
if ( ImageHandle ) /*0xa28*/
{
FirstString = (const CHAR16 *)RstUefiReadVariable(ImageHandle); /*0xa2d*/
FirstString_1 = FirstString; /*0xa32*/
if ( !FirstString ) /*0xa38*/
return 0; /*0xa3c*/
j_1 = Assert_105(FirstString); /*0xa49*/
}
StartOfBuffer = (CHAR16 *)MemAllocZeroPool(4 * (j_1 + 2 * v6) + 100); /*0xa58*/
StartOfBuffer_4 = StartOfBuffer; /*0xa5d*/
if ( !StartOfBuffer ) /*0xa63*/
return 0; /*0xa63*/
v13 = Assert_36(StartOfBuffer, (const CHAR16 *)&GUID__); /*0xa77*/
StartOfBuffer_1 = (CHAR16 *)&StartOfBuffer_4[StrLen(StartOfBuffer_4)]; /*0xa7f*/
if ( a1 ) /*0xa86*/
{
for ( i = 0; i < 0x10; ++i ) /*0xa88*/
{
v16 = HiiCfgArrayNext(StartOfBuffer_1, 160, *(unsigned __int8 *)(i + a1), 2u); /*0xa9f*/
StartOfBuffer_1 += v16; /*0xaa7*/
}
}
Assert_36(StartOfBuffer_1, (const CHAR16 *)&GUID___0); /*0xabb*/
StartOfBuffer_2 = &StartOfBuffer_1[StrLen(StartOfBuffer_1)]; /*0xac8*/
if ( RstHiiConfig_1 ) /*0xacf*/
{
while ( 1 ) /*0xaf2*/
{
v18 = *RstHiiConfig_1; /*0xaf2*/
if ( !*RstHiiConfig_1 ) /*0xaf2*/
break; /*0xaf2*/
++RstHiiConfig_1; /*0xaea*/
StartOfBuffer_2 += HiiCfgArrayNext(StartOfBuffer_2, 160, v18, 4u); /*0xaee*/
}
}
Assert_36(StartOfBuffer_2, (const CHAR16 *)&GUID___1); /*0xb05*/
StartOfBuffer_3 = &StartOfBuffer_2[StrLen(StartOfBuffer_2)]; /*0xb12*/
for ( j = 0; j < j_1; StartOfBuffer_3 += v21 ) /*0xb1c*/
v21 = HiiCfgArrayNext(StartOfBuffer_3, 160, *((unsigned __int8 *)FirstString_1 + j++), 2u); /*0xb31*/
*StartOfBuffer_3 = 0; /*0xb49*/
if ( !v13 ) /*0xb52*/
DebugAssert( /*0xb67*/
"c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
0x18Bu,
"ConfigString != ((void *) 0)");
v22 = (unsigned __int16 *)v13; /*0xb6c*/
for ( k = 0; *v22; ++v22 ) /*0xb72*/
{
n0x41 = *v22; /*0xb78*/
if ( *v22 == 61 ) /*0xb7f*/
{
k = 1; /*0xb81*/
}
else if ( n0x41 == 38 ) /*0xb89*/
{
k = 0; /*0xb8b*/
}
else if ( k && n0x41 >= 0x41u && n0x41 <= 0x46u ) /*0xb9f*/
{
*v22 = n0x41 + 32; /*0xba5*/
}
}
return v13; /*0xbc4*/
}
// Function: HiiGetConfigString @ 0xbd4 (0xce bytes)
// Index: 8/906
bool __fastcall HiiGetConfigString(__int64 a1, wchar_t *RstHiiConfig, __int64 a3, __int64 a4)
{
const CHAR16 *StringByLanguage; // rdi
UINTN v7; // rbx
unsigned __int64 n8; // rbx
CHAR8 *StartOfBuffer; // rsi
__int64 v10; // rbx
_BYTE v11[24]; // [rsp+30h] [rbp-18h] BYREF
__int64 v12; // [rsp+60h] [rbp+18h] BYREF
v12 = a3; /*0xbe3*/
StringByLanguage = (const CHAR16 *)HiiGetStringByLanguage(a1, RstHiiConfig, 0, a4); /*0xbf7*/
if ( !StringByLanguage ) /*0xbfd*/
return 0; /*0xbfd*/
v7 = 2 * StrLen(L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00") + 2; /*0xc15*/
n8 = v7 + 2 * StrLen(StringByLanguage) + 2; /*0xc1f*/
StartOfBuffer = (CHAR8 *)MemAllocZeroPool(n8); /*0xc45*/
HiiCfgArrayGet( /*0xc48*/
StartOfBuffer,
n8,
(unsigned __int8 *)L"%s&%s",
L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00",
StringByLanguage);
MemFreePool(); /*0xc50*/
if ( !StartOfBuffer ) /*0xc58*/
return 0; /*0xbff*/
v10 = (*(__int64 (__fastcall **)(__int64, CHAR8 *, __int64, __int64 *, _BYTE *))(qword_58098 + 32))( /*0xc7f*/
qword_58098,
StartOfBuffer,
a4,
&v12,
v11);
MemFreePool(); /*0xc82*/
return v10 >= 0; /*0xc9c*/
}
// Function: HiiBlockToConfig @ 0xca4 (0x12f bytes)
// Index: 9/906
bool __fastcall HiiBlockToConfig(__int64 a1, wchar_t *RstHiiConfig, CHAR16 *n310, __int64 a4, CHAR16 *n310_2)
{
UINTN v9; // rax
unsigned __int64 n8; // rbx
CHAR8 *StartOfBuffer; // rax
unsigned __int8 *%s%s; // r8
__int64 StartOfBuffer_1; // rdi
__int64 Config; // rsi
UINTN v16; // rax
__int64 v17; // r9
__int64 StringByLanguage; // rbx
CHAR16 *n310_1; // [rsp+20h] [rbp-28h]
if ( !a4 ) /*0xcd9*/
DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c", 0x8D1u, "Buffer != ((void *) 0)"); /*0xcee*/
v9 = StrLen(L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00"); /*0xcff*/
if ( n310_2 ) /*0xd07*/
{
n8 = 2 * v9 + 2 * StrLen(n310_2) + 2; /*0xd32*/
StartOfBuffer = (CHAR8 *)MemAllocZeroPool(n8); /*0xd3a*/
n310_1 = n310_2; /*0xd3f*/
%s%s = (unsigned __int8 *)L"%s%s"; /*0xd44*/
}
else
{
n8 = 2 * v9 + 66; /*0xd09*/
StartOfBuffer = (CHAR8 *)MemAllocZeroPool(n8); /*0xd11*/
n310_1 = n310; /*0xd16*/
%s%s = (unsigned __int8 *)L"%s&OFFSET=0&WIDTH=%016LX"; /*0xd1b*/
}
StartOfBuffer_1 = (__int64)StartOfBuffer; /*0xd58*/
HiiCfgArrayGet(StartOfBuffer, n8, %s%s, L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00", n310_1); /*0xd5b*/
if ( !StartOfBuffer_1 ) /*0xd63*/
return 0; /*0xd63*/
Config = HiiConfigRoutingExtractConfig(StartOfBuffer_1, a4, (__int64)n310); /*0xd7a*/
MemFreePool(); /*0xd7d*/
if ( !Config ) /*0xd85*/
return 0; /*0xd65*/
v16 = StrLen(L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00"); /*0xd8e*/
StringByLanguage = HiiGetStringByLanguage(a1, RstHiiConfig, Config + 2 * v16 + 2, v17); /*0xda6*/
MemFreePool(); /*0xda9*/
return StringByLanguage != 0; /*0xdc8*/
}
// Function: HiiGetHiiHandle @ 0xdd4 (0xab bytes)
// Index: 10/906
__int64 __fastcall HiiGetHiiHandle(EFI_HII_HANDLE HiiHandle)
{
__int64 v3; // rax
__int64 v4; // rbx
char v5; // [rsp+38h] [rbp+10h] BYREF
__int64 v6; // [rsp+40h] [rbp+18h] BYREF
if ( !HiiHandle ) /*0xded*/
DebugAssert( /*0xe00*/
"c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLanguage.c",
0x2Fu,
"HiiHandle != ((void *) 0)");
v6 = 0; /*0xe0c*/
if ( (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, char *, __int64 *))(qword_58080 + 24))( /*0xe32*/
qword_58080,
HiiHandle,
&v5,
&v6) != 0x8000000000000005uLL )
return 0; /*0xe32*/
v3 = MemAllocZeroPool(v6); /*0xe3d*/
v4 = v3; /*0xe42*/
if ( !v3 ) /*0xe48*/
return 0; /*0xe48*/
if ( (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, __int64, __int64 *))(qword_58080 + 24))( /*0xe65*/
qword_58080,
HiiHandle,
v3,
&v6) < 0 )
{
MemFreePool(); /*0xe6a*/
return 0; /*0xe36*/
}
return v4; /*0xe79*/
}
// Function: HiiCreateEventEx @ 0xe80 (0x181 bytes)
// Index: 11/906
__int64 __fastcall HiiCreateEventEx(__int64 a1, __int64 n8, __int64 sub_599C, __int64 a4, __int64 a5)
{
__int64 v9; // rax
__int64 v10; // rax
__int64 v11; // rdx
__int64 v12; // r8
__int64 v13; // r9
_QWORD v15[3]; // [rsp+30h] [rbp-18h] BYREF
if ( !a1 ) /*0xeb9*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0x98u, "ProtocolGuid != ((void *) 0)"); /*0xeca*/
if ( !sub_599C ) /*0xedc*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0x99u, "NotifyFunction != ((void *) 0)"); /*0xeed*/
if ( !a5 ) /*0xf02*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0x9Au, "Registration != ((void *) 0)"); /*0xf13*/
v9 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64, _QWORD *))(qword_58070 + 80))( /*0xf37*/
512,
n8,
sub_599C,
a4,
v15);
if ( v9 < 0 ) /*0xf4d*/
{
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9); /*0xf61*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0xA7u, "!EFI_ERROR (Status)"); /*0xf75*/
}
v10 = (*(__int64 (__fastcall **)(__int64, _QWORD, __int64))(qword_58070 + 168))(a1, v15[0], a5); /*0xf8e*/
LOBYTE(v13) = 15; /*0xf94*/
if ( v10 < 0 ) /*0xfa4*/
{
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v10, v13); /*0xfb9*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0xB3u, "!EFI_ERROR (Status)"); /*0xfcd*/
}
(*(void (__fastcall **)(_QWORD, __int64, __int64, __int64))(qword_58070 + 104))(v15[0], v11, v12, v13); /*0xfde*/
return v15[0]; /*0xffa*/
}
// Function: HiiGetStringByGuid @ 0x1004 (0x151 bytes)
// Index: 12/906
_BYTE *HiiGetStringByGuid(char *HiiHandle, char a2, ...)
{
CHAR8 *v4; // rbp
CHAR8 **v5; // r13
unsigned __int64 n3; // rsi
UINTN n3_1; // rbx
CHAR8 n59_1; // al
char *HiiHandle_1; // rdi
char n59; // al
_BYTE *result; // rax
CHAR8 *String; // [rsp+70h] [rbp+18h] BYREF
va_list Stringa; // [rsp+70h] [rbp+18h]
va_list va1; // [rsp+78h] [rbp+20h] BYREF
va_start(va1, a2);
va_start(Stringa, a2);
String = va_arg(va1, CHAR8 *); /*0x1004*/
if ( !HiiHandle ) /*0x1032*/
DebugAssert( /*0x1047*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c",
0x54Fu,
"SupportedLanguages != ((void *) 0)");
v4 = String; /*0x104c*/
if ( String ) /*0x1054*/
{
va_copy((va_list)v5, Stringa); /*0x105a*/
do /*0x1114*/
{
n3 = 3; /*0x1062*/
if ( AsciiStrLen(v4) <= 3 ) /*0x106f*/
n3_1 = AsciiStrLen(v4); /*0x107e*/
else
n3_1 = 3; /*0x1071*/
if ( a2 ) /*0x1084*/
{
LABEL_29:
while ( n3_1 ) /*0x110e*/
{
HiiHandle_1 = HiiHandle; /*0x10a7*/
if ( *HiiHandle ) /*0x10a3*/
{
while ( 1 ) /*0x10af*/
{
if ( a2 ) /*0x10af*/
goto LABEL_37; /*0x10af*/
while ( *HiiHandle_1 == 59 ) /*0x10be*/
++HiiHandle_1; /*0x10b7*/
n59 = *HiiHandle_1; /*0x10c0*/
n3 = 0; /*0x10c2*/
while ( n59 && n59 != 59 ) /*0x10c8*/
n59 = HiiHandle_1[++n3]; /*0x10cd*/
if ( n3_1 <= n3 ) /*0x10d7*/
{
LABEL_37:
if ( !StrToDecimal(HiiHandle_1, v4, n3_1) ) /*0x10e2*/
break; /*0x10e2*/
}
HiiHandle_1 += n3; /*0x10ec*/
if ( !*HiiHandle_1 ) /*0x10ef*/
goto LABEL_25; /*0x10f2*/
}
result = (_BYTE *)MemAllocZeroPool(n3 + 1); /*0x1136*/
if ( result ) /*0x113e*/
{
if ( n3 ) /*0x1143*/
return RstCopyMemOverlapped(result, HiiHandle_1, n3); /*0x114e*/
return result; /*0x114e*/
}
return 0; /*0x113e*/
}
LABEL_25:
if ( a2 ) /*0x10f7*/
break; /*0x10f7*/
if ( !--n3_1 ) /*0x10fd*/
break; /*0x10fd*/
do /*0x1109*/
{
if ( v4[n3_1] == 45 ) /*0x1103*/
break; /*0x1103*/
--n3_1; /*0x1105*/
}
while ( n3_1 ); /*0x1109*/
}
}
else
{
n59_1 = *v4; /*0x108a*/
n3_1 = 0; /*0x108d*/
if ( *v4 ) /*0x108a*/
{
do /*0x109f*/
{
if ( n59_1 == 59 ) /*0x1095*/
break; /*0x1095*/
n59_1 = v4[++n3_1]; /*0x109a*/
}
while ( n59_1 ); /*0x109f*/
goto LABEL_29; /*0x109f*/
}
}
v4 = *++v5; /*0x1114*/
}
while ( *v5 ); /*0x1114*/
}
return 0; /*0x1123*/
}
// Function: DebugPrintSerial @ 0x1158 (0xb5 bytes)
// Index: 13/906
char DebugPrintSerial(int a1, char *a2, ...)
{
UINTN i_1; // rax
unsigned __int8 *StartOfBuffer_1; // rcx
UINTN i; // r11
unsigned __int8 v7; // al
CHAR8 StartOfBuffer[280]; // [rsp+30h] [rbp-118h] BYREF
va_list va; // [rsp+160h] [rbp+18h] BYREF
va_start(va, a2);
if ( !a2 ) /*0x1182*/
DebugAssert( /*0x1195*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseDebugLibSerialPort\\DebugLib.c",
0x4Fu,
"Format != ((void *) 0)");
LODWORD(i_1) = GetDebugLevel(); /*0x119a*/
if ( ((unsigned int)i_1 & a1) != 0 ) /*0x11a5*/
{
AsciiSPrint(StartOfBuffer, 0x100u, 0, a2, va, 0); /*0x11ca*/
i_1 = AsciiStrLen(StartOfBuffer); /*0x11d4*/
StartOfBuffer_1 = (unsigned __int8 *)StartOfBuffer; /*0x11d9*/
for ( i = i_1; i; ++StartOfBuffer_1 ) /*0x11e4*/
{
--i; /*0x11e6*/
do /*0x11f1*/
v7 = __inbyte(0x3FDu); /*0x11ee*/
while ( (v7 & 0x20) == 0 ); /*0x11f1*/
LOBYTE(i_1) = *StartOfBuffer_1; /*0x11f3*/
__outbyte(0x3F8u, *StartOfBuffer_1); /*0x11fa*/
}
}
return i_1; /*0x1203*/
}
// Function: DebugAssert @ 0x1210 (0x90 bytes)
// Index: 14/906
void __cdecl DebugAssert(const CHAR8 *FileName, UINTN LineNumber, const CHAR8 *Description)
{
double v3; // xmm3_8
UINTN i_1; // rax
unsigned __int8 *StartOfBuffer_1; // rcx
UINTN i; // r11
unsigned __int8 v7; // al
CHAR8 StartOfBuffer[264]; // [rsp+30h] [rbp-108h] BYREF
HiiMemAlloc(StartOfBuffer, 0x100u, "ASSERT %a(%d): %a\n", v3, LineNumber, *(double *)&Description);
i_1 = AsciiStrLen(StartOfBuffer); /*0x123f*/
StartOfBuffer_1 = (unsigned __int8 *)StartOfBuffer; /*0x1244*/
for ( i = i_1; i; ++StartOfBuffer_1 ) /*0x124f*/
{
--i; /*0x1251*/
do /*0x125c*/
v7 = __inbyte(0x3FDu); /*0x1259*/
while ( (v7 & 0x20) == 0 ); /*0x125c*/
__outbyte(0x3F8u, *StartOfBuffer_1); /*0x1265*/
}
}
// Function: RstDebugEnabled @ 0x12a0 (0x9 bytes)
// Index: 15/906
char RstDebugEnabled()
{
return 1; /*0x12a8*/
}
// Function: RstDebugEnabled2 @ 0x12ac (0xb bytes)
// Index: 16/906
char RstDebugEnabled2()
{
return 1; /*0x12b6*/
}
// Function: HiiCfgArrayGet @ 0x12b8 (0x97 bytes)
// Index: 17/906
UINTN HiiCfgArrayGet(CHAR8 *StartOfBuffer, unsigned __int64 a2, unsigned __int8 *a3, ...)
{
va_list va; // [rsp+68h] [rbp+20h] BYREF
va_start(va, a3);
if ( ((unsigned __int8)StartOfBuffer & 1) != 0 ) /*0x12df*/
DebugAssert( /*0x12f4*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
0x47u,
"(((UINTN) (StartOfBuffer)) & 0x01) == 0");
if ( ((unsigned __int8)a3 & 1) != 0 ) /*0x1306*/
DebugAssert( /*0x131b*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
0x48u,
"(((UINTN) (FormatString)) & 0x01) == 0");
return AsciiSPrint(StartOfBuffer, a2 >> 1, FormatString, a3, va, 0); /*0x1347*/
}
// Function: HiiCfgArraySet @ 0x1350 (0x6f bytes)
// Index: 18/906
UINTN HiiCfgArraySet(CHAR8 *StartOfBuffer, unsigned __int64 n256, char *%a_SN:%a__%a, ...)
{
va_list va; // [rsp+68h] [rbp+20h] BYREF
va_start(va, %a_SN:%a__%a);
if ( ((unsigned __int8)StartOfBuffer & 1) != 0 ) /*0x1376*/
DebugAssert( /*0x138b*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
0xD7u,
"(((UINTN) (StartOfBuffer)) & 0x01) == 0");
return AsciiSPrint(StartOfBuffer, n256 >> 1, FormatString_0, %a_SN:%a__%a, va, 0); /*0x13b7*/
}
// Function: HiiCfgArrayNext @ 0x13c0 (0x6a bytes)
// Index: 19/906
unsigned __int64 __fastcall HiiCfgArrayNext(_BYTE *StartOfBuffer, int n160, unsigned __int64 a3, unsigned __int64 n2)
{
if ( ((unsigned __int8)StartOfBuffer & 1) != 0 ) /*0x13e4*/
DebugAssert( /*0x13f9*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
0x16Cu,
"(((UINTN) (Buffer)) & 0x01) == 0");
return HiiBuildDevicePath(StartOfBuffer, 160, a3, n2); /*0x1424*/
}
// Function: HiiMemAlloc @ 0x142c (0x2c bytes)
// Index: 20/906
UINTN HiiMemAlloc(CHAR8 *StartOfBuffer, UINTN n256, char *ASSERT_%a(%d):_%a_n, ...)
{
va_list va; // [rsp+58h] [rbp+20h] BYREF
va_start(va, ASSERT_%a(%d):_%a_n);
return AsciiSPrint(StartOfBuffer, n256, 0, ASSERT_%a(%d):_%a_n, va, 0); /*0x1453*/
}
// Function: HiiMemFree @ 0x1458 (0x33 bytes)
// Index: 21/906
_BYTE *__fastcall HiiMemFree(
_BYTE *StartOfBuffer,
unsigned __int64 StartOfBuffer_1,
__int64 i,
__int16 n32,
__int64 n2)
{
__int64 j; // r10
for ( j = 0; j < i; ++j ) /*0x145e*/
{
if ( (unsigned __int64)StartOfBuffer >= StartOfBuffer_1 ) /*0x1463*/
break; /*0x1463*/
*StartOfBuffer = n32; /*0x146b*/
if ( n2 != 1 ) /*0x146e*/
StartOfBuffer[1] = HIBYTE(n32); /*0x1477*/
StartOfBuffer += n2; /*0x147a*/
}
return StartOfBuffer; /*0x148a*/
}
// Function: HiiDevicePathExtract @ 0x148c (0x7f bytes)
// Index: 22/906
_BYTE *__fastcall HiiDevicePathExtract(_BYTE *_r_n, unsigned __int64 a2, __int64 n16)
{
int n16_1; // edi
_BYTE *_r_n_1; // rbx
unsigned __int64 n16_2; // rsi
unsigned __int64 v7; // rtt
n16_1 = n16; /*0x14a0*/
_r_n_1 = _r_n; /*0x14a6*/
*_r_n = 0; /*0x14a9*/
n16_2 = (unsigned int)n16; /*0x14ac*/
do /*0x14f1*/
{
if ( !n16_1 ) /*0x14ba*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\DivU64x32Remainder.c", 0x2Fu, "Divisor != 0"); /*0x14cd*/
++_r_n_1; /*0x14d7*/
v7 = a2; /*0x14da*/
a2 /= n16_2; /*0x14e4*/
*_r_n_1 = a0123456789abcd[(unsigned int)(v7 % n16_2)]; /*0x14ec*/
}
while ( a2 ); /*0x14f1*/
return _r_n_1; /*0x1505*/
}
// Function: HiiBuildDevicePath @ 0x150c (0x1ec bytes)
// Index: 23/906
unsigned __int64 __fastcall HiiBuildDevicePath(
_BYTE *StartOfBuffer,
int n160,
unsigned __int64 a3,
unsigned __int64 n0x26)
{
_BYTE *StartOfBuffer_1; // rbx
char v7; // bp
_BYTE *StartOfBuffer_2; // r13
unsigned __int64 StartOfBuffer_3; // r12
_BYTE *v10; // rsi
unsigned __int64 v11; // r11
unsigned __int64 v12; // rcx
unsigned __int64 v13; // rdx
int v14; // ebp
__int16 v15; // r9
__int64 v16; // r8
__int64 v17; // rax
_BYTE *StartOfBuffer_4; // rax
__int64 v19; // rcx
_BYTE _r_n[48]; // [rsp+30h] [rbp-48h] BYREF
StartOfBuffer_1 = StartOfBuffer; /*0x1530*/
v7 = -96; /*0x1533*/
if ( !StartOfBuffer ) /*0x153f*/
DebugAssert( /*0x1552*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLibInternal.c",
0xBCu,
"Buffer != ((void *) 0)");
if ( n0x26 >= 0x26 ) /*0x1565*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLibInternal.c", 0xBDu, "Width < 38"); /*0x157a*/
StartOfBuffer_2 = StartOfBuffer_1; /*0x1587*/
if ( !n0x26 ) /*0x158a*/
{
v7 = 0x80; /*0x158a*/
n0x26 = 37; /*0x1594*/
}
StartOfBuffer_3 = (unsigned __int64)&StartOfBuffer_1[2 * n0x26]; /*0x1598*/
v10 = HiiDevicePathExtract(_r_n, a3, v7 < 0 ? 16LL : 10LL);
v11 = v10 - _r_n; /*0x15f1*/
if ( (v7 & 0x20) != 0 ) /*0x15f8*/
StartOfBuffer_1 = HiiMemFree(StartOfBuffer_1, StartOfBuffer_3, n0x26 - v11, 48, 2); /*0x161a*/
v12 = v11 % 3; /*0x1634*/
if ( v11 % 3 ) /*0x1634*/
v12 = 3 - v12; /*0x1641*/
v13 = 0; /*0x1644*/
if ( v11 ) /*0x1649*/
{
v14 = v7 & 8; /*0x164b*/
do /*0x16b0*/
{
v15 = (char)*v10; /*0x164e*/
v16 = 0; /*0x1652*/
do /*0x1672*/
{
if ( (unsigned __int64)StartOfBuffer_1 >= StartOfBuffer_3 ) /*0x1658*/
break; /*0x1658*/
++v16; /*0x165d*/
*StartOfBuffer_1 = v15; /*0x1660*/
StartOfBuffer_1 += 2; /*0x1667*/
*(StartOfBuffer_1 - 1) = HIBYTE(v15); /*0x166f*/
}
while ( v16 < 1 ); /*0x1672*/
--v10; /*0x1674*/
if ( v14 ) /*0x167a*/
{
if ( ++v12 == 3 ) /*0x1683*/
{
v12 = 0; /*0x1689*/
if ( v13 + 1 < v11 ) /*0x168e*/
{
v17 = 0; /*0x1690*/
do /*0x16a8*/
{
if ( (unsigned __int64)StartOfBuffer_1 >= StartOfBuffer_3 ) /*0x1695*/
break; /*0x1695*/
++v17; /*0x1697*/
*StartOfBuffer_1 = 44; /*0x169a*/
StartOfBuffer_1[1] = 0; /*0x169d*/
StartOfBuffer_1 += 2; /*0x16a0*/
}
while ( v17 < 1 ); /*0x16a8*/
}
}
}
++v13; /*0x16aa*/
}
while ( v13 < v11 ); /*0x16b0*/
}
StartOfBuffer_4 = StartOfBuffer_1; /*0x16b2*/
v19 = 0; /*0x16b5*/
do /*0x16d3*/
{
if ( (unsigned __int64)StartOfBuffer_4 >= StartOfBuffer_3 + 2 ) /*0x16bf*/
break; /*0x16bf*/
++v19; /*0x16c1*/
*StartOfBuffer_4 = 0; /*0x16c4*/
StartOfBuffer_4[1] = 0; /*0x16c7*/
StartOfBuffer_4 += 2; /*0x16cb*/
}
while ( v19 < 1 ); /*0x16d3*/
return (unsigned __int64)(StartOfBuffer_1 - StartOfBuffer_2) >> 1; /*0x16ef*/
}
// Function: AsciiSPrint @ 0x16f8 (0xf08 bytes)
// Index: 24/906
UINTN AsciiSPrint(CHAR8 *StartOfBuffer, UINTN BufferSize, const CHAR8 *FormatString, ...)
{
const CHAR16 *v3; // r14
__int64 v4; // r12
CHAR8 *StartOfBuffer_1; // r13
const CHAR16 *StartOfBuffer_2; // rsi
__int64 n2_1; // rdi
CHAR8 *StartOfBuffera_1; // rbx
unsigned __int64 v11; // r9
__int64 n2_2; // r8
__int64 n0xFFFF; // r10
int v14; // eax
unsigned __int64 n10; // rcx
int *v16; // r15
unsigned __int64 n512_5; // r9
char v18; // r11
unsigned __int64 n512_3; // rsi
unsigned __int64 n512_2; // rbp
const char *_r_n_1; // rbx
int *va_1; // rdx
unsigned __int64 n13_1; // rcx
__int64 v24; // rax
unsigned __int64 v25; // rcx
unsigned __int64 v26; // rcx
unsigned __int64 v27; // rcx
unsigned __int64 v28; // rcx
unsigned __int64 n4; // rcx
unsigned __int16 *v30; // r9
__int64 n4_1; // rcx
signed __int64 v32; // rbx
char n32; // al
char n32_1; // di
__int64 n16; // r8
unsigned __int64 v36; // rdi
int v37; // ebp
int v38; // e... [28186 chars total]
// Function: AsciiSPrint_w @ 0x2600 (0x22 bytes)
// Index: 25/906
UINTN sub_2600(
CHAR8 *_r_n,
UINTN n38,
const CHAR8 *FormatString,
const char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x,
...)
{
return AsciiSPrint(_r_n, n38, FormatString); /*0x261d*/
}
// Function: Assert_59 @ 0x2624 (0x95 bytes)
// Index: 26/906
__int64 *__fastcall Assert_59(__int64 *a1, __int64 a2)
{
__int64 v4; // rsi
__int64 v5; // rsi
v4 = StrToHex(a2); /*0x2648*/
if ( !a1 ) /*0x2650*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0xDBu, "Buffer != ((void *) 0)"); /*0x2665*/
*a1 = v4; /*0x266e*/
v5 = StrToHex(a2 + 8); /*0x2681*/
if ( a1 == (__int64 *)-8LL ) /*0x2689*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0xDBu, "Buffer != ((void *) 0)"); /*0x269e*/
a1[1] = v5; /*0x26a3*/
return a1; /*0x26b3*/
}
// Function: RstGuidCompare @ 0x26bc (0x6e bytes)
// Index: 27/906
bool __fastcall RstGuidCompare(__int64 a1, __int64 a2)
{
__int64 v3; // rdi
__int64 v4; // rbx
__int64 v5; // rbp
__int64 v6; // rax
v3 = StrToHex((__int64)&unk_27860); /*0x26e2*/
v4 = StrToHex(a2); /*0x26f1*/
v5 = StrToHex((__int64)&unk_27868); /*0x26fd*/
v6 = StrToHex(a2 + 8); /*0x2700*/
return v3 == v4 && v5 == v6; /*0x2724*/
}
// Function: RstCopyMemOverlapped @ 0x272c (0xd2 bytes)
// Index: 28/906
_BYTE *__fastcall RstCopyMemOverlapped(_BYTE *a1, _BYTE *a2, __int64 a3)
{
__int64 v4; // rsi
_BYTE *v6; // rcx
__int64 v7; // rdi
_BYTE *v8; // rdx
__int64 v9; // rcx
v4 = a3; /*0x274d*/
if ( a3 - 1 > (unsigned __int64)(-1LL - (_QWORD)a1) ) /*0x2765*/
DebugAssert( /*0x2778*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\CopyMemWrapper.c",
0x38u,
"(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)DestinationBuffer)");
if ( v4 - 1 > (unsigned __int64)(-1LL - (_QWORD)a2) ) /*0x2792*/
DebugAssert( /*0x27a7*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\CopyMemWrapper.c",
0x39u,
"(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)SourceBuffer)");
if ( a2 != a1 ) /*0x27af*/
{
if ( a2 <= a1 ) /*0x27b1*/
{
if ( a2 < a1 ) /*0x27cc*/
{
v8 = &a1[v4]; /*0x27ce*/
v9 = v4; /*0x27d5*/
do /*0x27e4*/
*--v8 = a2[--v9]; /*0x27e2*/
while ( v9 ); /*0x27e4*/
}
}
else
{
v6 = a1; /*0x27b3*/
v7 = a2 - a1; /*0x27b6*/
do /*0x27c5*/
{
*v6 = v6[v7]; /*0x27bc*/
++v6; /*0x27be*/
--v4; /*0x27c1*/
}
while ( v4 ); /*0x27c5*/
}
}
return a1; /*0x27f8*/
}
// Function: RstMemZero @ 0x2800 (0x89 bytes)
// Index: 29/906
__int64 __fastcall RstMemZero(__int64 i, unsigned __int64 n8)
{
unsigned __int64 n8_1; // rbx
_BYTE *j; // rax
n8_1 = n8; /*0x2810*/
if ( !i && n8 ) /*0x2822*/
DebugAssert( /*0x2835*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\ZeroMemWrapper.c",
0x31u,
"!(Buffer == ((void *) 0) && Length > 0)");
if ( n8_1 > -i ) /*0x284d*/
DebugAssert( /*0x2862*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\ZeroMemWrapper.c",
0x32u,
"Length <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)Buffer + 1)");
for ( j = (_BYTE *)i; n8_1; --n8_1 ) /*0x286d*/
*j++ = 0; /*0x286f*/
return i; /*0x2883*/
}
// Function: UefiRuntimeServicesTableLibConstructor @ 0x288c (0x3a bytes)
// Index: 30/906
__int64 __fastcall UefiRuntimeServicesTableLibConstructor(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
RuntimeServices = (__int64)SystemTable->RuntimeServices; /*0x289b*/
if ( !RuntimeServices ) /*0x28a7*/
DebugAssert( /*0x28ba*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiRuntimeServicesTableLib\\UefiRuntimeServicesTableLib.c",
0x2Fu,
"gRT != ((void *) 0)");
return 0; /*0x28c1*/
}
// Function: UefiBootServicesTableLibConstructor @ 0x28c8 (0xa2 bytes)
// Index: 31/906
__int64 __fastcall UefiBootServicesTableLibConstructor(__int64 ImageHandle, __int64 SystemTable)
{
::ImageHandle = ImageHandle; /*0x28d8*/
if ( !ImageHandle ) /*0x28e8*/
DebugAssert( /*0x28fb*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
0x33u,
"gImageHandle != ((void *) 0)");
::SystemTable = SystemTable; /*0x2907*/
if ( !SystemTable ) /*0x2917*/
DebugAssert( /*0x292a*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
0x39u,
"gST != ((void *) 0)");
qword_58070 = *(_QWORD *)(SystemTable + 96); /*0x293a*/
if ( !qword_58070 ) /*0x294a*/
DebugAssert( /*0x295d*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
0x3Fu,
"gBS != ((void *) 0)");
return 0; /*0x2964*/
}
// Function: Assert_73 @ 0x296c (0x36 bytes)
// Index: 32/906
char __fastcall Assert_73(const CHAR16 *FirstString)
{
if ( !FirstString ) /*0x2981*/
DebugAssert( /*0x2994*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
0x54u,
"Node != ((void *) 0)");
return *((_BYTE *)FirstString + 1); /*0x299c*/
}
// Function: Assert_72 @ 0x29a4 (0x3f bytes)
// Index: 33/906
__int64 __fastcall Assert_72(__int64 a1)
{
if ( !a1 ) /*0x29b9*/
DebugAssert( /*0x29cc*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
0x6Du,
"Node != ((void *) 0)");
return (unsigned __int16)StrCharToUpper(a1 + 2); /*0x29dd*/
}
// Function: Assert_71 @ 0x29e4 (0x40 bytes)
// Index: 34/906
__int64 __fastcall Assert_71(__int64 a1)
{
if ( !a1 ) /*0x29f9*/
DebugAssert( /*0x2a0e*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
0x85u,
"Node != ((void *) 0)");
return a1 + Assert_72(a1); /*0x2a1e*/
}
// Function: Assert_66 @ 0x2a24 (0x61 bytes)
// Index: 35/906
bool __fastcall Assert_66(const CHAR16 *FirstString)
{
if ( !FirstString ) /*0x2a3a*/
DebugAssert( /*0x2a4f*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
0xA3u,
"Node != ((void *) 0)");
if ( !FirstString ) /*0x2a61*/
DebugAssert( /*0x2a74*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
0x3Eu,
"Node != ((void *) 0)");
return *(_BYTE *)FirstString == 127; /*0x2a7f*/
}
// Function: Assert_69 @ 0x2a88 (0x5b bytes)
// Index: 36/906
char __fastcall Assert_69(const CHAR16 *FirstString)
{
char v1; // bl
v1 = 1; /*0x2a92*/
if ( !FirstString ) /*0x2aa2*/
DebugAssert( /*0x2ab7*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
0xBEu,
"Node != ((void *) 0)");
if ( !Assert_66(FirstString) || Assert_73(FirstString) != -1 ) /*0x2ad2*/
return 0; /*0x2ad4*/
return v1; /*0x2add*/
}
// Function: Assert_57 @ 0x2ae4 (0x9c bytes)
// Index: 37/906
__int16 __fastcall Assert_57(char *i, unsigned __int64 n16)
{
char *v4; // rbx
if ( !i ) /*0x2b01*/
DebugAssert( /*0x2b16*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
0xF5u,
"Node != ((void *) 0)");
if ( n16 >= 0x10000 ) /*0x2b2c*/
DebugAssert( /*0x2b41*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
0xF6u,
"Length < 0x10000");
v4 = i + 2; /*0x2b4c*/
if ( !v4 ) /*0x2b57*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0x41u, "Buffer != ((void *) 0)"); /*0x2b6a*/
*(_WORD *)v4 = n16; /*0x2b6f*/
return n16; /*0x2b7a*/
}
// Function: Assert_70 @ 0x2b80 (0x49 bytes)
// Index: 38/906
_BYTE *__fastcall Assert_70(_BYTE *a1)
{
if ( !a1 ) /*0x2b95*/
DebugAssert( /*0x2baa*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
0x110u,
"Node != ((void *) 0)");
return RstCopyMemOverlapped(a1, FirstString, 4); /*0x2bbf*/
}
// Function: Assert_105 @ 0x2bcc (0x48 bytes)
// Index: 39/906
__int64 __fastcall Assert_105(const CHAR16 *FirstString)
{
const CHAR16 *FirstString_1; // rbx
const CHAR16 *FirstString_2; // rdi
FirstString_1 = FirstString; /*0x2bd6*/
if ( !FirstString ) /*0x2bdc*/
return 0; /*0x2bde*/
FirstString_2 = FirstString; /*0x2be2*/
while ( !Assert_69(FirstString) ) /*0x2bfc*/
{
FirstString_1 = (const CHAR16 *)Assert_71((__int64)FirstString_1); /*0x2bec*/
FirstString = FirstString_1; /*0x2bef*/
}
return (char *)FirstString_1 - (char *)FirstString_2 + Assert_72((__int64)FirstString_1); /*0x2c0e*/
}
// Function: Assert_122 @ 0x2c14 (0xce bytes)
// Index: 40/906
_BYTE *__fastcall Assert_122(CHAR16 *FirstString, CHAR16 *FirstString_2)
{
__int64 v2; // rbx
CHAR16 *FirstString_1; // rdi
unsigned __int64 n8; // rax
__int64 v7; // r12
__int64 v8; // r13
_BYTE *v9; // rax
_BYTE *v10; // rbp
v2 = 0; /*0x2c2c*/
FirstString_1 = FirstString; /*0x2c31*/
if ( !FirstString ) /*0x2c37*/
{
FirstString_1 = (CHAR16 *)::FirstString; /*0x2c39*/
if ( FirstString_2 ) /*0x2c43*/
FirstString_1 = FirstString_2; /*0x2c43*/
FirstString = FirstString_1; /*0x2c47*/
goto LABEL_5; /*0x2c47*/
}
if ( !FirstString_2 ) /*0x2c6f*/
{
LABEL_5:
n8 = Assert_105(FirstString); /*0x2c4a*/
if ( n8 ) /*0x2c52*/
return MemAllocCopyPool(4, n8, (__int64)FirstString_1); /*0x2c64*/
return (_BYTE *)v2; /*0x2c6a*/
}
v7 = Assert_105(FirstString); /*0x2c79*/
v8 = Assert_105(FirstString_2); /*0x2c8b*/
v9 = (_BYTE *)MemAllocPool(4, v8 + v7 - 4); /*0x2c8e*/
v10 = v9; /*0x2c93*/
if ( v9 ) /*0x2c99*/
{
if ( v7 ) /*0x2c9e*/
v10 = RstCopyMemOverlapped(v9, FirstString_1, v7); /*0x2cae*/
if ( v8 ) /*0x2cb4*/
RstCopyMemOverlapped(&v10[v7 - 4], FirstString_2, v8); /*0x2cc1*/
}
return v10; /*0x2cd8*/
}
// Function: Assert_85 @ 0x2ce4 (0xd3 bytes)
// Index: 41/906
_BYTE *__fastcall Assert_85(CHAR16 *FirstString, char *p_i)
{
_BYTE *v2; // rbx
const CHAR16 *FirstString_2; // rdi
unsigned __int64 n8; // rax
__int64 v7; // rsi
CHAR16 *FirstString_3; // rax
CHAR16 *FirstString_1; // r12
_BYTE *v11; // rax
v2 = 0; /*0x2cfd*/
if ( p_i ) /*0x2d08*/
{
v7 = Assert_72((__int64)p_i); /*0x2d49*/
FirstString_3 = (CHAR16 *)MemAllocPool(4, v7 + 4); /*0x2d4c*/
FirstString_1 = FirstString_3; /*0x2d51*/
if ( !FirstString_3 ) /*0x2d57*/
return 0; /*0x2d5b*/
if ( v7 ) /*0x2d60*/
FirstString_1 = (CHAR16 *)RstCopyMemOverlapped(FirstString_3, p_i, v7); /*0x2d70*/
v11 = (_BYTE *)Assert_71((__int64)FirstString_1); /*0x2d76*/
Assert_70(v11); /*0x2d7e*/
v2 = Assert_122(FirstString, FirstString_1); /*0x2d91*/
MemFreePool(); /*0x2d94*/
}
else
{
FirstString_2 = (const CHAR16 *)::FirstString; /*0x2d0d*/
if ( FirstString ) /*0x2d14*/
FirstString_2 = FirstString; /*0x2d14*/
n8 = Assert_105(FirstString_2); /*0x2d1b*/
if ( n8 ) /*0x2d23*/
return MemAllocCopyPool(4, n8, (__int64)FirstString_2); /*0x2d33*/
}
return v2; /*0x2db0*/
}
// Function: RstUefiReadVariable @ 0x2db8 (0x33 bytes)
// Index: 42/906
__int64 __fastcall RstUefiReadVariable(__int64 a1)
{
__int64 v1; // rax
__int64 v2; // rcx
__int64 v4; // [rsp+38h] [rbp+10h] BYREF
v1 = (*(__int64 (__fastcall **)(__int64, void *, __int64 *))(qword_58070 + 152))(a1, &unk_27730, &v4); /*0x2dcf*/
v2 = v4; /*0x2dd5*/
if ( v1 < 0 ) /*0x2ddf*/
return 0; /*0x2ddf*/
return v2; /*0x2de6*/
}
// Function: Assert_36 @ 0x2dec (0x102 bytes)
// Index: 43/906
__int64 __fastcall Assert_36(CHAR16 *StartOfBuffer, const CHAR16 *GUID_)
{
__int64 StartOfBuffer_1; // rbx
__int64 StartOfBuffer_2; // rax
StartOfBuffer_1 = (__int64)StartOfBuffer; /*0x2e07*/
if ( !StartOfBuffer ) /*0x2e13*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x35u, "Destination != ((void *) 0)"); /*0x2e26*/
if ( (StartOfBuffer_1 & 1) != 0 ) /*0x2e3b*/
DebugAssert( /*0x2e50*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
0x36u,
"((UINTN) Destination & 0x00000001) == 0");
if ( (StartOfBuffer_1 - (__int64)GUID_) >> 1 <= StrLen(GUID_) ) /*0x2e72*/
DebugAssert( /*0x2e87*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
0x3Bu,
"(UINTN)(Destination - Source) > StrLen (Source)");
if ( ((__int64)GUID_ - StartOfBuffer_1) >> 1 <= StrLen(GUID_) ) /*0x2ea9*/
DebugAssert( /*0x2ebe*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
0x3Cu,
"(UINTN)(Source - Destination) > StrLen (Source)");
StartOfBuffer_2 = StartOfBuffer_1; /*0x2ec3*/
while ( *GUID_ ) /*0x2ed9*/
{
*(_WORD *)StartOfBuffer_1 = *GUID_; /*0x2ec8*/
StartOfBuffer_1 += 2; /*0x2ecb*/
++GUID_; /*0x2ecf*/
}
*(_WORD *)StartOfBuffer_1 = 0; /*0x2edb*/
return StartOfBuffer_2; /*0x2ee8*/
}
// Function: StrLen @ 0x2ef0 (0xbf bytes)
// Index: 44/906
UINTN __cdecl StrLen(const CHAR16 *String)
{
const CHAR16 *v1; // rbx
UINTN i; // rdi
v1 = String; /*0x2f08*/
if ( !String ) /*0x2f10*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0xA6u, "String != ((void *) 0)"); /*0x2f25*/
if ( ((unsigned __int8)v1 & 1) != 0 ) /*0x2f36*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0xA7u, "((UINTN) String & 0x00000001) == 0"); /*0x2f4b*/
for ( i = 0; *v1; ++i ) /*0x2f53*/
{
if ( i >= 0xF4240 ) /*0x2f70*/
DebugAssert( /*0x2f85*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
0xAFu,
"Length < _gPcd_FixedAtBuild_PcdMaximumUnicodeStringLength");
++v1; /*0x2f90*/
}
return i; /*0x2fa9*/
}
// Function: StrCpyOrCat @ 0x2fb0 (0xfe bytes)
// Index: 45/906
__int64 __fastcall StrCpyOrCat(const CHAR16 *i, const CHAR16 *a2, unsigned __int64 n0xF4240)
{
unsigned __int64 n0xF4240_1; // rdi
const CHAR16 *i_1; // rbx
n0xF4240_1 = n0xF4240; /*0x2fc6*/
i_1 = i; /*0x2fcc*/
if ( !n0xF4240 ) /*0x2fd2*/
return 0; /*0x2fd4*/
if ( 2 * StrLen(i) == -2 ) /*0x2ff1*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x130u, "StrSize (FirstString) != 0"); /*0x3006*/
if ( 2 * StrLen(a2) == -2 ) /*0x3024*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x131u, "StrSize (SecondString) != 0"); /*0x3039*/
if ( n0xF4240_1 > 0xF4240 ) /*0x3054*/
DebugAssert( /*0x3069*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
0x134u,
"Length <= _gPcd_FixedAtBuild_PcdMaximumUnicodeStringLength");
while ( *i_1 && *i_1 == *a2 && n0xF4240_1 > 1 ) /*0x3079*/
{
++i_1; /*0x307b*/
++a2; /*0x307f*/
--n0xF4240_1; /*0x3083*/
}
return *i_1 - *a2; /*0x30a8*/
}
// Function: Assert_44 @ 0x30b0 (0xd1 bytes)
// Index: 46/906
const CHAR16 *__fastcall Assert_44(const CHAR16 *a1, wchar_t *&GUID)
{
const CHAR16 *v3; // rbx
wchar_t *&GUID_1; // rdx
const CHAR16 *v6; // rcx
CHAR16 v7; // ax
v3 = a1; /*0x30cb*/
if ( 2 * StrLen(a1) == -2 ) /*0x30dd*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x1D7u, "StrSize (String) != 0"); /*0x30f2*/
if ( 2 * StrLen(&GUID) == -2 ) /*0x3110*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x1D8u, "StrSize (SearchString) != 0"); /*0x3125*/
if ( !*&GUID ) /*0x312a*/
return v3; /*0x312f*/
while ( 1 ) /*0x3162*/
{
v7 = *v3; /*0x3162*/
if ( !*v3 ) /*0x3162*/
return 0; /*0x316a*/
&GUID_1 = &GUID; /*0x3134*/
v6 = v3; /*0x3137*/
if ( v7 == *&GUID ) /*0x313d*/
{
do /*0x3152*/
{
if ( !v7 ) /*0x3142*/
break; /*0x3142*/
++v3; /*0x3144*/
++&GUID_1; /*0x3148*/
v7 = *v3; /*0x314c*/
}
while ( *v3 == *&GUID_1 ); /*0x3152*/
}
if ( !*&GUID_1 ) /*0x3154*/
break; /*0x3154*/
if ( !*v3 ) /*0x315c*/
return 0; /*0x315c*/
v3 = v6 + 1; /*0x315e*/
}
return v6; /*0x3176*/
}
// Function: StrToUpper @ 0x3184 (0xe1 bytes)
// Index: 47/906
unsigned __int64 __fastcall StrToUpper(const CHAR16 *a1)
{
unsigned __int64 v1; // rdi
const CHAR16 *v2; // rbx
int v3; // eax
v1 = 0; /*0x3193*/
v2 = a1; /*0x319c*/
if ( 2 * StrLen(a1) == -2 ) /*0x31ae*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x28Au, "StrSize (String) != 0"); /*0x31c3*/
while ( *v2 == 32 || *v2 == 9 ) /*0x31d2*/
++v2; /*0x31d4*/
while ( *v2 == 48 ) /*0x31e8*/
++v2; /*0x31e1*/
while ( (unsigned __int16)(*v2 - 48) <= 9u ) /*0x31f4*/
{
if ( v1 > (-1LL - (*v2 - 48)) / 0xAuLL ) /*0x3222*/
DebugAssert( /*0x3237*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
0x2A1u,
"Result <= ((((UINTN) ~0) - (*String - L'0')) / 10)");
v3 = *v2++ - 48; /*0x323f*/
v1 = v3 + 10 * v1; /*0x324c*/
}
return v1; /*0x325f*/
}
// Function: AsciiStrLen @ 0x3268 (0x8b bytes)
// Index: 48/906
UINTN __cdecl AsciiStrLen(const CHAR8 *String)
{
const CHAR8 *v1; // rbx
UINTN i; // rdi
v1 = String; /*0x3279*/
if ( !String ) /*0x3281*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x4BAu, "String != ((void *) 0)"); /*0x3296*/
for ( i = 0; *v1; ++i ) /*0x329d*/
{
if ( i >= 0xF4240 ) /*0x32ba*/
DebugAssert( /*0x32cf*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
0x4C2u,
"Length < _gPcd_FixedAtBuild_PcdMaximumAsciiStringLength");
++v1; /*0x32da*/
}
return i; /*0x32ed*/
}
// Function: StrToDecimal @ 0x32f4 (0xe5 bytes)
// Index: 49/906
__int64 __fastcall StrToDecimal(const CHAR8 *HiiHandle, const CHAR8 *a2, unsigned __int64 n3)
{
unsigned __int64 n3_1; // rsi
const CHAR8 *HiiHandle_1; // rbx
n3_1 = n3; /*0x3303*/
HiiHandle_1 = HiiHandle; /*0x3309*/
if ( !n3 ) /*0x330f*/
return 0; /*0x3311*/
if ( AsciiStrLen(HiiHandle) == -1 ) /*0x332a*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x5A8u, "AsciiStrSize (FirstString)"); /*0x333f*/
if ( AsciiStrLen(a2) == -1 ) /*0x3359*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x5A9u, "AsciiStrSize (SecondString)"); /*0x336e*/
if ( n3_1 > 0xF4240 ) /*0x3389*/
DebugAssert( /*0x339e*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
0x5ACu,
"Length <= _gPcd_FixedAtBuild_PcdMaximumAsciiStringLength");
while ( *HiiHandle_1 && *HiiHandle_1 == *a2 && n3_1 > 1 ) /*0x33ad*/
{
++HiiHandle_1; /*0x33af*/
++a2; /*0x33b2*/
--n3_1; /*0x33b5*/
}
return *HiiHandle_1 - *a2; /*0x33d3*/
}
// Function: StrHexToDecimal @ 0x33dc (0x149 bytes)
// Index: 50/906
const CHAR16 *__fastcall StrHexToDecimal(const CHAR8 *Intel, CHAR16 *a2)
{
CHAR16 *v2; // rdi
const CHAR16 *v4; // rbx
v2 = a2; /*0x33fe*/
if ( !a2 ) /*0x3414*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x7D0u, "Destination != ((void *) 0)"); /*0x3425*/
if ( AsciiStrLen(Intel) == -1 ) /*0x3443*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x7D5u, "AsciiStrSize (Source) != 0"); /*0x3454*/
if ( (char *)v2 - Intel <= AsciiStrLen(Intel) ) /*0x3473*/
DebugAssert( /*0x3484*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
0x7DAu,
"(UINTN) ((CHAR8 *) Destination - Source) > AsciiStrLen (Source)");
if ( Intel - (const CHAR8 *)v2 <= 2 * AsciiStrLen(Intel) ) /*0x34a6*/
DebugAssert( /*0x34b7*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
0x7DBu,
"(UINTN) (Source - (CHAR8 *) Destination) > (AsciiStrLen (Source) * sizeof (CHAR16))");
v4 = v2; /*0x34bc*/
while ( *Intel ) /*0x34d3*/
*v2++ = *Intel++; /*0x34c4*/
*v2 = 0; /*0x34dc*/
if ( 2 * StrLen(v4) == -2 ) /*0x34f1*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x7EAu, "StrSize (ReturnValue) != 0"); /*0x3502*/
return v4; /*0x351e*/
}
// Function: StrCharToUpper @ 0x3528 (0x36 bytes)
// Index: 51/906
__int16 __fastcall StrCharToUpper(__int64 a1)
{
if ( !a1 ) /*0x353d*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0x26u, "Buffer != ((void *) 0)"); /*0x3550*/
return *(_WORD *)a1; /*0x3558*/
}
// Function: StrLenAscii @ 0x3560 (0x37 bytes)
// Index: 52/906
__int64 __fastcall StrLenAscii(unsigned int *a1)
{
if ( !a1 ) /*0x3575*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0x8Du, "Buffer != ((void *) 0)"); /*0x358a*/
return *a1; /*0x3591*/
}
// Function: StrToHex @ 0x3598 (0x38 bytes)
// Index: 53/906
__int64 __fastcall StrToHex(__int64 a1)
{
if ( !a1 ) /*0x35ad*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0xC0u, "Buffer != ((void *) 0)"); /*0x35c2*/
return *(_QWORD *)a1; /*0x35ca*/
}
// Function: MemAllocPool @ 0x35d0 (0x2e bytes)
// Index: 54/906
__int64 __fastcall MemAllocPool(int n4, unsigned __int64 n8)
{
__int64 v2; // rax
__int64 v3; // rcx
__int64 v5; // [rsp+40h] [rbp+18h] BYREF
v2 = (*(__int64 (__fastcall **)(__int64, unsigned __int64, __int64 *))(qword_58070 + 64))(4, n8, &v5); /*0x35e5*/
v3 = v5; /*0x35e8*/
if ( v2 < 0 ) /*0x35f2*/
return 0; /*0x35f2*/
return v3; /*0x35f9*/
}
// Function: MemAllocZeroPool @ 0x3600 (0x2c bytes)
// Index: 55/906
__int64 __fastcall MemAllocZeroPool(unsigned __int64 n8)
{
__int64 i; // rax
i = MemAllocPool(4, n8); /*0x3611*/
if ( i ) /*0x3619*/
return RstMemZero(i, n8); /*0x3621*/
return i; /*0x3626*/
}
// Function: MemAllocCopyPool @ 0x362c (0x94 bytes)
// Index: 56/906
_BYTE *__fastcall MemAllocCopyPool(int n4, unsigned __int64 n8, __int64 FirstString)
{
_BYTE *result; // rax
if ( !FirstString ) /*0x3649*/
DebugAssert( /*0x365e*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c",
0x235u,
"Buffer != ((void *) 0)");
if ( n8 > -FirstString ) /*0x3676*/
DebugAssert( /*0x368b*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c",
0x236u,
"AllocationSize <= (0xFFFFFFFFFFFFFFFFULL - (UINTN) Buffer + 1)");
result = (_BYTE *)MemAllocPool(4, n8); /*0x3698*/
if ( result ) /*0x36a0*/
{
if ( n8 ) /*0x36a5*/
return RstCopyMemOverlapped(result, (_BYTE *)FirstString, n8); /*0x36b0*/
}
return result; /*0x36ba*/
}
// Function: MemFreePool @ 0x36c0 (0x54 bytes)
// Index: 57/906
void MemFreePool()
{
__int64 v0; // rax
v0 = (*(__int64 (**)(void))(qword_58070 + 72))(); /*0x36cb*/
if ( v0 < 0 ) /*0x36dc*/
{
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v0); /*0x36f2*/
DebugAssert( /*0x370a*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c",
0x32Fu,
"!EFI_ERROR (Status)");
}
}
// Function: ConsolePrintBoxed @ 0x3714 (0x345 bytes)
// Index: 58/906
__int64 ConsolePrintBoxed(__int64 n23, __int16 *p_n23, ...)
{
const CHAR16 *v2; // rsi
UINTN v4; // r12
unsigned __int64 v5; // rbp
const CHAR16 *v6; // rbx
const CHAR16 **v7; // rdi
__int64 v8; // rdi
unsigned __int64 v9; // rax
UINTN v10; // r15
unsigned __int64 v11; // r13
unsigned __int64 v12; // rbp
_WORD *v13; // rbx
unsigned __int64 v14; // r12
__int64 v15; // r14
unsigned __int64 v16; // r13
UINTN v17; // rbp
__int64 v18; // r8
CHAR16 *v19; // rdx
_BYTE *v20; // rcx
__int64 v21; // rdx
__int64 result; // rax
unsigned __int64 v23; // [rsp+20h] [rbp-98h]
va_list v24; // [rsp+28h] [rbp-90h]
__int64 v25; // [rsp+30h] [rbp-88h] BYREF
__int64 v26; // [rsp+38h] [rbp-80h] BYREF
unsigned __int64 v27; // [rsp+40h] [rbp-78h]
char v28[8]; // [rsp+48h] [rbp-70h] BYREF
char v29[4]; // [rsp+50h] [rbp-68h] BYREF
int v30; // [rsp+54h] [rbp-64h]
int v31; // [rsp+58h] [rbp-60h]
int v32; // [rsp+5Ch] [rbp-5Ch]
int v33; // [rsp+60h] [rbp-58h]
char v34; // [rsp+64h] [rbp-54h]
const CHAR16 *v36; // [rsp+D0h] [rbp+18h] BYREF
va_list va; // [rsp+D0h] [rbp+18h]
va_list va1; // [rsp+D8h] [rbp+20h] BYREF
va_start(va1, p_n23);
va_start(va, p_n23);
v36 = va_arg(va1, const CHAR16 *); /*0x3714*/
v2 = v36; /*0x3733*/
v4 = 0; /*0x373d*/
v5 = 0; /*0x3740*/
v6 = v36; /*0x3743*/
if ( v36 ) /*0x3749*/
{
va_copy((va_list)v7, va); /*0x374b*/
do /*0x376e*/
{
if ( v4 <= StrLen(v6) ) /*0x375a*/
v4 = StrLen(v6); /*0x3764*/
++v7; /*0x3767*/
++v5; /*0x376b*/
v6 = *v7; /*0x376e*/
}
while ( *v7 ); /*0x376e*/
}
if ( !v5 ) /*0x3784*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\Console.c", 0x15Bu, "NumberOfLines != 0"); /*0x3799*/
if ( !v4 ) /*0x37ac*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\Console.c", 0x160u, "MaxLength != 0"); /*0x37c1*/
v8 = *(_QWORD *)(SystemTable + 64LL); /*0x37d8*/
RstCopyMemOverlapped(v29, *(_BYTE **)(v8 + 72), 24); /*0x37e0*/
(*(void (__fastcall **)(__int64, _QWORD, __int64 *, __int64 *))(v8 + 24))(v8, v30, &v26, &v25); /*0x37f7*/
(*(void (__fastcall **)(__int64, _QWORD))(v8 + 64))(v8, 0); /*0x37ff*/
(*(void (__fastcall **)(__int64, __int64))(v8 + 40))(v8, n23); /*0x3808*/
v9 = v25 - 3; /*0x3810*/
if ( v5 < v25 - 3 ) /*0x3817*/
v9 = v5; /*0x3817*/
v10 = v26 - 2; /*0x3820*/
v23 = v9; /*0x3824*/
if ( v4 < v26 - 2 ) /*0x382c*/
v10 = v4; /*0x382c*/
v11 = (v25 - v9 - 3) >> 1; /*0x3843*/
v12 = (v26 - v10 - 2) >> 1; /*0x3846*/
v27 = v12; /*0x3849*/
v13 = (_WORD *)MemAllocZeroPool(2 * v10 + 6); /*0x385a*/
if ( !v13 ) /*0x3862*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\Console.c", 0x18Bu, "Line != ((void *) 0)"); /*0x3877*/
v14 = 2 * v10 + 4; /*0x387c*/
MemSet((__int64)v13, v14, 9472); /*0x388d*/
v15 = v10; /*0x3898*/
*v13 = 9484; /*0x38a0*/
v13[v10 + 1] = 9488; /*0x38a7*/
*(_WORD *)((char *)v13 + v14) = 0; /*0x38b5*/
(*(void (__fastcall **)(__int64, unsigned __int64, unsigned __int64))(v8 + 56))(v8, v12, v11); /*0x38ba*/
v16 = v11 + 1; /*0x38c3*/
(*(void (__fastcall **)(__int64, _WORD *))(v8 + 8))(v8, v13); /*0x38c6*/
if ( v2 ) /*0x38ce*/
{
va_copy(v24, va); /*0x38dc*/
do /*0x38e1*/
{
if ( !v23 ) /*0x38e6*/
break; /*0x38e6*/
v17 = StrLen(v2); /*0x3900*/
MemSet((__int64)v13, 2 * v10 + 4, 32); /*0x3903*/
if ( v17 > v10 ) /*0x390b*/
{
if ( v15 * 2 ) /*0x392d*/
{
v20 = v13 + 1; /*0x3932*/
v18 = 2 * v10; /*0x3936*/
v19 = (CHAR16 *)&v2[(v17 - v10) >> 1]; /*0x393c*/
goto LABEL_24; /*0x393c*/
}
}
else
{
v18 = 2 * v17; /*0x390d*/
if ( 2 * v17 ) /*0x390d*/
{
v19 = (CHAR16 *)v2; /*0x391a*/
v20 = &v13[((v10 - v17) >> 1) + 1]; /*0x3923*/
LABEL_24:
RstCopyMemOverlapped(v20, v19, v18); /*0x3940*/
}
}
v12 = v27; /*0x3945*/
*v13 = 9474; /*0x3951*/
v13[v15 + 1] = 9474; /*0x395d*/
*(_WORD *)((char *)v13 + v14) = 0; /*0x3963*/
(*(void (__fastcall **)(__int64, unsigned __int64, unsigned __int64))(v8 + 56))(v8, v12, v16++); /*0x3968*/
(*(void (__fastcall **)(__int64, _WORD *))(v8 + 8))(v8, v13); /*0x3974*/
--v23; /*0x397c*/
v2 = (const CHAR16 *)v24[1]; /*0x3987*/
++v24; /*0x398a*/
}
while ( v2 ); /*0x38e1*/
}
MemSet((__int64)v13, 2 * v10 + 4, 9472); /*0x3998*/
*v13 = 9492; /*0x39b1*/
*(_WORD *)((char *)v13 + v14) = 0; /*0x39c2*/
v13[v15 + 1] = 9496; /*0x39c7*/
(*(void (__fastcall **)(__int64, unsigned __int64, unsigned __int64))(v8 + 56))(v8, v12, v16); /*0x39cd*/
(*(void (__fastcall **)(__int64, _WORD *))(v8 + 8))(v8, v13); /*0x39d6*/
MemFreePool(); /*0x39dc*/
LOBYTE(v21) = v34; /*0x39e1*/
(*(void (__fastcall **)(__int64, __int64))(v8 + 64))(v8, v21); /*0x39e8*/
(*(void (__fastcall **)(__int64, _QWORD, _QWORD))(v8 + 56))(v8, v32, v33); /*0x39f8*/
result = (*(__int64 (__fastcall **)(__int64, _QWORD))(v8 + 40))(v8, v31); /*0x3a03*/
if ( p_n23 ) /*0x3a11*/
{
(*(void (__fastcall **)(__int64, __int64, char *))(qword_58070 + 96))( /*0x3a31*/
1,
*(_QWORD *)(SystemTable + 48LL) + 16LL,
v28);
return (*(__int64 (__fastcall **)(_QWORD, __int16 *))(*(_QWORD *)(SystemTable + 48LL) + 8LL))( /*0x3a45*/
*(_QWORD *)(SystemTable + 48LL),
p_n23);
}
return result; /*0x3a48*/
}
// Function: LocateHandleBuffer @ 0x3a5c (0x166 bytes)
// Index: 59/906
__int64 __fastcall LocateHandleBuffer(__int64 a1, __int64 SystemTable)
{
__int64 v2; // rax
__int64 v3; // rax
__int64 v4; // rax
__int64 v5; // r9
v2 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27960, 0, &qword_58080); /*0x3a79*/
if ( v2 < 0 ) /*0x3a93*/
{
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v2); /*0x3aa7*/
DebugAssert( /*0x3abf*/
"c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
0x58u,
"!EFI_ERROR (Status)");
}
v3 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_279A0, 0, &qword_58090); /*0x3adb*/
if ( v3 < 0 ) /*0x3aef*/
{
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v3); /*0x3b03*/
DebugAssert( /*0x3b1b*/
"c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
0x5Eu,
"!EFI_ERROR (Status)");
}
v4 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27970, 0, &qword_58098); /*0x3b37*/
LOBYTE(v5) = 15; /*0x3b3d*/
if ( v4 < 0 ) /*0x3b4d*/
{
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v4, v5); /*0x3b62*/
DebugAssert( /*0x3b7a*/
"c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
0x64u,
"!EFI_ERROR (Status)");
}
(*(void (__fastcall **)(void *, _QWORD, void *, __int64))(qword_58070 + 320))(&unk_279C0, 0, &unk_58078, v5); /*0x3b96*/
(*(void (__fastcall **)(void *, _QWORD, void *))(qword_58070 + 320))(&unk_279B0, 0, &unk_58088); /*0x3bb3*/
return 0; /*0x3bbb*/
}
// Function: GetDebugLevel @ 0x3bc4 (0x132 bytes)
// Index: 60/906
__int64 GetDebugLevel()
{
__int64 result; // rax
unsigned __int64 n8_1; // rbx
__int64 v2; // r10
__int64 v3; // rax
_WORD *NextBlock; // rax
_WORD *v5; // rbx
__int64 n8; // [rsp+40h] [rbp+8h] BYREF
unsigned int v7; // [rsp+48h] [rbp+10h] BYREF
if ( !qword_580A8 ) /*0x3bd8*/
return 0x80000000LL; /*0x3be0*/
if ( !byte_580A0 ) /*0x3bec*/
{
n8_1 = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)(qword_580A8 + 96) + 24LL))(31); /*0x3c0c*/
(*(void (__fastcall **)(unsigned __int64))(*(_QWORD *)(qword_580A8 + 96) + 32LL))(n8_1); /*0x3c0f*/
if ( n8_1 <= 8 ) /*0x3c16*/
{
v2 = *(_QWORD *)(qword_580A8 + 88); /*0x3c2f*/
n8 = 8; /*0x3c47*/
v3 = (*(__int64 (__fastcall **)(const wchar_t *, void *, _QWORD, __int64 *, unsigned int *))(v2 + 72))( /*0x3c50*/
L"EFIDebug",
&unk_27860,
0,
&n8,
&v7);
if ( v3 == 0xA000000000000002uLL ) /*0x3c61*/
{
NextBlock = (_WORD *)HiiGetNextBlock(); /*0x3c7b*/
v5 = HiiBlockExtract(4, NextBlock); /*0x3c8f*/
if ( v5 ) /*0x3c95*/
{
do /*0x3cbf*/
{
if ( RstGuidCompare((__int64)&unk_27860, (__int64)(v5 + 4)) ) /*0x3ca2*/
break; /*0x3ca9*/
v5 = HiiBlockExtract(4, (_WORD *)((char *)v5 + (unsigned __int16)v5[1])); /*0x3cb9*/
}
while ( v5 ); /*0x3cbf*/
if ( v5 && v5[1] == 28 ) /*0x3cd1*/
{
result = *((unsigned int *)v5 + 6); /*0x3cd3*/
byte_580A0 = 1; /*0x3cd6*/
dword_580A4 = result; /*0x3cdd*/
return result; /*0x3ce3*/
}
}
}
else
{
byte_580A0 = 1; /*0x3c63*/
if ( v3 >= 0 ) /*0x3c6d*/
{
dword_580A4 = v7; /*0x3c73*/
return v7; /*0x3c79*/
}
}
}
}
return (unsigned int)dword_580A4; /*0x3cf0*/
}
// Function: HiiLibError @ 0x3cf8 (0x1c bytes)
// Index: 61/906
unsigned __int64 __fastcall HiiLibError(__int64 a1, _QWORD *a2)
{
if ( !a2 ) /*0x3cfb*/
return 0x8000000000000002uLL; /*0x3cfd*/
*a2 = (unsigned int)dword_580A4; /*0x3d0e*/
return 0; /*0x3d07*/
}
// Function: HiiLibFalse @ 0x3d14 (0x9 bytes)
// Index: 62/906
__int64 __fastcall HiiLibFalse(__int64 a1, int a2)
{
dword_580A4 = a2; /*0x3d14*/
return 0; /*0x3d1c*/
}
// Function: HiiConfigStringToBlock @ 0x3d20 (0x39 bytes)
// Index: 63/906
unsigned __int32 __fastcall HiiConfigStringToBlock(unsigned __int16 n0xCFC)
{
if ( (n0xCFC & 3) != 0 ) /*0x3d35*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLibMsc.c", 0xC1u, "(Port & 3) == 0"); /*0x3d4a*/
return __indword(n0xCFC); /*0x3d53*/
}
// Function: HiiConfigStringToBlock2 @ 0x3d5c (0x46 bytes)
// Index: 64/906
__int64 __fastcall HiiConfigStringToBlock2(unsigned __int16 n0xCF8, unsigned int a2)
{
if ( (n0xCF8 & 3) != 0 ) /*0x3d77*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLibMsc.c", 0xDFu, "(Port & 3) == 0"); /*0x3d8c*/
__outdword(n0xCF8, a2); /*0x3d96*/
return a2; /*0x3d9c*/
}
// Function: HiiGetBlockSize @ 0x3da4 (0x38 bytes)
// Index: 65/906
__int64 __fastcall HiiGetBlockSize(unsigned __int16 *a1)
{
if ( ((unsigned __int8)a1 & 1) != 0 ) /*0x3db9*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", 0x97u, "(Address & 1) == 0"); /*0x3dce*/
return *a1; /*0x3dd6*/
}
// Function: HiiWriteBlock @ 0x3ddc (0x37 bytes)
// Index: 66/906
__int64 __fastcall HiiWriteBlock(unsigned int *a1)
{
if ( ((unsigned __int8)a1 & 3) != 0 ) /*0x3df1*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", 0xD7u, "(Address & 3) == 0"); /*0x3e06*/
return *a1; /*0x3e0d*/
}
// Function: HiiReadBlock @ 0x3e14 (0x44 bytes)
// Index: 67/906
__int64 __fastcall HiiReadBlock(unsigned int *a1, unsigned int a2)
{
if ( ((unsigned __int8)a1 & 3) != 0 ) /*0x3e2f*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", 0xF7u, "(Address & 3) == 0"); /*0x3e44*/
*a1 = a2; /*0x3e49*/
return a2; /*0x3e52*/
}
// Function: HiiSetBlockToVal @ 0x3e58 (0x39 bytes)
// Index: 68/906
__int64 __fastcall HiiSetBlockToVal(unsigned int *a1, int a2, int n257)
{
unsigned int v6; // eax
v6 = HiiWriteBlock(a1); /*0x3e6f*/
return HiiReadBlock(a1, n257 | a2 & v6); /*0x3e87*/
}
// Function: MemSet @ 0x3e94 (0xf0 bytes)
// Index: 69/906
__int64 __fastcall MemSet(__int64 a1, unsigned __int64 a2, __int16 n9472)
{
unsigned __int64 v6; // rbx
if ( a2 ) /*0x3eb0*/
{
if ( !a1 ) /*0x3ec8*/
DebugAssert( /*0x3edb*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\SetMem16Wrapper.c",
0x3Au,
"Buffer != ((void *) 0)");
if ( a2 - 1 > -1 - a1 ) /*0x3ef9*/
DebugAssert( /*0x3f0e*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\SetMem16Wrapper.c",
0x3Bu,
"(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)Buffer)");
if ( (a1 & 1) != 0 ) /*0x3f22*/
DebugAssert( /*0x3f37*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\SetMem16Wrapper.c",
0x3Cu,
"(((UINTN)Buffer) & (sizeof (Value) - 1)) == 0");
if ( (a2 & 1) != 0 ) /*0x3f4a*/
DebugAssert( /*0x3f5f*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\SetMem16Wrapper.c",
0x3Du,
"(Length & (sizeof (Value) - 1)) == 0");
v6 = a2 >> 1; /*0x3f64*/
do /*0x3f6f*/
{
--v6; /*0x3f67*/
*(_WORD *)(a1 + 2 * v6) = n9472; /*0x3f6b*/
}
while ( v6 ); /*0x3f6f*/
}
return a1; /*0x3f7e*/
}
// Function: HiiLibSuccess @ 0x3f84 (0x20 bytes)
// Index: 70/906
bool HiiLibSuccess()
{
__int16 v0; // bx
v0 = _getcallerseflags_w(); /*0x3f8f*/
disable_w(); /*0x3f92*/
return (v0 & 0x200) != 0; /*0x3f9e*/
}
// Function: HiiLibFailure @ 0x3fa4 (0x20 bytes)
// Index: 71/906
char __fastcall HiiLibFailure(char a1)
{
if ( a1 ) /*0x3fae*/
enable_w(); /*0x3fb0*/
else
disable_w(); /*0x3fb7*/
return a1; /*0x3fbe*/
}
// Function: HiiGetNextBlock @ 0x3fc4 (0x3b bytes)
// Index: 72/906
__int64 HiiGetNextBlock()
{
if ( !qword_580B0 ) /*0x3fd9*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 0x4Du, "mHobList != ((void *) 0)"); /*0x3fee*/
return qword_580B0; /*0x3ffa*/
}
// Function: HiiBlockExtract @ 0x4000 (0x56 bytes)
// Index: 73/906
_WORD *__fastcall HiiBlockExtract(int n4, _WORD *NextBlock)
{
_WORD *NextBlock_1; // rbx
NextBlock_1 = NextBlock; /*0x400d*/
if ( !NextBlock ) /*0x4015*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 0x6Bu, "HobStart != ((void *) 0)"); /*0x4028*/
while ( 1 ) /*0x4041*/
{
if ( *NextBlock_1 == 0xFFFF ) /*0x4047*/
return 0; /*0x4050*/
if ( *NextBlock_1 == 4 ) /*0x4038*/
break; /*0x4038*/
NextBlock_1 = (_WORD *)((char *)NextBlock_1 + (unsigned __int16)NextBlock_1[1]); /*0x403e*/
}
return NextBlock_1; /*0x404b*/
}
// Function: RstUefiDriverEntryPoint @ 0x4058 (0x7d bytes)
// Index: 74/906
EFI_STATUS __fastcall RstUefiDriverEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
__int64 v3; // rax
__int64 v4; // rbx
EfiDriverInit(ImageHandle, SystemTable); /*0x4065*/
GetSystemMemoryMap(0); /*0x406c*/
v3 = MemAlloc(744); /*0x407d*/
v4 = v3; /*0x4082*/
if ( v3 ) /*0x4088*/
{
RstPrivateDataInit(v3, ImageHandle); /*0x4090*/
*(_QWORD *)(v4 + 720) = 0; /*0x4095*/
*(_QWORD *)(v4 + 728) = 0; /*0x409d*/
*(_BYTE *)(v4 + 736) = 0; /*0x40ac*/
*(_QWORD *)v4 = &off_23120; /*0x40b3*/
}
else
{
v4 = 0; /*0x40b8*/
}
qword_35410 = v4; /*0x40ba*/
return (*(EFI_STATUS (__fastcall **)(__int64))(*(_QWORD *)v4 + 16LL))(v4);
}
// Function: HiiBlockCompare @ 0x40d8 (0x1e bytes)
// Index: 75/906
__int64 HiiBlockCompare()
{
if ( qword_35410 ) /*0x40e6*/
return RstHelper_59fc(qword_35410); /*0x40e8*/
else
return 0; /*0x40ef*/
}
// Function: HiiBlockCompareConst @ 0x40f8 (0x1e bytes)
// Index: 76/906
__int64 HiiBlockCompareConst()
{
if ( qword_35410 ) /*0x4106*/
return RstDeviceGetRaidLevelFromCtx(qword_35410); /*0x4108*/
else
return 0; /*0x410f*/
}
// Function: GuidCompare @ 0x4118 (0x20 bytes)
// Index: 77/906
__int64 __fastcall GuidCompare(unsigned int a1)
{
if ( qword_35410 ) /*0x4128*/
return RstHelper_5a44(qword_35410, a1); /*0x412a*/
else
return 0; /*0x4131*/
}
// Function: HiiLibGuidIsZero @ 0x4138 (0x1e bytes)
// Index: 78/906
__int64 __fastcall HiiLibGuidIsZero(unsigned int a1)
{
__int64 result; // rax
result = 0; /*0x4145*/
if ( qword_35410 ) /*0x414a*/
return RstHelper_5a68(qword_35410, a1); /*0x414c*/
return result; /*0x4151*/
}
// Function: HiiLibGuidToStr @ 0x4158 (0x25 bytes)
// Index: 79/906
__int64 __fastcall HiiLibGuidToStr(unsigned int a1, const char *en)
{
if ( qword_35410 ) /*0x4168*/
return RstHelper_5a8c(qword_35410, a1, (__int64)en); /*0x416f*/
else
return 0; /*0x4176*/
}
// Function: HiiLibStrToGuid @ 0x4180 (0x17 bytes)
// Index: 80/906
char __fastcall HiiLibStrToGuid(__int64 a1, int n5)
{
if ( a1 ) /*0x4187*/
return RstCheckSecureBoot(a1, n5); /*0x4189*/
else
return 0; /*0x4190*/
}
// Function: HiiLibGuidCmp @ 0x4198 (0x18 bytes)
// Index: 81/906
__int64 __fastcall HiiLibGuidCmp(__int64 a1)
{
if ( a1 ) /*0x419f*/
return RstReturnSuccess(a1); /*0x41a1*/
else
return 0xFFFFFFFFLL; /*0x41a8*/
}
// Function: HiiLibGuidIsEqual @ 0x41b0 (0x17 bytes)
// Index: 82/906
__int64 __fastcall HiiLibGuidIsEqual(__int64 a1)
{
if ( a1 ) /*0x41b7*/
return RstReturnFail(a1); /*0x41b9*/
else
return 0; /*0x41c0*/
}
// Function: HiiLibNewString @ 0x4220 (0x73 bytes)
// Index: 83/906
unsigned __int64 __fastcall HiiLibNewString(__int64 a1)
{
__int64 v2; // rbx
v2 = 0; /*0x4231*/
if ( !RstUefiProtocolGuid(*(_QWORD **)(a1 + 48)) ) /*0x4233*/
return 0x8000000000000007uLL; /*0x423c*/
VarInstall((_QWORD *)qword_35418, &xmmword_27100, (CHAR16 *)"RstUefiV", L"RstUefiV", "VROC", (wchar_t *)L"RstUefiF"); /*0x427c*/
*(_BYTE *)(a1 + 16) = 1; /*0x4281*/
return v2; /*0x428d*/
}
// Function: HiiLibGetString @ 0x4294 (0x41 bytes)
// Index: 84/906
unsigned __int64 __fastcall HiiLibGetString(__int64 a1, unsigned __int64 a2, __int64 a3)
{
__int64 v4; // rdi
if ( a2 ) /*0x42a4*/
return RstConfigAccessExtract(a1, a2, a3); /*0x42c4*/
v4 = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 40LL))(a1); /*0x42ac*/
RstDriverContextInitialize(); /*0x42af*/
*(_QWORD *)(a1 + 8) = 0; /*0x42b4*/
*(_BYTE *)(a1 + 16) = 0; /*0x42b9*/
return v4; /*0x42cf*/
}
// Function: HiiLibGetStringId @ 0x42d8 (0x4a bytes)
// Index: 85/906
__int64 __fastcall HiiLibGetStringId(RST_PRIVATE_DATA *Private, __int64 a2, __int64 a3, void **p_NameString)
{
return (*(__int64 (__fastcall **)(__int64, __int64, void **, _QWORD, _QWORD, int))(qword_58070 + 280))( /*0x431c*/
a2,
a3,
p_NameString,
*((_QWORD *)Private->HiiLibFunctions[4] + 70),
*((_QWORD *)Private->HiiLibFunctions[4] + 78),
16);
}
// Function: HiiLibFindString @ 0x4324 (0x2c bytes)
// Index: 86/906
__int64 __fastcall HiiLibFindString(RST_PRIVATE_DATA *Private, __int64 a2, __int64 a3)
{
return (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, _QWORD))(qword_58070 + 288))(
a2,
a3,
*((_QWORD *)Private->HiiLibFunctions[4] + 70),
*((_QWORD *)Private->HiiLibFunctions[4] + 78));
}
// Function: HiiLibStub @ 0x4350 (0x5 bytes)
// Index: 87/906
// attributes: thunk
__int64 __fastcall HiiLibStub(__int64 a1)
{
return RstConfigAccessRoute(a1);
}
// Function: HiiLibGetStringById @ 0x4358 (0x2d bytes)
// Index: 88/906
__int64 __fastcall HiiLibGetStringById(__int64 a1)
{
__int64 result; // rax
result = RstConfigAccessRoute(a1); /*0x4361*/
if ( result >= 0 ) /*0x4369*/
{
result = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)qword_35418 + 40LL))(qword_35418); /*0x4375*/
*(_BYTE *)(a1 + 136) = 0; /*0x4378*/
}
return result; /*0x437f*/
}
// Function: HiiLibGetDefaultString @ 0x4388 (0x5a bytes)
// Index: 89/906
__int64 __fastcall HiiLibGetDefaultString(RST_PRIVATE_DATA *Private)
{
_BYTE *v2; // rcx
__int64 result; // rax
_BYTE *v4; // rcx
_BYTE *v5; // rcx
LODWORD(Private->HiiLibFunctions[11]) = 0; /*0x438e*/
v2 = Private->HiiLibFunctions[12]; /*0x4395*/
if ( v2 ) /*0x439c*/
{
result = MemZeroThenFree(v2, 0); /*0x43a0*/
Private->HiiLibFunctions[12] = 0; /*0x43a5*/
}
v4 = Private->HiiLibFunctions[13]; /*0x43aa*/
if ( v4 ) /*0x43b1*/
{
result = MemZeroThenFree(v4, LODWORD(Private->HiiLibFunctions[11])); /*0x43b6*/
Private->HiiLibFunctions[13] = 0; /*0x43bb*/
}
v5 = Private->HiiLibFunctions[14]; /*0x43c0*/
if ( v5 ) /*0x43ca*/
{
result = MemZeroThenFree(v5, LODWORD(Private->HiiLibFunctions[11])); /*0x43cf*/
Private->HiiLibFunctions[14] = 0; /*0x43d4*/
}
return result; /*0x43dc*/
}
// Function: HiiLibGetDefaultStringId @ 0x43e4 (0x6b bytes)
// Index: 90/906
char __fastcall HiiLibGetDefaultStringId(_DWORD *Context, unsigned int a2, unsigned int a3)
{
__int64 v3; // r9
__int64 v4; // rdx
unsigned __int8 v5; // al
int v6; // ecx
char result; // al
int n2; // ecx
v3 = *((_QWORD *)Context + 15) + 56LL * a2; /*0x43f2*/
v4 = *((_QWORD *)Context + 15) + 56LL * a3; /*0x43f6*/
v5 = *(_BYTE *)(v3 + 1); /*0x43fa*/
if ( v5 != *(_BYTE *)(v4 + 1) ) /*0x4401*/
return 0; /*0x4401*/
v6 = v5; /*0x4403*/
result = 1; /*0x4406*/
n2 = v6 - 1; /*0x440b*/
if ( n2 ) /*0x440d*/
{
if ( n2 != 2 /*0x444a*/
|| *(_WORD *)(v3 + 40) != 0x8086
|| *(_WORD *)(v3 + 42) != 10278 && *(_WORD *)(v3 + 42) != 10279
|| *(_WORD *)(v4 + 40) != 0x8086
|| *(_WORD *)(v4 + 42) != 10278 && *(_WORD *)(v4 + 42) != 10279 )
{
return 0; /*0x444c*/
}
}
return result; /*0x444e*/
}
// Function: HiiLibReturnZero @ 0x4450 (0x4 bytes)
// Index: 91/906
__int64 __fastcall HiiLibReturnZero(__int64 a1)
{
return *(unsigned int *)(a1 + 104); /*0x4453*/
}
// Function: HiiLibReturnOne @ 0x4454 (0x12 bytes)
// Index: 92/906
__int64 __fastcall HiiLibReturnOne(__int64 a1, unsigned int a2)
{
return *(unsigned __int8 *)(56LL * a2 + *(_QWORD *)(a1 + 120) + 1); /*0x4465*/
}
// Function: HiiLibReturnFalse @ 0x4468 (0x15 bytes)
// Index: 93/906
__int64 __fastcall HiiLibReturnFalse(__int64 a1, unsigned int a2)
{
if ( a2 >= *(_DWORD *)(a1 + 104) ) /*0x446b*/
return 0; /*0x447a*/
else
return *(unsigned int *)(*(_QWORD *)(a1 + 128) + 4LL * a2); /*0x4476*/
}
// Function: HiiLibGetStringFromPackage @ 0x4480 (0x164 bytes)
// Index: 94/906
__int64 __fastcall HiiLibGetStringFromPackage(__int64 a1, unsigned int a2, __int64 a3)
{
__int64 v3; // rbx
__int64 v6; // rbp
__int64 v8; // rdi
__int64 v9; // rax
unsigned __int64 v10; // [rsp+30h] [rbp-38h] BYREF
__int64 v11; // [rsp+38h] [rbp-30h] BYREF
_QWORD v12[5]; // [rsp+40h] [rbp-28h] BYREF
__int64 v13; // [rsp+88h] [rbp+20h] BYREF
v3 = 0; /*0x4493*/
v11 = 0; /*0x449b*/
if ( a2 < *(_DWORD *)(a1 + 104) ) /*0x44a2*/
{
v6 = a2; /*0x44ac*/
if ( *(_QWORD *)(*(_QWORD *)(a1 + 112) + 8LL * a2) ) /*0x44ae*/
{
v10 = 0; /*0x44d8*/
v13 = 0; /*0x44dc*/
if ( (*(__int64 (__fastcall **)(__int64, void *, _QWORD, unsigned __int64 *, __int64 *))(qword_58070 + 312))( /*0x44e9*/
2,
&unk_27110,
0,
&v10,
&v13) < 0 )
return v11; /*0x44f0*/
v8 = 0; /*0x44f5*/
if ( v10 ) /*0x44fd*/
{
while ( 1 ) /*0x4503*/
{
v9 = *(_QWORD *)(a1 + 8); /*0x4503*/
v12[0] = 0; /*0x4516*/
if ( !(*(__int64 (__fastcall **)(_QWORD, void *, _QWORD *, _QWORD, __int64, int))(qword_58070 + 280))( /*0x4546*/
*(_QWORD *)(v13 + 8 * v8),
&unk_27770,
v12,
*(_QWORD *)(qword_35418 + 560),
v9,
2) )
{
if ( v12[0] ) /*0x4559*/
break; /*0x4559*/
}
if ( ++v8 >= v10 ) /*0x4563*/
goto LABEL_11; /*0x4563*/
}
(*(void (__fastcall **)(_QWORD, _QWORD, _QWORD, __int64, __int64 *))(v12[0] + 8LL))( /*0x4582*/
v12[0],
*(_QWORD *)(*(_QWORD *)(a1 + 112) + 8 * v6),
0,
a3,
&v11);
(*(void (__fastcall **)(_QWORD, void *, _QWORD, _QWORD))(qword_58070 + 288))( /*0x45b1*/
*(_QWORD *)(v13 + 8 * v8),
&unk_27770,
*(_QWORD *)(qword_35418 + 560),
*(_QWORD *)(a1 + 8));
}
LABEL_11:
(*(void (__fastcall **)(__int64))(qword_58070 + 72))(v13); /*0x45b7*/
return v11; /*0x45c9*/
}
}
return v3; /*0x45db*/
}
// Function: HiiLibGetAllStrings @ 0x45e4 (0x11b bytes)
// Index: 95/906
__int64 __fastcall HiiLibGetAllStrings(__int64 a1, __int64 a2)
{
__int64 FirstString_2; // r15
unsigned int v4; // ebx
__int64 i; // r12
const CHAR16 *FirstString_1; // rsi
bool v7; // di
const CHAR16 *FirstString; // r13
UINTN Length; // r14
FirstString_2 = RstUefiReadVariable(a2); /*0x460e*/
if ( !FirstString_2 ) /*0x4614*/
return 0xFFFFFFFFLL; /*0x4614*/
v4 = 0; /*0x461a*/
if ( !*(_DWORD *)(a1 + 104) ) /*0x461d*/
return 0xFFFFFFFFLL; /*0x46db*/
for ( i = 0; ; i += 8 ) /*0x4627*/
{
FirstString_1 = (const CHAR16 *)RstUefiReadVariable(*(_QWORD *)(i + *(_QWORD *)(a1 + 112))); /*0x4637*/
if ( FirstString_1 ) /*0x463d*/
{
v7 = 1; /*0x4643*/
FirstString = (const CHAR16 *)FirstString_2; /*0x4646*/
do /*0x46c5*/
{
if ( !FirstString || !FirstString_1 || Assert_66(FirstString) || Assert_66(FirstString_1) ) /*0x4663*/
break; /*0x466b*/
Length = Assert_72((__int64)FirstString); /*0x4678*/
v7 = Length == Assert_72((__int64)FirstString_1) /*0x4678*/
&& !(unsigned __int16)StrnCmp(FirstString, FirstString_1, Length);
FirstString = (const CHAR16 *)Assert_71((__int64)FirstString); /*0x46b7*/
FirstString_1 = (const CHAR16 *)Assert_71((__int64)FirstString_1); /*0x46bf*/
}
while ( v7 ); /*0x46c5*/
if ( v7 ) /*0x46ca*/
break; /*0x46ca*/
}
if ( ++v4 >= *(_DWORD *)(a1 + 104) ) /*0x46d5*/
return 0xFFFFFFFFLL; /*0x46d5*/
}
return v4; /*0x46ed*/
}
// Function: HiiLibFreeStringArray @ 0x4700 (0x2e bytes)
// Index: 96/906
__int64 __fastcall HiiLibFreeStringArray(__int64 a1, __int64 a2)
{
unsigned int v2; // eax
_QWORD *i; // r8
v2 = 0; /*0x4700*/
if ( !*(_DWORD *)(a1 + 104) ) /*0x4705*/
return 0; /*0x471e*/
for ( i = *(_QWORD **)(a1 + 112); a2 != *i; ++i ) /*0x470a*/
{
if ( ++v2 >= *(_DWORD *)(a1 + 104) ) /*0x471c*/
return 0; /*0x471c*/
}
return *(unsigned int *)(*(_QWORD *)(a1 + 128) + 4LL * v2); /*0x4720*/
}
// Function: RstAllocContext728 @ 0x4730 (0xb1 bytes)
// Index: 97/906
RST_DEVICE *__fastcall RstAllocContext728(RST_PRIVATE_DATA *Private)
{
__int64 v1; // rdx
__int64 v2; // rbx
_QWORD *v4; // rax
_QWORD *NewContext; // rbx
RST_DEVICE *result; // rax
bool v7; // di
bool v8; // cl
v2 = v1; /*0x4744*/
v4 = (_QWORD *)MemAlloc(632); /*0x4756*/
if ( v4 ) /*0x4760*/
NewContext = RstCreateNewContext(v4, v2, (__int64)Private); /*0x4770*/
else
NewContext = 0; /*0x4775*/
result = (RST_DEVICE *)RstReturnSuccess(NewContext); /*0x477b*/
v7 = (_DWORD)result != -1; /*0x4783*/
if ( (_DWORD)result == -1 ) /*0x478a*/
goto LABEL_9; /*0x478a*/
result = (RST_DEVICE *)(*(__int64 (__fastcall **)(_QWORD *))(*NewContext + 8LL))(NewContext); /*0x4792*/
v8 = v7; /*0x4795*/
if ( (__int64)result < 0 ) /*0x479c*/
v8 = 0; /*0x479c*/
if ( !v8 ) /*0x47a2*/
{
LABEL_9:
if ( NewContext ) /*0x47bd*/
return (RST_DEVICE *)(*(__int64 (__fastcall **)(_QWORD *, __int64))*NewContext)(NewContext, 1); /*0x47ca*/
}
else
{
RstInstallClass((RST_PRIVATE_DATA *)&Private->HiiLibFunctions[1], NewContext); /*0x47ab*/
return (RST_DEVICE *)RstAuthAssertContext(NewContext); /*0x47b3*/
}
return result; /*0x47db*/
}
// Function: RstAllocContext440 @ 0x47e4 (0x63 bytes)
// Index: 98/906
void *__fastcall RstAllocContext440(RST_PRIVATE_DATA *Private)
{
__int64 v1; // rdx
__int64 v2; // rsi
__int64 v4; // rax
void *Context; // rbx
v2 = v1; /*0x47f3*/
v4 = MemAlloc(440); /*0x4805*/
Context = 0; /*0x480a*/
if ( v4 ) /*0x480f*/
Context = (void *)RstFormCallbackHandler(v4, (__int64)Private, v2); /*0x481f*/
RstInstallClass((RST_PRIVATE_DATA *)&Private->HiiLibFunctions[1], Context); /*0x4829*/
return (*(void *(__fastcall **)(void *))(*(_QWORD *)Context + 8LL))(Context);
}
// Function: RstFreeContext @ 0x4848 (0x58 bytes)
// Index: 99/906
void __fastcall RstFreeContext(void *Context)
{
unsigned int v1; // edx
unsigned int v2; // edi
_DWORD *Context_1; // r11
unsigned int v4; // ebx
unsigned int v5; // esi
v2 = v1; /*0x4857*/
Context_1 = Context; /*0x4859*/
if ( v1 ) /*0x485e*/
{
v4 = 0; /*0x4860*/
v5 = v1 - 1; /*0x4862*/
while ( !HiiLibGetDefaultStringId((__int64)Context_1, v4, v2) ) /*0x4874*/
{
if ( ++v4 > v5 ) /*0x487a*/
goto LABEL_5; /*0x487a*/
}
}
else
{
LABEL_5:
++Context_1[27]; /*0x487c*/
}
}
// Function: RstHelper_48a0 @ 0x48a0 (0x36 bytes)
// Index: 100/906
void __fastcall RstHelper_48a0(RST_PRIVATE_DATA *Private)
{
_QWORD *i; // rbx
RST_DEVICE *Device; // rcx
for ( i = Private->HiiLibFunctions[1]; i; i = (_QWORD *)*i ) /*0x48a6*/
{
if ( !(*(unsigned __int8 (__fastcall **)(_QWORD))(*(_QWORD *)i[2] + 104LL))(i[2]) ) /*0x48b3*/
{
Device = (RST_DEVICE *)i[2]; /*0x48ba*/
if ( Device ) /*0x48c1*/
RstFormEntry(Device); /*0x48c3*/
}
}
}
// Function: RstCallback @ 0x48d8 (0x92 bytes)
// Index: 101/906
EFI_STATUS __fastcall RstCallback(RST_PRIVATE_DATA *Private)
{
EFI_STATUS result; // rax
__int64 v3; // [rsp+40h] [rbp+8h] BYREF
__int64 v4; // [rsp+48h] [rbp+10h] BYREF
RstHelper_48a0((__int64)Private); /*0x48e1*/
result = (*(__int64 (__fastcall **)(__int64, unsigned int *, _QWORD, __int64 *, __int64 *))(qword_58070 + 312))( /*0x490a*/
2,
&dword_278C0,
0,
&v3,
&v4);
if ( !LOBYTE(Private->HiiLibFunctions[15]) && !result && v3 ) /*0x4923*/
{
(*(void (__fastcall **)(_QWORD *))(*qword_35418 + 32LL))(qword_35418); /*0x492f*/
LOBYTE(Private->HiiLibFunctions[15]) = 1; /*0x4932*/
result = RstGetString((__int64)&Private->HiiLibFunctions[7], (__int64)(qword_35418 + 78)); /*0x494b*/
}
if ( v4 ) /*0x4958*/
return (*(EFI_STATUS (**)(void))(qword_58070 + 72))(); /*0x4961*/
return result; /*0x4964*/
}
// Function: RstCallbackHandler @ 0x496c (0x1ad bytes)
// Index: 102/906
EFI_STATUS __fastcall RstCallbackHandler(RST_PRIVATE_DATA *Private)
{
const CHAR16 *Source_1; // rdx
unsigned int n24_3; // r8d
unsigned int n24_1; // esi
const CHAR16 *Source; // rbp
EFI_STATUS n24; // rax
void *v7; // rax
CHAR16 *Destination; // rcx
unsigned int n24_2; // r12d
__int64 v10; // r14
__int64 v11; // rbp
__int64 v12; // r13
__int64 v13; // rbx
char *v14; // rax
__int64 v15; // r15
__int64 v16; // [rsp+50h] [rbp+8h] BYREF
n24_1 = n24_3; /*0x4988*/
Source = Source_1; /*0x498b*/
HiiLibGetDefaultString((__int64)Private); /*0x4991*/
n24 = 24; /*0x4996*/
if ( n24_1 > 0x18 ) /*0x499d*/
n24_1 = 24; /*0x499d*/
HIDWORD(Private->HiiLibFunctions[11]) = 0; /*0x49a0*/
if ( Source && n24_1 ) /*0x49af*/
{
Private->HiiLibFunctions[12] = (void *)MemAllocPages(8LL * n24_1); /*0x49c6*/
Private->HiiLibFunctions[13] = (void *)MemAllocPages(56LL * n24_1); /*0x49d9*/
v7 = (void *)MemAllocPages(4LL * n24_1); /*0x49dd*/
Destination = (CHAR16 *)Private->HiiLibFunctions[12]; /*0x49e2*/
Private->HiiLibFunctions[14] = v7; /*0x49e6*/
if ( Destination && Private->HiiLibFunctions[13] && v7 ) /*0x4a04*/
{
StrnCpy(Destination, Source, 8LL * n24_1); /*0x4a10*/
n24_2 = 0; /*0x4a15*/
LODWORD(Private->HiiLibFunctions[11]) = n24_1; /*0x4a18*/
v10 = 0; /*0x4a23*/
v11 = 0; /*0x4a26*/
v12 = 0; /*0x4a28*/
v13 = 0; /*0x4a2b*/
do /*0x4aec*/
{
MemZero((_BYTE *)Private->HiiLibFunctions[13] + v13, 0, 56); /*0x4a3b*/
*((_BYTE *)Private->HiiLibFunctions[13] + v11) = 1; /*0x4a44*/
v14 = (char *)Private->HiiLibFunctions[12]; /*0x4a49*/
v15 = *(_QWORD *)&v14[v12]; /*0x4a4d*/
if ( v15 /*0x4a7b*/
&& !HiiLibGetStringId((__int64)Private, *(_QWORD *)&v14[v12], (__int64)&unk_27890, (__int64)&v16)
&& v16 )
{
if ( (*(__int64 (__fastcall **)(__int64, char *))(v16 + 8))(v16, (char *)Private->HiiLibFunctions[13] + v13) < 0 /*0x4a99*/
|| *((_BYTE *)Private->HiiLibFunctions[13] + v11) != 1 )
{
MemZero((_BYTE *)Private->HiiLibFunctions[13] + v13, 0, 56); /*0x4aa9*/
}
HiiLibFindString((__int64)Private, v15, (__int64)&unk_27890); /*0x4abb*/
}
RstFreeContext(Private); /*0x4ac6*/
++n24_2; /*0x4ad2*/
*(_DWORD *)((char *)Private->HiiLibFunctions[14] + v10) = n24; /*0x4ad5*/
v13 += 56; /*0x4ad9*/
v12 += 8; /*0x4add*/
v10 += 4; /*0x4ae1*/
v11 += 56; /*0x4ae5*/
}
while ( n24_2 < n24_1 ); /*0x4aec*/
}
else
{
return HiiLibGetDefaultString((__int64)Private); /*0x4af7*/
}
}
return n24; /*0x4b0b*/
}
// Function: RstQueryConfig @ 0x4b1c (0x6a bytes)
// Index: 103/906
EFI_STATUS __fastcall RstQueryConfig(RST_PRIVATE_DATA *Private)
{
EFI_STATUS result; // rax
__int64 n24; // [rsp+48h] [rbp+10h] BYREF
CHAR16 *Source; // [rsp+50h] [rbp+18h] BYREF
n24 = 0; /*0x4b22*/
HiiLibGetDefaultString(Private); /*0x4b2b*/
result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, __int64 *, CHAR16 **))(qword_58070 + 312))( /*0x4b54*/
2,
&unk_27890,
0,
&n24,
&Source);
if ( !result ) /*0x4b5d*/
{
RstCallbackHandler(Private); /*0x4b6c*/
return (*(EFI_STATUS (__fastcall **)(CHAR16 *))(qword_58070 + 72))(Source); /*0x4b7d*/
}
return result; /*0x4b80*/
}
// Function: RstFormCallback @ 0x4b88 (0x83 bytes)
// Index: 104/906
EFI_STATUS __fastcall RstFormCallback(RST_DEVICE *Device)
{
unsigned __int64 v2; // rbx
EFI_STATUS result; // rax
unsigned __int64 v4; // [rsp+48h] [rbp+10h] BYREF
__int64 v5; // [rsp+50h] [rbp+18h] BYREF
RstQueryConfig((RST_PRIVATE_DATA *)Device); /*0x4b95*/
v2 = 0; /*0x4b9f*/
v4 = 0; /*0x4bbf*/
result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, unsigned __int64 *, __int64 *))(qword_58070 + 312))( /*0x4bc4*/
2,
&unk_278A0,
0,
&v4,
&v5);
if ( !result ) /*0x4bcd*/
{
if ( v4 ) /*0x4bd4*/
{
do /*0x4bef*/
{
RstAllocContext728((RST_PRIVATE_DATA *)Device); /*0x4be2*/
++v2; /*0x4be7*/
}
while ( v2 < v4 ); /*0x4bef*/
}
return (*(__int64 (__fastcall **)(__int64))(qword_58070 + 72))(v5); /*0x4bfd*/
}
return result; /*0x4c05*/
}
// Function: RstFormCallbackInit @ 0x4c0c (0x2d bytes)
// Index: 105/906
char __fastcall RstFormCallbackInit(__int64 a1)
{
if ( !*(_QWORD *)(a1 + 40) ) /*0x4c12*/
*(_QWORD *)(a1 + 40) = Assert_85(0, 0); /*0x4c25*/
RstFormCallback(a1); /*0x4c2c*/
return 1; /*0x4c33*/
}
// Function: RstCreateNewContext @ 0x4c3c (0x69 bytes)
// Index: 106/906
_QWORD *__fastcall RstCreateNewContext(_QWORD *a1, __int64 a2, RST_PRIVATE_DATA *Private)
{
CfgArrayAllocBlock(a1, (__int64)Private); /*0x4c4f*/
*a1 = off_231B0; /*0x4c6c*/
a1[23] = a2; /*0x4c6f*/
a1[24] = 0; /*0x4c76*/
a1[25] = 0; /*0x4c7d*/
a1[78] = 0; /*0x4c84*/
a1[45] = 0; /*0x4c8b*/
MemZero((_BYTE *)a1 + 368, 0, 256); /*0x4c92*/
return a1; /*0x4c9f*/
}
// Function: RstNullSub2 @ 0x4ca8 (0x3 bytes)
// Index: 107/906
char RstNullSub2()
{
return 0; /*0x4caa*/
}
// Function: RstNullSub @ 0x4cac (0xb bytes)
// Index: 108/906
bool __fastcall RstNullSub(__int64 a1, __int64 a2)
{
return a2 == *(_QWORD *)(a1 + 184); /*0x4cb6*/
}
// Function: RstFormEntry @ 0x4cb8 (0x3e2 bytes)
// Index: 109/906
RST_FORM_ENTRY *__fastcall RstFormEntry(RST_DEVICE *Device)
{
_BYTE *FormEntry_1; // rax
uint8_t *v4; // r8
__int64 n3; // r9
__int64 v6; // rdx
__int64 v7; // rdx
uint8_t *v8; // r8
__int64 n8; // r9
UINTN v10; // rax
char *FormEntry; // rcx
UINTN v12; // rax
char *FormEntry_2; // rcx
UINTN v14; // rax
unsigned __int8 Length; // al
RST_FORM_ENTRY *v16; // rdi
UINTN v17; // rax
UINTN v18; // rax
CHAR16 i_1[12]; // [rsp+20h] [rbp-58h] BYREF
CHAR16 i[28]; // [rsp+38h] [rbp-40h] BYREF
if ( Device->FormEntry ) /*0x4cc7*/
return 0; /*0x4cd6*/
FormEntry_1 = (_BYTE *)MemAllocPages(116); /*0x4ce3*/
Device->FormEntry = FormEntry_1; /*0x4ce8*/
if ( !FormEntry_1 ) /*0x4cf2*/
return (RST_FORM_ENTRY *)0x8000000000000009LL; /*0x4cf2*/
MemZero(FormEntry_1, 0, 116); /*0x4d0b*/
*(_QWORD *)((char *)Device->FormEntry + 28) = Device->reserved_090[152]; /*0x4d1f*/
*(_QWORD *)((char *)Device->FormEntry + 36) = Device->reserved_090[153]; /*0x4d31*/
*(_QWORD *)((char *)Device->FormEntry + 44) = Device->reserved_090[159]; /*0x4d43*/
*((_QWORD *)Device->FormEntry + 2) = Device->reserved_090[158]; /*0x4d55*/
*((_DWORD *)Device->FormEntry + 6) = *(_DWORD *)&Device->reserved_090[154]; /*0x4d66*/
v4 = &Device->reserved_090[193]; /*0x4d80*/
n3 = 3; /*0x4d8a*/
*(_QWORD *)Device->FormEntry = ((unsigned __int64)*(unsigned __int16 *)&Device->reserved_090[161] >> 4) & 0xF; /*0x4d8e*/
*((_WORD *)Device->FormEntry + 26) = *(_WORD *)&Device->reserved_090[213]; /*0x4d9f*/
*((_QWORD *)Device->FormEntry + 1) = ((unsigned __int64)*(unsigned __int16 *)&Device->reserved_090[161] >> 8) & 3; /*0x4db8*/
*(_QWORD *)((char *)Device->FormEntry + 70) = *(unsigned int *)&Device->reserved_090[82] /*0x4dd7*/
| ((unsigned __int64)*(unsigned __int16 *)&Device->reserved_090[80] << 32);
v6 = 0; /*0x4df0*/
*(_WORD *)((char *)Device->FormEntry + 83) = (*(_WORD *)&Device->reserved_090[161] >> 10) & 0xF; /*0x4df2*/
*(_QWORD *)((char *)Device->FormEntry + 85) = *(_QWORD *)&Device->reserved_090[48]; /*0x4e04*/
*(_DWORD *)((char *)Device->FormEntry + 78) = *(_DWORD *)&Device->reserved_090[72]; /*0x4e15*/
*(_WORD *)((char *)Device->FormEntry + 93) = *(_WORD *)&Device->reserved_090[187]; /*0x4e26*/
*(_WORD *)((char *)Device->FormEntry + 95) = *(_WORD *)&Device->reserved_090[189]; /*0x4e38*/
*(_WORD *)((char *)Device->FormEntry + 97) = *(_WORD *)&Device->reserved_090[191]; /*0x4e4a*/
do /*0x4e66*/
{
*((_BYTE *)Device->FormEntry + ++v6 + 98) = *v4++; /*0x4e5b*/
--n3; /*0x4e62*/
}
while ( n3 ); /*0x4e66*/
v7 = 0; /*0x4e75*/
v8 = &Device->reserved_090[197]; /*0x4e77*/
n8 = 8; /*0x4e7e*/
*((_BYTE *)Device->FormEntry + 102) = Device->reserved_090[196]; /*0x4e82*/
do /*0x4e9d*/
{
*((_BYTE *)Device->FormEntry + ++v7 + 102) = *v8++; /*0x4e92*/
--n8; /*0x4e99*/
}
while ( n8 ); /*0x4e9d*/
*((_BYTE *)Device->FormEntry + 111) = Device->reserved_090[205]; /*0x4eb0*/
RstStringTrimCopy(i_1, 21, (const CHAR16 *)&Device->reserved_090[92], 0x14u); /*0x4ec5*/
RstStringTrimCopy(i, 41, (const CHAR16 *)&Device->reserved_090[112], 0x28u); /*0x4edd*/
v10 = AsciiStrLen((const CHAR8 *)i_1); /*0x4ee7*/
*(_QWORD *)((char *)Device->FormEntry + 54) = MemAllocPages(2 * v10 + 2); /*0x4efd*/
FormEntry = (char *)Device->FormEntry; /*0x4f01*/
if ( !*(_QWORD *)(FormEntry + 54) ) /*0x4f08*/
{
LABEL_10:
MemZeroThenFree(FormEntry, 116); /*0x4f0f*/
return (RST_FORM_ENTRY *)0x8000000000000009LL; /*0x4cfe*/
}
v12 = AsciiStrLen((const CHAR8 *)i); /*0x4f21*/
*(_QWORD *)((char *)Device->FormEntry + 62) = MemAllocPages(2 * v12 + 2); /*0x4f37*/
FormEntry_2 = (char *)Device->FormEntry; /*0x4f3b*/
if ( !*(_QWORD *)(FormEntry_2 + 62) ) /*0x4f42*/
{
v14 = StrLen(*(const CHAR16 **)(FormEntry_2 + 54)); /*0x4f4d*/
MemZeroThenFree(*(_BYTE **)((char *)Device->FormEntry + 54), v14); /*0x4f60*/
FormEntry = (char *)Device->FormEntry; /*0x4f65*/
goto LABEL_10; /*0x4f6c*/
}
FormEntry_2[112] = Device->reserved_090[206]; /*0x4f77*/
*((_BYTE *)Device->FormEntry + 113) = Device->reserved_090[207]; /*0x4f87*/
*((_BYTE *)Device->FormEntry + 114) = Device->reserved_090[208]; /*0x4f97*/
*((_BYTE *)Device->FormEntry + 115) = Device->reserved_090[209]; /*0x4fa7*/
Assert_9(i_1, *(_QWORD *)((char *)Device->FormEntry + 54), 0x14u); /*0x4fba*/
Assert_9(i, *(_QWORD *)((char *)Device->FormEntry + 62), 0x28u); /*0x4fd5*/
Length = StrLenA(i_1); /*0x4fdf*/
*((_BYTE *)Device->FormEntry + 82) = RstDeviceNameExists(i_1, Length); /*0x4fff*/
v16 = (RST_FORM_ENTRY *)(*(__int64 (__fastcall **)(uint8_t *, void *, _QWORD, void *))(qword_58070 + 128))( /*0x5020*/
&Device->reserved_090[40],
&unk_278D0,
0,
Device->FormEntry);
if ( (__int64)v16 < 0 ) /*0x5026*/
{
v17 = StrLen(*(const CHAR16 **)((char *)Device->FormEntry + 62)); /*0x5033*/
MemZeroThenFree(*(_BYTE **)((char *)Device->FormEntry + 62), v17); /*0x5046*/
v18 = StrLen(*(const CHAR16 **)((char *)Device->FormEntry + 54)); /*0x5056*/
MemZeroThenFree(*(_BYTE **)((char *)Device->FormEntry + 54), v18); /*0x5069*/
MemZeroThenFree((_BYTE *)Device->FormEntry, 116); /*0x5078*/
Device->FormEntry = 0; /*0x507d*/
}
return v16; /*0x5095*/
}
// Function: RstProcessAction @ 0x509c (0xc7 bytes)
// Index: 110/906
__int64 __fastcall RstProcessAction(__int64 a1)
{
__int64 v3; // rbx
UINTN v4; // rax
UINTN v5; // rax
if ( !*(_QWORD *)(a1 + 360) ) /*0x50a6*/
return 0x8000000000000003uLL; /*0x50b5*/
v3 = (*(__int64 (__fastcall **)(_QWORD, void *))(qword_58070 + 144))(*(_QWORD *)(a1 + 184), &unk_278D0); /*0x50df*/
if ( !v3 || v3 == 0x800000000000000EuLL ) /*0x50f4*/
{
v4 = StrLen(*(const CHAR16 **)(*(_QWORD *)(a1 + 360) + 62LL)); /*0x5101*/
MemZeroThenFree(*(_BYTE **)(*(_QWORD *)(a1 + 360) + 62LL), v4); /*0x5114*/
v5 = StrLen(*(const CHAR16 **)(*(_QWORD *)(a1 + 360) + 54LL)); /*0x5124*/
MemZeroThenFree(*(_BYTE **)(*(_QWORD *)(a1 + 360) + 54LL), v5); /*0x5137*/
MemZeroThenFree(*(_BYTE **)(a1 + 360), 116); /*0x5148*/
*(_QWORD *)(a1 + 360) = 0; /*0x514d*/
}
return v3; /*0x515d*/
}
// Function: RstReturnFail @ 0x5164 (0x8 bytes)
// Index: 111/906
__int64 __fastcall RstReturnFail(__int64 a1)
{
return *(_QWORD *)(a1 + 360); /*0x516b*/
}
// Function: RstReturnInvalid @ 0x516c (0x8 bytes)
// Index: 112/906
void __fastcall RstReturnInvalid(__int64 a1, __int64 a2)
{
*(_QWORD *)(a1 + 192) = a2; /*0x516c*/
}
// Function: RstCheckCondition @ 0x5174 (0x38 bytes)
// Index: 113/906
__int64 __fastcall RstCheckCondition(__int64 *a1)
{
__int64 result; // rax
if ( a1[78] ) /*0x517a*/
{
result = HiiLibFindString(a1[2], a1[23], (__int64)&unk_278F0); /*0x5199*/
a1[78] = 0; /*0x519e*/
}
return result; /*0x51a6*/
}
// Function: RstExtractConfig @ 0x51ac (0x36 bytes)
// Index: 114/906
__int64 __fastcall RstExtractConfig(__int64 a1, __int64 a2)
{
__int64 result; // rax
__int64 v3; // [rsp+38h] [rbp+10h] BYREF
v3 = a2; /*0x51ac*/
if ( *(_QWORD *)(a1 + 624) ) /*0x51b5*/
return (*(__int64 (__fastcall **)(__int64 *, void *, _QWORD))(qword_58070 + 128))(&v3, &unk_278E0, 0); /*0x51d7*/
return result; /*0x51dd*/
}
// Function: RstRouteConfig @ 0x51e4 (0x2f bytes)
// Index: 115/906
__int64 __fastcall RstRouteConfig(__int64 a1, __int64 a2)
{
__int64 result; // rax
result = a2; /*0x51ef*/
if ( *(_QWORD *)(a1 + 624) ) /*0x51e8*/
return (*(__int64 (__fastcall **)(__int64, void *))(qword_58070 + 144))(a2, &unk_278E0); /*0x5208*/
return result; /*0x520e*/
}
// Function: RstSubmitForm @ 0x5214 (0x78 bytes)
// Index: 116/906
__int64 __fastcall RstSubmitForm(__int64 *a1)
{
__int64 result; // rax
__int64 String; // rdi
result = RstProcessAction((__int64)a1); /*0x5221*/
if ( result != 0x800000000000000FuLL && result != 0x8000000000000002uLL ) /*0x5242*/
{
String = HiiLibFindString(a1[2], a1[23], (__int64)&unk_278A0); /*0x525b*/
if ( String >= 0 ) /*0x5261*/
{
a1[25] = 0; /*0x5263*/
String = RstCallVtableEntry((__int64)a1); /*0x5273*/
}
RstCheckCondition(a1); /*0x5279*/
return String; /*0x527e*/
}
return result; /*0x5286*/
}
// Function: RstReadWriteConfig @ 0x528c (0xd3 bytes)
// Index: 117/906
__int64 __fastcall RstReadWriteConfig(__int64 a1, int a2, __int64 a3, unsigned __int64 a4, __int64 a5)
{
__int64 v5; // rsi
__int64 v6; // r12
__int64 v8; // rbx
v5 = *(_QWORD *)(a1 + 200); /*0x52a5*/
v6 = *(_QWORD *)(v5 + 8); /*0x52b4*/
v8 = 0x8000000000000003uLL; /*0x52bd*/
if ( !a5 || a4 / *(unsigned int *)(v6 + 12) + a3 - 1 > *(_QWORD *)(v6 + 24) ) /*0x52e3*/
return 0x8000000000000002uLL; /*0x533a*/
if ( !a4 ) /*0x52e8*/
return 0; /*0x52ea*/
if ( a4 % *(unsigned int *)(v6 + 12) ) /*0x52d6*/
return 0x8000000000000004uLL; /*0x52f3*/
if ( v5 ) /*0x5302*/
{
if ( a2 ) /*0x5313*/
{
v8 = (*(__int64 (__fastcall **)(__int64, _QWORD, __int64, unsigned __int64, __int64))(v5 + 32))(v5, 0, a3, a4, a5); /*0x5320*/
if ( v8 >= 0 ) /*0x5326*/
(*(void (__fastcall **)(_QWORD))(*(_QWORD *)(a1 + 200) + 40LL))(*(_QWORD *)(a1 + 200)); /*0x5332*/
}
else
{
return (*(__int64 (__fastcall **)(__int64, _QWORD, __int64, unsigned __int64, __int64))(v5 + 24))( /*0x5318*/
v5,
0,
a3,
a4,
a5);
}
}
return v8; /*0x5358*/
}
// Function: RstConfigRead @ 0x5360 (0x2a bytes)
// Index: 118/906
__int64 __fastcall RstConfigRead(__int64 a1)
{
__int64 result; // rax
result = 0x8000000000000003uLL; /*0x536c*/
if ( *(_QWORD *)(a1 + 200) ) /*0x5364*/
return (*(__int64 (__fastcall **)(_QWORD))(*(_QWORD *)(a1 + 200) + 16LL))(*(_QWORD *)(a1 + 200)); /*0x5382*/
return result; /*0x5385*/
}
// Function: RstConfigWrite @ 0x538c (0x1e bytes)
// Index: 119/906
__int64 __fastcall RstConfigWrite(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
return RstReadWriteConfig(a1, 1, a2, a3, a4); /*0x53a5*/
}
// Function: RstConfigReadVar @ 0x53ac (0x1b bytes)
// Index: 120/906
__int64 __fastcall RstConfigReadVar(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
return RstReadWriteConfig(a1, 0, a2, a3, a4); /*0x53c2*/
}
// Function: RstContextCallbackCall @ 0x53c8 (0x2a bytes)
// Index: 121/906
__int64 __fastcall RstContextCallbackCall(__int64 a1)
{
__int64 result; // rax
result = 0x8000000000000003uLL; /*0x53d4*/
if ( *(_QWORD *)(a1 + 200) ) /*0x53cc*/
return (*(__int64 (__fastcall **)(_QWORD))(*(_QWORD *)(a1 + 200) + 40LL))(*(_QWORD *)(a1 + 200)); /*0x53ea*/
return result; /*0x53ed*/
}
// Function: RstAuthCheckState @ 0x53f4 (0xc bytes)
// Index: 122/906
bool __fastcall RstAuthCheckState(__int64 a1)
{
return (*(_BYTE *)(a1 + 355) & 8) != 0; /*0x53ff*/
}
// Function: RstNullSub @ 0x5400 (0x3 bytes)
// Index: 123/906
void __fastcall RstNullSub()
{
; /*0x5400*/
}
// Function: RstAuthAssertContext @ 0x5404 (0x12 bytes)
// Index: 124/906
__int64 __fastcall RstAuthAssertContext(_QWORD *NewContext)
{
return Assert_137((__int64)NewContext, (__int64)(NewContext + 26), 36220);
}
// Function: RstFormatSerialNumber @ 0x5418 (0xe9 bytes)
// Index: 125/906
__int64 __fastcall RstFormatSerialNumber(__int64 a1, __int64 a2, CHAR8 **a3, double a4)
{
CHAR8 *StartOfBuffer; // rdi
unsigned __int64 v7; // rbx
CHAR16 *v8; // rbx
CHAR16 i[12]; // [rsp+30h] [rbp-78h] BYREF
_BYTE i_1[32]; // [rsp+48h] [rbp-60h] BYREF
CHAR16 i_2[28]; // [rsp+68h] [rbp-40h] BYREF
StartOfBuffer = (CHAR8 *)(a1 + 368); /*0x542f*/
if ( !*(_WORD *)(a1 + 368) ) /*0x543c*/
{
v7 = *(unsigned int *)(a1 + 226) | ((unsigned __int64)*(unsigned __int16 *)(a1 + 224) << 32); /*0x5461*/
MemZero(i_1, 0, 32); /*0x5464*/
RstFormatDiskSize((__int64)i_1, v7, *(_DWORD *)(a1 + 216), 1, 0); /*0x5480*/
v8 = RstStringTrimCopy(i, 21, (const CHAR16 *)(a1 + 236), 0x14u); /*0x54b4*/
RstStringTrimCopy(i_2, 41, (const CHAR16 *)(a1 + 256), 0x28u); /*0x54b7*/
HiiCfgArraySet(StartOfBuffer, 0x100u, "%a SN:%a, %a", a4, *(double *)&v8, COERCE_DOUBLE(i_1)); /*0x54dd*/
}
*a3 = StartOfBuffer; /*0x54ea*/
return 0; /*0x54fc*/
}
// Function: RstValidate @ 0x5504 (0x4a bytes)
// Index: 126/906
unsigned __int64 __fastcall RstValidate(__int64 a1, __int64 a2, CHAR16 *i, unsigned __int64 n0x14)
{
if ( !a2 || !i || n0x14 <= 0x14 ) /*0x551b*/
return 0x8000000000000002uLL; /*0x553f*/
RstStringTrimCopy(i, n0x14, (const CHAR16 *)(a1 + 236), 0x14u); /*0x5536*/
return 0; /*0x5549*/
}
// Function: RstCheckSecureBoot @ 0x5550 (0x86 bytes)
// Index: 127/906
char __fastcall RstCheckSecureBoot(__int64 a1, int n5)
{
__int64 v4; // rax
char v5; // bl
int n5_1; // eax
__int64 v8; // [rsp+30h] [rbp+8h] BYREF
__int64 v9; // [rsp+40h] [rbp+18h] BYREF
v4 = RstUefiReadVariable(*(_QWORD *)(a1 + 184)); /*0x556b*/
v5 = 0; /*0x5570*/
if ( !v4 ) /*0x5575*/
return 0; /*0x5575*/
v8 = v4; /*0x5577*/
if ( (*(__int64 (__fastcall **)(void *, __int64 *, __int64 *))(qword_58070 + 184))(&unk_27890, &v8, &v9) < 0 || !v9 ) /*0x55a7*/
return 0; /*0x55c4*/
n5_1 = HiiLibFreeStringArray(*(_QWORD *)(a1 + 16), v9); /*0x55ad*/
if ( !n5_1 || !n5 || n5_1 == n5 ) /*0x55bc*/
return 1; /*0x55be*/
return v5; /*0x55d0*/
}
// Function: RstReturnSuccess @ 0x55d8 (0x10 bytes)
// Index: 128/906
__int64 __fastcall RstReturnSuccess(_QWORD *NewContext)
{
return HiiLibGetAllStrings(NewContext[2], NewContext[23]);
}
// Function: RstStringAllocCopy @ 0x55e8 (0x2f bytes)
// Index: 129/906
_QWORD *__fastcall RstStringAllocCopy(_QWORD *a1, char a2)
{
CfgArrayGetBlock(a1); /*0x55f7*/
if ( (a2 & 1) != 0 ) /*0x55ff*/
MemFree(); /*0x5604*/
return a1; /*0x5611*/
}
// Function: RsteDeviceAlloc @ 0x5618 (0x1fd bytes)
// Index: 130/906
void *__fastcall RsteDeviceAlloc(RST_DEVICE *Device)
{
__int64 v1; // rdx
void *v3; // rbx
__int64 (__fastcall **NameString_1)(_QWORD, uint8_t *, int *); // rcx
__int64 v5; // rbx
int n512; // eax
uint32_t BlockSize; // r8d
char v8; // al
unsigned __int64 v9; // rcx
__int64 v10; // rax
uint64_t LastBlock; // rcx
uint64_t PhysicalSectorSize; // rax
int n151; // [rsp+30h] [rbp+8h] BYREF
__int64 (__fastcall **NameString)(_QWORD, uint8_t *, int *); // [rsp+38h] [rbp+10h] BYREF
v1 = *(_QWORD *)&Device->reserved_090[40]; /*0x5622*/
v3 = (void *)0x8000000000000006LL; /*0x562c*/
if ( v1 ) /*0x5639*/
{
if ( HiiLibGetStringId((RST_PRIVATE_DATA *)Device->StringTable, v1, (__int64)&unk_278B0, (__int64)&NameString) ) /*0x564f*/
return (void *)0x800000000000000ELL; /*0x564f*/
if ( !NameString ) /*0x5662*/
return (void *)0x800000000000000ELL; /*0x5662*/
n151 = 151; /*0x5677*/
MemZero(&Device->reserved_090[64], 0, 151); /*0x567c*/
NameString_1 = NameString; /*0x5692*/
*(_DWORD *)&Device->reserved_090[64] = 1381192805; /*0x5695*/
*(_DWORD *)&Device->reserved_090[68] = 2; /*0x569f*/
v5 = (*NameString_1)(NameString_1, &Device->reserved_090[64], &n151); /*0x56bd*/
HiiLibFindString((RST_PRIVATE_DATA *)Device->StringTable, *(_QWORD *)&Device->reserved_090[40], (__int64)&unk_278B0); /*0x56c0*/
if ( v5 < 0 ) /*0x56c8*/
return (void *)0x800000000000000ELL; /*0x56c8*/
n512 = *(_DWORD *)&Device->reserved_090[72]; /*0x56ce*/
if ( n512 != 512 && n512 != 4096 ) /*0x56e0*/
return (void *)0x800000000000000ELL; /*0x56e0*/
if ( !HiiLibGetStringId( /*0x570d*/
(RST_PRIVATE_DATA *)Device->StringTable,
*(_QWORD *)&Device->reserved_090[40],
(__int64)&unk_278A0,
(__int64)&Device->reserved_090[56])
&& *(_QWORD *)&Device->reserved_090[56] )
{
BlockSize = *(_DWORD *)&Device->reserved_090[72]; /*0x5720*/
v8 = Device->reserved_090[211] >> 2; /*0x572e*/
v3 = 0; /*0x5731*/
v9 = (unsigned __int64)*(unsigned __int16 *)&Device->reserved_090[80] << 32; /*0x5733*/
Device->Flags = 0; /*0x5737*/
Device->BitfieldBytes[0] = v8 & 1; /*0x573e*/
v10 = *(unsigned int *)&Device->reserved_090[82]; /*0x5741*/
Device->BitfieldBytes[1] = 1; /*0x5747*/
LastBlock = v9 + v10 - 1; /*0x574b*/
PhysicalSectorSize = *(unsigned int *)&Device->reserved_090[86]; /*0x5750*/
Device->BitfieldBytes[2] = 0; /*0x5756*/
Device->PhysicalSectorSize = PhysicalSectorSize; /*0x5759*/
LODWORD(PhysicalSectorSize) = *(_DWORD *)&Device->reserved_090[76]; /*0x575d*/
Device->BitfieldBytes[3] = 0; /*0x5763*/
Device->BitfieldBytes[4] = 0; /*0x5769*/
Device->BlockSize = BlockSize; /*0x576c*/
Device->MediaId = 4; /*0x5770*/
Device->LastBlock = LastBlock; /*0x5777*/
Device->LogicalBlocksPerPhysical = (unsigned int)PhysicalSectorSize / BlockSize; /*0x577b*/
if ( RstDebugEnabled() && *(_DWORD *)&Device->reserved_090[76] % *(_DWORD *)&Device->reserved_090[72] ) /*0x5792*/
DebugAssert("RsteDevice.cpp", 0xE6u, "( m_idd.PhysicalSectorSize % m_idd.LogicalSectorSize ) == 0"); /*0x57af*/
if ( RstDebugEnabled() && !Device->LogicalBlocksPerPhysical ) /*0x57bd*/
DebugAssert("RsteDevice.cpp", 0xE7u, "mBlkMedia.LogicalBlocksPerPhysicalBlock != ( 0 )"); /*0x57d8*/
HiiLibGetStringId( /*0x57f6*/
(RST_PRIVATE_DATA *)Device->StringTable,
*(_QWORD *)&Device->reserved_090[40],
(__int64)&unk_278F0,
(__int64)&Device->NameString);
}
else
{
return (void *)0x800000000000000ELL; /*0x57fd*/
}
}
return v3; /*0x580f*/
}
// Function: RstInstallMultipleProtocols @ 0x5818 (0x5 bytes)
// Index: 131/906
// attributes: thunk
__int64 __fastcall RstInstallMultipleProtocols(__int64 a1)
{
return RstInstallProtocols(a1);
}
// Function: RstDevicePathGet @ 0x5820 (0xc bytes)
// Index: 132/906
EFI_STATUS __fastcall RstDevicePathGet()
{
return RstHelper_1114((__int64)&unk_27120);
}
// Function: RstDevicePathUpdate @ 0x582c (0xc bytes)
// Index: 133/906
EFI_STATUS __fastcall RstDevicePathUpdate()
{
return RstHelper_1308((__int64)&unk_27120);
}
// Function: RstInstallClass @ 0x5838 (0x64 bytes)
// Index: 134/906
RST_LIST_ENTRY *__fastcall RstInstallClass(RST_PRIVATE_DATA *Private, void *Context)
{
_QWORD *Vtable_1; // rax
void *Vtable; // r11
_QWORD *v7; // rax
Vtable_1 = (_QWORD *)MemAlloc(24); /*0x5854*/
Vtable = Vtable_1; /*0x5859*/
if ( !Vtable_1 ) /*0x585f*/
return (RST_LIST_ENTRY *)0xFFFFFFFFLL; /*0x5861*/
*Vtable_1 = 0; /*0x5866*/
Vtable_1[2] = Context; /*0x586a*/
Vtable_1[1] = *(_QWORD *)&Private->Version; /*0x5872*/
v7 = *(_QWORD **)&Private->Version; /*0x5876*/
if ( v7 ) /*0x587d*/
*v7 = Vtable; /*0x587f*/
if ( !Private->Vtable ) /*0x5882*/
Private->Vtable = Vtable; /*0x5888*/
*(_QWORD *)&Private->Version = Vtable; /*0x588b*/
return 0; /*0x5896*/
}
// Function: RstReturnOne @ 0x589c (0xb bytes)
// Index: 135/906
unsigned __int64 RstReturnOne()
{
return 0x8000000000000003uLL; /*0x58a6*/
}
// Function: RstReturnThree @ 0x58a8 (0x7 bytes)
// Index: 136/906
__int64 __fastcall RstReturnThree(__int64 a1)
{
return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 40LL))(a1);
}
// Function: RstCreateClass @ 0x58b0 (0x77 bytes)
// Index: 137/906
__int64 __fastcall RstCreateClass(__int64 a1, __int64 a2, RST_PRIVATE_DATA *Private)
{
*(_QWORD *)(a1 + 8) = a2; /*0x58b6*/
*(_BYTE *)(a1 + 16) = 0; /*0x58ba*/
*(_QWORD *)a1 = off_232D0; /*0x58c5*/
*(_QWORD *)(a1 + 24) = 0; /*0x58c8*/
*(_QWORD *)(a1 + 32) = 0; /*0x58cd*/
*(_QWORD *)(a1 + 40) = 0; /*0x58d2*/
*(_QWORD *)(a1 + 48) = Private; /*0x58df*/
*(_WORD *)(a1 + 56) = 256; /*0x58e3*/
RstInitBrowserCallbacks((_QWORD *)(a1 + 72), a1); /*0x58ee*/
*(_DWORD *)(a1 + 104) = 0; /*0x58f3*/
*(_DWORD *)(a1 + 108) = 0; /*0x58f7*/
*(_QWORD *)(a1 + 112) = 0; /*0x58fb*/
*(_QWORD *)(a1 + 120) = 0; /*0x5900*/
*(_QWORD *)(a1 + 128) = 0; /*0x5905*/
*(_BYTE *)(a1 + 136) = 0; /*0x5914*/
*(_QWORD *)a1 = off_23320; /*0x591e*/
return a1; /*0x5921*/
}
// Function: RstUefiProtocolInstall @ 0x5928 (0x73 bytes)
// Index: 138/906
EFI_STATUS __fastcall RstUefiProtocolInstall(RST_PRIVATE_DATA *Private)
{
void (__fastcall ***Class)(void *, _QWORD); // rbx
__int64 v3; // rax
Class = 0; /*0x593f*/
if ( !RstCheckAlreadyStarted((__int64)Private, 0, 0) ) /*0x593a*/
{
v3 = MemAlloc(144); /*0x5952*/
if ( v3 ) /*0x595a*/
Class = (void (__fastcall ***)(void *, _QWORD))RstCreateClass(v3, 0, (__int64)Private); /*0x5969*/
RstInstallClass((RST_PRIVATE_DATA *)&Private->Private_, Class); /*0x5976*/
(**Class)(Class, 0); /*0x5983*/
}
return 0x8000000000000003uLL; /*0x5995*/
}
// Function: RstHelper_599c @ 0x599c (0xf bytes)
// Index: 139/906
char __fastcall RstHelper_599c(__int64 a1, _QWORD *a2)
{
if ( !a2 ) /*0x599f*/
{
while ( 1 ) /*0x59a1*/
; /*0x59a1*/
}
return RstUefiProtocolGuid(a2);
}
// Function: RstUefiProtocolEntry @ 0x59ac (0x4f bytes)
// Index: 140/906
__int64 __fastcall RstUefiProtocolEntry(__int64 a1)
{
__int64 v2; // rbx
v2 = RstHiiPackageInstall(a1); /*0x59be*/
if ( v2 >= 0 ) /*0x59c4*/
HiiCreateEventEx((__int64)&dword_278C0, 8, (__int64)RstHelper_599c, a1, a1 + 728); /*0x59e8*/
return v2; /*0x59f5*/
}
// Function: RstHelper_59fc @ 0x59fc (0x22 bytes)
// Index: 141/906
__int64 RstHelper_59fc__int64 a1)
{
__int64 v1; // rcx
v1 = *(_QWORD *)(a1 + 704); /*0x5a00*/
if ( v1 ) /*0x5a0a*/
return HiiLibReturnZero(*(_QWORD *)(v1 + 16)); /*0x5a10*/
else
return 0; /*0x5a17*/
}
// Function: RstDeviceGetRaidLevelFromCtx @ 0x5a20 (0x22 bytes)
// Index: 142/906
__int64 __fastcall RstDeviceGetRaidLevelFromCtx(__int64 a1)
{
__int64 v1; // rcx
v1 = *(_QWORD *)(a1 + 704); /*0x5a24*/
if ( v1 ) /*0x5a2e*/
return RstGetUint108(*(_QWORD *)(v1 + 16)); /*0x5a34*/
else
return 0; /*0x5a3b*/
}
// Function: RstHelper_5a44 @ 0x5a44 (0x22 bytes)
// Index: 143/906
__int64 RstHelper_5a44__int64 a1, unsigned int a2)
{
__int64 v2; // rcx
v2 = *(_QWORD *)(a1 + 704); /*0x5a48*/
if ( v2 ) /*0x5a52*/
return HiiLibReturnOne(*(_QWORD *)(v2 + 16), a2); /*0x5a58*/
else
return 0; /*0x5a5f*/
}
// Function: RstHelper_5a68 @ 0x5a68 (0x22 bytes)
// Index: 144/906
__int64 RstHelper_5a68__int64 a1, unsigned int a2)
{
__int64 v2; // rcx
v2 = *(_QWORD *)(a1 + 704); /*0x5a6c*/
if ( v2 ) /*0x5a76*/
return HiiLibReturnFalse(*(_QWORD *)(v2 + 16), a2); /*0x5a7c*/
else
return 0; /*0x5a83*/
}
// Function: RstHelper_5a8c @ 0x5a8c (0x22 bytes)
// Index: 145/906
__int64 __fastcall RstHelper_5a8c(__int64 a1, unsigned int a2, const char *en)
{
__int64 v3; // rcx
v3 = *(_QWORD *)(a1 + 704); /*0x5a90*/
if ( v3 ) /*0x5a9a*/
return HiiLibGetStringFromPackage(*(_QWORD *)(v3 + 16), a2, (__int64)en); /*0x5aa0*/
else
return 0; /*0x5aa7*/
}
// Function: RstProtocolEfiCall @ 0x5ab0 (0xd bytes)
// Index: 146/906
__int64 __fastcall RstProtocolEfiCall(__int64 a1)
{
return (**(__int64 (__fastcall ***)(__int64))(a1 - 520))(a1 - 520);
}
// Function: RstProtocolEfiCall2 @ 0x5ac0 (0x31 bytes)
// Index: 147/906
__int64 __fastcall RstProtocolEfiCall2(__int64 a1, __int64 a2, __int64 a3)
{
if ( a1 && a2 && a3 ) /*0x5ad1*/
return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)(a1 - 568) + 8LL))(a1 - 568); /*0x5add*/
else
return 0x8000000000000002uLL; /*0x5ae2*/
}
// Function: RstProtocolEfiCall3 @ 0x5af4 (0x31 bytes)
// Index: 148/906
__int64 __fastcall RstProtocolEfiCall3(__int64 a1, __int64 a2, __int64 a3)
{
if ( a1 && a2 && a3 ) /*0x5b05*/
return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)(a1 - 592) + 8LL))(a1 - 592); /*0x5b11*/
else
return 0x8000000000000002uLL; /*0x5b16*/
}
// Function: RstInstallProtocols @ 0x5b28 (0x84 bytes)
// Index: 149/906
__int64 __fastcall RstInstallProtocols(__int64 a1)
{
return (*(__int64 (__fastcall **)(_QWORD, void *, __int64, void *, __int64, void *, __int64, void *, __int64, void *, __int64, _QWORD))(qword_58070 + 336))( /*0x5ba7*/
*(_QWORD *)(a1 + 624),
&unk_27740,
a1 + 520,
&unk_27770,
a1 + 568,
&unk_27760,
a1 + 592,
&unk_27820,
a1 + 616,
&unk_27900,
a1 + 8,
0);
}
// Function: RstHiiPackageInstall @ 0x5bac (0x84 bytes)
// Index: 150/906
__int64 __fastcall RstHiiPackageInstall(__int64 a1)
{
__int64 result; // rax
result = (*(__int64 (__fastcall **)(__int64, void *, __int64, void *, __int64, void *, __int64, void *, __int64, _QWORD))(qword_58070 + 328))( /*0x5c16*/
a1 + 624,
&unk_27740,
a1 + 520,
&unk_27770,
a1 + 568,
&unk_27760,
a1 + 592,
&unk_27820,
a1 + 616,
0);
if ( result >= 0 ) /*0x5c1f*/
return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 56LL))(a1); /*0x5c27*/
return result; /*0x5c2a*/
}
// Function: RstGetVariableUefi @ 0x5c30 (0x37 bytes)
// Index: 151/906
__int64 __fastcall RstGetVariableUefi(RST_PRIVATE_DATA *Private, __int16 *RstUefiV)
{
RstGetGlobalContext(); /*0x5c39*/
return (*(__int64 (__fastcall **)(__int16 *, void *, __int64))(RuntimeServices + 88))(RstUefiV, &unk_27178, 6); /*0x5c61*/
}
// Function: RstGetRaidVariable @ 0x5c68 (0xab bytes)
// Index: 152/906
__int64 __fastcall RstGetRaidVariable(RST_PRIVATE_DATA *Private, __int16 *VrocHwKeyId)
{
__int64 v2; // rbx
_BYTE *v5; // rdi
v2 = 0; /*0x5c7c*/
if ( !VrocHwKeyId ) /*0x5c84*/
return 0x8000000000000002uLL; /*0x5c86*/
v5 = (_BYTE *)MemAllocPages(7); /*0x5c9f*/
if ( v5 ) /*0x5ca5*/
{
if ( !RstGenerateXorPattern() ) /*0x5cc0*/
v2 = (*(__int64 (__fastcall **)(__int16 *, void *, __int64, __int64, _BYTE *))(RuntimeServices + 88))( /*0x5ced*/
VrocHwKeyId,
&unk_27178,
6,
6,
v5);
MemZeroThenFree(v5, 7); /*0x5cf6*/
return v2; /*0x5cfb*/
}
else
{
MemZeroThenFree(0, 7); /*0x5cac*/
return 0x8000000000000009uLL; /*0x5cb1*/
}
}
// Function: RstParseRaidVariable @ 0x5d14 (0x1fc bytes)
// Index: 153/906
EFI_STATUS __fastcall RstParseRaidVariable(RST_PRIVATE_DATA *Private)
{
const __m128i *v1; // rdx
CHAR16 *Source_2; // r8
CHAR16 *Source; // r13
const __m128i *v5; // r14
signed __int64 RaidVariable; // rbx
__int64 i; // rdi
unsigned __int16 Length; // ax
__m128i v9; // xmm5
const CHAR16 *Source_1; // rax
__int64 v11; // r8
__int64 (__fastcall **v12)(void *, __int64, _QWORD, __int64, void **); // r11
void (__fastcall **DeviceListHead)(void *); // rax
__int64 (__fastcall **v14)(void *, __int64); // rax
Private->field_2A8 = 0; /*0x5d31*/
Private->DeviceListHead = 0; /*0x5d39*/
Source = Source_2; /*0x5d48*/
v5 = v1; /*0x5d55*/
if ( (*(__int64 (__fastcall **)(void *, _QWORD, void **))(qword_58070 + 320))(&unk_27880, 0, &Private->field_2A8) >= 0 /*0x5d9f*/
&& Private->field_2A8
|| (RaidVariable = (*(__int64 (__fastcall **)(void *, _QWORD, void **))(qword_58070 + 320))(
&unk_277E0,
0,
&Private->DeviceListHead),
RaidVariable >= 0)
&& Private->DeviceListHead )
{
i = MemAllocPages(92); /*0x5dc2*/
MemZero((_BYTE *)i, 0, 92); /*0x5dc5*/
*(_DWORD *)i = 1229342037; /*0x5dd9*/
*(_DWORD *)(i + 4) = 92; /*0x5ddf*/
*(_BYTE *)(i + 8) = 1; /*0x5de2*/
StrnCpy((CHAR16 *)(i + 10), "INTEL", 5u); /*0x5de6*/
Length = StrLenA(Source); /*0x5dee*/
StrnCpy((CHAR16 *)(i + 16), Source, Length); /*0x5dfe*/
v9 = _mm_loadu_si128(v5); /*0x5e06*/
*(_WORD *)(i + 52) = 54; /*0x5e0b*/
*(__m128i *)(i + 36) = v9; /*0x5e0f*/
Source_1 = (const CHAR16 *)RstGetGlobalContext(); /*0x5e14*/
StrnCpy((CHAR16 *)(i + 54), Source_1, 0x26u); /*0x5e24*/
v12 = (__int64 (__fastcall **)(void *, __int64, _QWORD, __int64, void **))Private->field_2A8; /*0x5e29*/
if ( v12 ) /*0x5e37*/
{
LOBYTE(v11) = 1; /*0x5e43*/
RaidVariable = v12[1](Private->field_2A8, i, v11, 14, &Private->DeviceListTail); /*0x5e55*/
}
else
{
DeviceListHead = (void (__fastcall **)(void *))Private->DeviceListHead; /*0x5e5a*/
if ( DeviceListHead ) /*0x5e64*/
{
if ( Private->DeviceListTail ) /*0x5e66*/
DeviceListHead[1](Private->DeviceListHead); /*0x5e75*/
(*(void (__fastcall **)(void *, __int64, __int64, void **))Private->DeviceListHead)( /*0x5e92*/
Private->DeviceListHead,
i,
92,
&Private->DeviceListTail);
RstGetVariableUefi((__int64)Private, L"RstUefiV"); /*0x5e9e*/
RaidVariable = RstGetRaidVariable((__int64)Private, L"VrocHwKeyId"); /*0x5eb2*/
}
else
{
RaidVariable = 0x800000000000000EuLL; /*0x5eb7*/
}
}
if ( RaidVariable >= 0 ) /*0x5ec9*/
{
v14 = (__int64 (__fastcall **)(void *, __int64))Private->field_2A8; /*0x5ecb*/
if ( v14 ) /*0x5ed5*/
RaidVariable = v14[2](Private->field_2A8, 14); /*0x5ee0*/
}
MemZeroThenFree((_BYTE *)i, 92); /*0x5ee9*/
}
return RaidVariable; /*0x5f05*/
}
// Function: RstInstallHiiConfigAccess @ 0x5f10 (0x35 bytes)
// Index: 154/906
__int64 __fastcall RstInstallHiiConfigAccess(RST_PRIVATE_DATA *Private, char *VROC)
{
Private->HiiLibFunctions[0] = VROC; /*0x5f1a*/
return (*(__int64 (__fastcall **)(void **, void *, uint32_t *, _QWORD, _QWORD))(qword_58070 + 328))( /*0x5f40*/
&Private->ImageHandle,
&unk_27900,
&Private->Version,
0,
0);
}
// Function: RstSetVariableUefi @ 0x5f48 (0x41 bytes)
// Index: 155/906
__int64 __fastcall RstSetVariableUefi(RST_PRIVATE_DATA *Private, wchar_t *RstUefiF)
{
return (*(__int64 (__fastcall **)(wchar_t *, void *, __int64))(RuntimeServices + 88))(RstUefiF, &unk_27178, 2); /*0x5f84*/
}
// Function: VarInstall @ 0x5f8c (0x53 bytes)
// Index: 156/906
__int64 __fastcall VarInstall(
RST_PRIVATE_DATA *Private,
const __m128i *a2,
CHAR16 *RstUefiV,
__int16 *RstUefiV_1,
char *VROC,
wchar_t *RstUefiF)
{
RstParseRaidVariable(Private); /*0x5f9c*/
RstGetVariableUefi(Private, RstUefiV_1); /*0x5fa7*/
RstGetRaidVariable(Private, L"VrocHwKeyId"); /*0x5fb6*/
RstInstallHiiConfigAccess((__int64)Private, VROC); /*0x5fc3*/
return RstSetVariableUefi((__int64)Private, RstUefiF); /*0x5fd5*/
}
// Function: RstDriverBindingStart @ 0x5fe0 (0xf bytes)
// Index: 157/906
EFI_STATUS __fastcall RstDriverBindingStart(RST_PRIVATE_DATA *Private)
{
_BYTE *v1; // rdx
_QWORD *v2; // r8
return RstParseUnicodeString(v1, &i_, v2);
}
/* Orphan comments:
"en-US"
*/
// Function: RstMainDispatch @ 0x5ff0 (0x41 bytes)
// Index: 158/906
__int64 __fastcall RstMainDispatch(_QWORD *a1)
{
__int64 **i; // rbx
__int64 result; // rax
for ( i = (__int64 **)a1[88]; i; i = (__int64 **)*i ) /*0x5ffa*/
{
result = (*(__int64 (__fastcall **)(__int64 *))(*i[2] + 40))(i[2]); /*0x600d*/
if ( result < 0 ) /*0x6013*/
return result; /*0x6013*/
}
return (*(__int64 (__fastcall **)(_QWORD *))(*a1 + 24LL))(a1); /*0x602b*/
}
// Function: RstCheckAlreadyStarted @ 0x6034 (0x55 bytes)
// Index: 159/906
__int64 __fastcall RstCheckAlreadyStarted(RST_PRIVATE_DATA *Private, __int64 a2, char a3)
{
_QWORD *Private_; // rax
__int64 v5; // rbx
_QWORD *p_i; // [rsp+30h] [rbp+8h] BYREF
Private_ = Private->Private_; /*0x6041*/
if ( !Private_ ) /*0x6047*/
return 0; /*0x6049*/
p_i = Private->Private_; /*0x604d*/
while ( *(_QWORD *)(Private_[2] + 8LL) != a2 ) /*0x605a*/
{
Private_ = (_QWORD *)*Private_; /*0x605c*/
p_i = Private_; /*0x605f*/
if ( !Private_ ) /*0x6067*/
return 0; /*0x6067*/
}
v5 = Private_[2]; /*0x606b*/
if ( a3 ) /*0x6071*/
RstInstallConfigAccess(&Private->Private_, &p_i); /*0x607b*/
return v5; /*0x6083*/
}
// Function: RstFindDriverByHandle @ 0x608c (0x3c bytes)
// Index: 160/906
_QWORD *__fastcall RstFindDriverByHandle(__int64 a1, __int64 a2)
{
_QWORD *i; // rbx
_QWORD *result; // rax
for ( i = *(_QWORD **)(a1 + 704); i; i = (_QWORD *)*i ) /*0x6096*/
{
result = RstConfigAccessCallback(i[2], a2); /*0x60a9*/
if ( result ) /*0x60b1*/
return result; /*0x60b1*/
}
return 0; /*0x60c2*/
}
// Function: RstUefiProtocolGuid @ 0x60c8 (0xbd bytes)
// Index: 161/906
EFI_STATUS __fastcall RstUefiProtocolGuid(RST_PRIVATE_DATA *Private)
{
__int64 **i; // rbx
char v3; // di
__int64 **v4; // rbx
char v5; // al
EFI_STATUS result; // rax
__int64 **j; // rbx
MemZero(Private->GuidProtocolArea, 0, 48); /*0x60e2*/
for ( i = (__int64 **)qword_35418[88]; i; i = (__int64 **)*i ) /*0x60ee*/
(*(void (__fastcall **)(__int64 *))(*i[2] + 48))(i[2]); /*0x60fe*/
RstDriverContextInitialize(); /*0x6109*/
RstParseRaidVariable(Private); /*0x611f*/
v3 = 1; /*0x612b*/
v4 = (__int64 **)qword_35418[88]; /*0x612e*/
while ( v4 )
{
v5 = (*(__int64 (__fastcall **)(__int64 *))(*v4[2] + 56))(v4[2]); /*0x613e*/
v4 = (__int64 **)*v4; /*0x6141*/
v3 = v5 != 0 ? v3 : 0;
}
RstAuthInstallProtocol(); /*0x6150*/
for ( j = (__int64 **)qword_35418[88]; j; j = (__int64 **)*j ) /*0x615c*/
result = (*(__int64 (__fastcall **)(__int64 *))(*j[2] + 64))(j[2]); /*0x616c*/
LOBYTE(result) = v3; /*0x6177*/
return result; /*0x617f*/
}
// Function: RstComponentNameGetDriverName @ 0x6188 (0x6e bytes)
// Index: 162/906
__int64 __fastcall RstComponentNameGetDriverName(__int64 a1, __int64 a2, __int64 a3)
{
__int64 v3; // rdi
__int64 (__fastcall ***v6)(_QWORD, __int64); // rax
_QWORD *DriverByHandle; // rax
v3 = a1 - 520; /*0x6197*/
v6 = (__int64 (__fastcall ***)(_QWORD, __int64))RstCheckAlreadyStarted(a1 - 520, a2, 0); /*0x61aa*/
if ( v6 ) /*0x61b5*/
return (**v6)(v6, a3); /*0x61e4*/
DriverByHandle = RstFindDriverByHandle(v3, a2); /*0x61bd*/
if ( DriverByHandle ) /*0x61c8*/
return (*(__int64 (__fastcall **)(_QWORD *))(*DriverByHandle + 8LL))(DriverByHandle); /*0x61d9*/
else
return 0x8000000000000003uLL; /*0x61ca*/
}
// Function: RstComponentNameGetControllerName @ 0x61f8 (0x8b bytes)
// Index: 163/906
__int64 __fastcall RstComponentNameGetControllerName(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
__int64 v4; // rsi
__int64 v7; // rbx
__int64 Context_1; // rax
void *Context; // rdi
v4 = a1 - 520; /*0x6211*/
v7 = 0x8000000000000002uLL; /*0x6228*/
Context_1 = RstCheckAlreadyStarted((RST_PRIVATE_DATA *)(a1 - 520), a2, a3 == 0); /*0x6232*/
Context = (void *)Context_1; /*0x6237*/
if ( Context_1 ) /*0x623d*/
{
v7 = (*(__int64 (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)Context_1 + 8LL))(Context_1, a3, a4); /*0x624e*/
if ( v7 < 0 ) /*0x6254*/
RstInstallClass((RST_PRIVATE_DATA *)(v4 + 704), Context); /*0x6260*/
}
return v7; /*0x627c*/
}
// Function: RstComponentName2GetController @ 0x6284 (0x8b bytes)
// Index: 164/906
__int64 __fastcall RstComponentName2GetController(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
__int64 result; // rax
__int64 v8; // rax
_QWORD *v9; // rax
result = 0x8000000000000002uLL; /*0x6294*/
if ( a1 && a4 && a5 && a2 ) /*0x62b3*/
{
v8 = RstCheckAlreadyStarted(a1, a2, 0); /*0x62b8*/
if ( v8 ) /*0x62c3*/
{
if ( !a3 ) /*0x62c8*/
return (*(__int64 (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)v8 + 24LL))(v8, a4, a5); /*0x62f8*/
v9 = RstConfigAccessCallback(v8, a3); /*0x62cd*/
if ( v9 ) /*0x62d8*/
return (*(__int64 (__fastcall **)(_QWORD *, __int64, __int64))(*v9 + 64LL))(v9, a4, a5); /*0x62e8*/
}
return 0x8000000000000003uLL; /*0x62fa*/
}
return result; /*0x6309*/
}
// Function: RstGetLanguage @ 0x6310 (0x3f bytes)
// Index: 165/906
__int64 __fastcall RstGetLanguage(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
if ( a1 && a4 && a5 && a2 ) /*0x632b*/
return RstComponentName2GetController(a1 - 568, a2, a3, a4, a5); /*0x6339*/
else
return 0x8000000000000002uLL; /*0x6340*/
}
// Function: RstSetLanguage @ 0x6350 (0x3f bytes)
// Index: 166/906
__int64 __fastcall RstSetLanguage(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
if ( a1 && a4 && a5 && a2 ) /*0x636b*/
return RstComponentName2GetController(a1 - 592, a2, a3, a4, a5); /*0x6379*/
else
return 0x8000000000000002uLL; /*0x6380*/
}
// Function: RstHelper_6390 @ 0x6390 (0xc bytes)
// Index: 167/906
char RstHelper_6390()
{
return RstUefiProtocolGuid(qword_35418);
}
// Function: RstPrivateDataInit @ 0x639c (0x368 bytes)
// Index: 168/906
__int64 __fastcall RstPrivateDataInit(__int64 a1, EFI_HANDLE ImageHandle)
{
__int64 v4; // rax
char *_en_US_; // rax
*(_QWORD *)a1 = &off_23400; /*0x63b2*/
*(_QWORD *)(a1 + 704) = 0; /*0x63b5*/
*(_QWORD *)(a1 + 712) = 0; /*0x63bd*/
MemZero((_BYTE *)(a1 + 632), 0, 48); /*0x63d3*/
*(_QWORD *)(a1 + 624) = ImageHandle; /*0x63d8*/
qword_35418 = (_QWORD *)a1; /*0x63df*/
*(_QWORD *)(a1 + 696) = 0; /*0x63e6*/
*(_QWORD *)(a1 + 520) = RstProtocolEfiCall; /*0x63f9*/
*(_QWORD *)(a1 + 528) = RstComponentNameGetDriverName; /*0x6409*/
*(_QWORD *)(a1 + 536) = RstComponentNameGetControllerName; /*0x641d*/
v4 = *(_QWORD *)(a1 + 624); /*0x6424*/
*(_DWORD *)(a1 + 544) = 11; /*0x642b*/
*(_QWORD *)(a1 + 552) = v4; /*0x6435*/
*(_QWORD *)(a1 + 560) = v4; /*0x643c*/
*(_QWORD *)(a1 + 568) = RstProtocolEfiCall2; /*0x644a*/
*(_DWORD *)(a1 + 616) = 8; /*0x6458*/
*(_QWORD *)(a1 + 576) = RstGetLanguage; /*0x6462*/
_en_US_ = off_27138[0]; // "en-US" /*0x6469*/
*(_DWORD *)(a1 + 620) = (_DWORD)&loc_20009 + 1; /*0x6470*/
*(_QWORD *)(a1 + 584) = _en_US_; /*0x647a*/
*(_QWORD *)(a1 + 592) = RstProtocolEfiCall3; /*0x6488*/
*(_QWORD *)(a1 + 600) = RstSetLanguage; /*0x6496*/
*(char **)(a1 + 608) = off_27140[0]; // "eng" /*0x64a4*/
MemZero((_BYTE *)(a1 + 8), 0, 512); /*0x64ab*/
*(_QWORD *)(a1 + 24) = RstDeviceGetSlotCapacity; /*0x64b7*/
*(_DWORD *)(a1 + 8) = 16; /*0x64c2*/
*(_QWORD *)(a1 + 32) = Assert_121; /*0x64c9*/
*(_DWORD *)(a1 + 12) = 512; /*0x64d4*/
*(_QWORD *)(a1 + 40) = RstHelper_ce6c; /*0x64db*/
*(_QWORD *)(a1 + 48) = Assert_116; /*0x64e6*/
*(_QWORD *)(a1 + 56) = RstDeviceGetRaidLevelFromIndex; /*0x64f1*/
*(_QWORD *)(a1 + 64) = RstVolGetDeviceStatus; /*0x64fc*/
*(_QWORD *)(a1 + 72) = RstHelper_c8a8; /*0x6507*/
*(_QWORD *)(a1 + 80) = RstDeviceSetPropertyByIndex; /*0x6512*/
*(_QWORD *)(a1 + 88) = Assert_129; /*0x651d*/
*(_QWORD *)(a1 + 96) = RstRaidOpFindFailedDisk; /*0x6528*/
*(_QWORD *)(a1 + 104) = RstDeviceClearAndRelease; /*0x6533*/
*(_QWORD *)(a1 + 112) = RstDeviceClear; /*0x653e*/
*(_QWORD *)(a1 + 120) = RstDeviceGetLevel; /*0x6549*/
*(_QWORD *)(a1 + 128) = Assert_24; /*0x6554*/
*(_QWORD *)(a1 + 136) = RstVolCheckMemberSameLevel; /*0x6562*/
*(_QWORD *)(a1 + 144) = RstVolFindFirstMember; /*0x6570*/
*(_QWORD *)(a1 + 152) = RstVolFindSmallestCapacity; /*0x657e*/
*(_QWORD *)(a1 + 168) = RstHelper_be04; /*0x658c*/
*(_QWORD *)(a1 + 176) = RstRaidMemberRemove; /*0x659a*/
*(_QWORD *)(a1 + 184) = RstRaidMemberAdd; /*0x65a8*/
*(_QWORD *)(a1 + 192) = RstDeviceGetFirstWord; /*0x65b6*/
*(_QWORD *)(a1 + 200) = RstDeviceGetStatusByte; /*0x65c4*/
*(_QWORD *)(a1 + 208) = RstDeviceCountOnline; /*0x65d2*/
*(_QWORD *)(a1 + 216) = RstDeviceCheckAllReady; /*0x65e0*/
*(_QWORD *)(a1 + 160) = DxeInstall_3; /*0x65ee*/
*(_QWORD *)(a1 + 224) = RstDeviceStartOp; /*0x65fc*/
*(_QWORD *)(a1 + 232) = RstDeviceGetFeatureFlagBit; /*0x660a*/
*(_QWORD *)(a1 + 240) = RstGetGlobalContextPtr; /*0x6618*/
*(_QWORD *)(a1 + 248) = RstDeviceGetName; /*0x6626*/
*(_QWORD *)(a1 + 256) = RstDeviceGetProperty; /*0x6634*/
*(_QWORD *)(a1 + 488) = Assert_19; /*0x6642*/
*(_QWORD *)(a1 + 472) = Assert_107; /*0x6650*/
*(_QWORD *)(a1 + 480) = Assert_29; /*0x665e*/
*(_QWORD *)(a1 + 496) = RstDeviceGetFieldCount; /*0x666c*/
*(_QWORD *)(a1 + 504) = RstDeviceIsRaidLevel; /*0x667a*/
*(_QWORD *)(a1 + 336) = RstHelper_6390; /*0x6688*/
*(_QWORD *)(a1 + 424) = j_j_HiiLibGuidIsZero; /*0x6696*/
*(_QWORD *)(a1 + 432) = j_j_HiiBlockCompare; /*0x66a4*/
*(_QWORD *)(a1 + 440) = RstDeviceGetRaidLevelByIndex; /*0x66b2*/
*(_QWORD *)(a1 + 448) = RstDeviceCountConfigured; /*0x66c0*/
*(_QWORD *)(a1 + 456) = j_j_HiiLibGuidToStr; /*0x66ce*/
*(_QWORD *)(a1 + 464) = j_j_HiiBlockCompareConst; /*0x66dc*/
*(_QWORD *)(a1 + 512) = RstDeviceBlockSizeToStripe; /*0x66ea*/
RstValidateGlobalContext(); /*0x66f1*/
return a1; /*0x66fe*/
}
// Function: EfiDriverInit @ 0x6704 (0xe6 bytes)
// Index: 169/906
__int64 __fastcall EfiDriverInit(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
char v4; // al
__int64 SystemTable_1; // r8
::SystemTable = SystemTable; /*0x6714*/
v4 = RstDebugEnabled(); /*0x671b*/
SystemTable_1 = ::SystemTable; /*0x6720*/
if ( v4 && !::SystemTable ) /*0x672e*/
{
DebugAssert("EfiInit.cpp", 0x1Au, "gST != 0"); /*0x6743*/
SystemTable_1 = ::SystemTable; /*0x6748*/
}
qword_58070 = *(_QWORD *)(SystemTable_1 + 96); /*0x6753*/
RuntimeServices = *(_QWORD *)(SystemTable_1 + 88); /*0x675e*/
if ( RstDebugEnabled() && !qword_58070 ) /*0x6776*/
DebugAssert("EfiInit.cpp", 0x1Du, "gBS != 0"); /*0x678b*/
if ( RstDebugEnabled() && !RuntimeServices ) /*0x67a1*/
DebugAssert("EfiInit.cpp", 0x1Eu, "gRT != 0"); /*0x67b6*/
if ( RstDebugEnabled2() )
DebugPrintSerial(64, "efiDxeInitialize: Started\n");
return RstDriverInit2(ImageHandle, SystemTable); /*0x67e0*/
}
// Function: RstHelper_67ec @ 0x67ec (0xf bytes)
// Index: 170/906
unsigned __int64 __fastcall RstHelper_67ec(__int64 a1, _BYTE *a2, _QWORD *a3)
{
return RstParseUnicodeString(a2, &i__6, a3);
}
/* Orphan comments:
"en-US"
*/
// Function: RstInstallConfigAccess @ 0x67fc (0x34 bytes)
// Index: 171/906
__int64 __fastcall RstInstallConfigAccess(_QWORD *Private, _QWORD **p_i)
{
_QWORD *i; // r8
_QWORD *Private_1; // r9
__int64 v4; // rax
i = *p_i; /*0x67fc*/
Private_1 = Private; /*0x67ff*/
if ( (_QWORD *)*Private != *p_i ) /*0x6808*/
Private = (_QWORD *)i[1]; /*0x680a*/
*Private = **p_i; /*0x680e*/
v4 = i[1]; /*0x6811*/
if ( (_QWORD *)Private_1[1] == i ) /*0x6819*/
Private_1[1] = v4; /*0x681b*/
else
*(_QWORD *)(*i + 8LL) = v4; /*0x6824*/
return MemFree();
}
// Function: RstConfigAccessExtract @ 0x6830 (0x13c bytes)
// Index: 172/906
EFI_STATUS __fastcall RstConfigAccessExtract(RST_PRIVATE_DATA *Private)
{
unsigned __int64 v1; // rdx
__int64 v2; // r8
signed __int64 v3; // rdi
__int64 v4; // r12
unsigned __int64 v5; // rbp
void **Private_1; // rsi
_QWORD *i; // rbx
__int64 v8; // rax
_QWORD *v9; // rcx
void (__fastcall ***v10)(_QWORD, __int64); // rcx
_QWORD *j; // rbx
__int64 v12; // rax
_QWORD *v13; // rcx
void (__fastcall ***v14)(_QWORD, __int64); // rcx
_QWORD *p_i; // [rsp+48h] [rbp+10h] BYREF
v3 = 0; /*0x6842*/
v4 = v2; /*0x6844*/
v5 = v1; /*0x6847*/
if ( v1 ) /*0x684d*/
{
if ( v2 ) /*0x6856*/
{
Private_1 = &Private->HiiLibFunctions[1]; /*0x6867*/
for ( i = Private->HiiLibFunctions[1]; ; i = (_QWORD *)*i ) /*0x686b*/
{
p_i = i; /*0x68d7*/
if ( !i ) /*0x68df*/
break; /*0x68df*/
if ( (*(unsigned __int8 (__fastcall **)(_QWORD))(*(_QWORD *)i[2] + 104LL))(i[2]) ) /*0x6877*/
{
v8 = 0; /*0x687e*/
if ( v5 ) /*0x6883*/
{
v9 = (_QWORD *)i[2]; /*0x6885*/
while ( *(_QWORD *)(v4 + 8 * v8) != v9[1] ) /*0x6891*/
{
if ( ++v8 >= v5 ) /*0x6899*/
goto LABEL_15; /*0x6899*/
}
v3 = (*(__int64 (__fastcall **)(_QWORD *))(*v9 + 16LL))(v9); /*0x68a3*/
if ( v3 >= 0 ) /*0x68a9*/
{
v10 = (void (__fastcall ***)(_QWORD, __int64))i[2]; /*0x68ab*/
if ( v10 ) /*0x68b2*/
(**v10)(v10, 1); /*0x68bc*/
RstInstallConfigAccess(Private_1, &p_i); /*0x68c7*/
i = *Private_1; /*0x68cc*/
if ( !*Private_1 ) /*0x68cc*/
break; /*0x68cc*/
}
}
}
LABEL_15:
; /*0x68d4*/
}
for ( j = *Private_1; ; j = (_QWORD *)*j ) /*0x68e1*/
{
p_i = j; /*0x694c*/
if ( !j ) /*0x6954*/
break; /*0x6954*/
if ( !(*(unsigned __int8 (__fastcall **)(_QWORD))(*(_QWORD *)j[2] + 104LL))(j[2]) ) /*0x68ed*/
{
v12 = 0; /*0x68f4*/
if ( v5 ) /*0x68f9*/
{
v13 = (_QWORD *)j[2]; /*0x68fb*/
while ( *(_QWORD *)(v4 + 8 * v12) != v13[1] ) /*0x6907*/
{
if ( ++v12 >= v5 ) /*0x690f*/
goto LABEL_28; /*0x690f*/
}
v3 = (*(__int64 (__fastcall **)(_QWORD *))(*v13 + 16LL))(v13); /*0x6919*/
if ( v3 >= 0 ) /*0x691f*/
{
v14 = (void (__fastcall ***)(_QWORD, __int64))j[2]; /*0x6921*/
if ( v14 ) /*0x6928*/
(**v14)(v14, 1); /*0x6932*/
RstInstallConfigAccess(Private_1, &p_i); /*0x693c*/
j = *Private_1; /*0x6941*/
if ( !*Private_1 ) /*0x6941*/
break; /*0x6941*/
}
}
}
LABEL_28:
; /*0x6949*/
}
}
else
{
return 0x8000000000000002uLL; /*0x6858*/
}
}
return v3; /*0x6963*/
}
// Function: RstConfigAccessRoute @ 0x696c (0xa7 bytes)
// Index: 173/906
__int64 __fastcall RstConfigAccessRoute(__int64 a1)
{
_QWORD **v1; // rdi
__int64 v2; // rsi
__int64 **i; // rbx
_QWORD *j; // rbx
void (__fastcall ***v5)(_QWORD, __int64); // rcx
_QWORD *p_i; // [rsp+30h] [rbp+8h] BYREF
v1 = (_QWORD **)(a1 + 24); /*0x697b*/
v2 = 0; /*0x697f*/
for ( i = *(__int64 ***)(a1 + 24); i; i = (__int64 **)*i ) /*0x6981*/
{
if ( (*(unsigned __int8 (__fastcall **)(__int64 *))(*i[2] + 104))(i[2]) ) /*0x698d*/
v2 = (*(__int64 (__fastcall **)(__int64 *))(*i[2] + 16))(i[2]); /*0x699e*/
}
for ( j = *v1; j; j = (_QWORD *)*j ) /*0x69a9*/
{
if ( !(*(unsigned __int8 (__fastcall **)(_QWORD))(*(_QWORD *)j[2] + 104LL))(j[2]) ) /*0x69b5*/
v2 = (*(__int64 (__fastcall **)(_QWORD))(*(_QWORD *)j[2] + 16LL))(j[2]); /*0x69c6*/
}
while ( *v1 ) /*0x69fe*/
{
v5 = (void (__fastcall ***)(_QWORD, __int64))(*v1)[2]; /*0x69d3*/
p_i = *v1; /*0x69d7*/
if ( v5 ) /*0x69df*/
(**v5)(v5, 1); /*0x69e9*/
RstInstallConfigAccess(v1, &p_i); /*0x69f3*/
}
return v2; /*0x6a0d*/
}
// Function: RstConfigAccessCallback @ 0x6a14 (0x1e bytes)
// Index: 174/906
_QWORD *__fastcall RstConfigAccessCallback(__int64 a1, __int64 a2)
{
_QWORD *result; // rax
for ( result = *(_QWORD **)(a1 + 24); result; result = (_QWORD *)*result ) /*0x6a14*/
{
if ( *(_QWORD *)(result[2] + 8LL) == a2 ) /*0x6a22*/
return (_QWORD *)result[2]; /*0x6a2e*/
}
return result; /*0x6a2c*/
}
// Function: RstFormCallbackHandler @ 0x6a34 (0x7d bytes)
// Index: 175/906
__int64 __fastcall RstFormCallbackHandler(__int64 a1, RST_PRIVATE_DATA *Private, __int64 a3)
{
CfgArrayAllocBlock((_QWORD *)a1, Private); /*0x6a4c*/
*(_QWORD *)(a1 + 16) = Private; /*0x6a53*/
*(_WORD *)(a1 + 192) = 0; /*0x6a5c*/
*(_QWORD *)(a1 + 392) = 0; /*0x6a63*/
*(_QWORD *)(a1 + 400) = 0; /*0x6a6a*/
*(_QWORD *)(a1 + 408) = 0; /*0x6a71*/
*(_BYTE *)(a1 + 433) = 0; /*0x6a78*/
*(_BYTE *)(a1 + 432) = 0; /*0x6a7e*/
*(_QWORD *)(a1 + 424) = 0; /*0x6a84*/
*(_QWORD *)(a1 + 416) = 0; /*0x6a8b*/
*(_QWORD *)(a1 + 184) = a3; /*0x6a99*/
*(_QWORD *)a1 = off_23540; /*0x6aa3*/
return a1; /*0x6aab*/
}
// Function: RstNoop @ 0x6ab4 (0x3 bytes)
// Index: 176/906
char RstNoop()
{
return 1; /*0x6ab6*/
}
// Function: RstBeginSession @ 0x6ab8 (0x157 bytes)
// Index: 177/906
__int64 __fastcall RstBeginSession(_QWORD *a1)
{
__int64 v1; // rbp
__int64 v3; // rcx
unsigned int v4; // eax
int v5; // edi
unsigned __int64 v6; // rbx
unsigned __int64 v7; // r12
__int16 v8; // ax
__int64 v9; // rcx
CHAR16 *FirstString; // rcx
_BYTE *v11; // rax
char i; // [rsp+30h] [rbp-48h] BYREF
char n23; // [rsp+31h] [rbp-47h]
int v15; // [rsp+34h] [rbp-44h]
unsigned __int64 v16; // [rsp+38h] [rbp-40h]
v1 = 0; /*0x6ad1*/
if ( !a1[23] || !a1[2] ) /*0x6ae3*/
return 0x8000000000000007uLL; /*0x6bea*/
MemZero(&i, 0, 60); /*0x6af7*/
v3 = a1[23]; /*0x6afc*/
i = 3; /*0x6b03*/
v4 = RstDeviceRaidLevelBitsToIndex(v3); /*0x6b08*/
v5 = GuidCompare(v4); /*0x6b1b*/
v6 = (unsigned __int64)(unsigned __int16)RstProtocolRelease(a1[23]) << 32; /*0x6b2c*/
v7 = v6 | (unsigned int)RstCallGetUint108(a1[23]); /*0x6b3d*/
if ( v5 == 1 ) /*0x6b43*/
{
i = 3; /*0x6b48*/
n23 = 23; /*0x6b4d*/
Assert_57(&i, 0x10u); /*0x6b52*/
v16 = v7; /*0x6b57*/
v15 = 1; /*0x6b5c*/
}
else
{
n23 = 18; /*0x6b67*/
Assert_57(&i, 0xAu); /*0x6b6c*/
v8 = RstCallGetUint108(a1[23]); /*0x6b78*/
v9 = a1[23]; /*0x6b7d*/
LOWORD(v15) = v8; /*0x6b84*/
HIWORD(v15) = 0x8000; /*0x6b8e*/
LOWORD(v16) = (unsigned __int8)RstProtocolRelease(v9); /*0x6b9b*/
}
FirstString = *(CHAR16 **)(a1[2] + 40LL); /*0x6ba4*/
a1[3] = FirstString; /*0x6ba8*/
if ( FirstString ) /*0x6baf*/
{
v11 = Assert_85(FirstString, &i); /*0x6bb6*/
a1[3] = v11; /*0x6bc6*/
return (*(__int64 (__fastcall **)(_QWORD *, void *, _BYTE *, _QWORD, _QWORD))(qword_58070 + 328))( /*0x6be2*/
a1 + 1,
&unk_27730,
v11,
0,
0);
}
return v1; /*0x6c09*/
}
// Function: RstDeviceProbe @ 0x6c10 (0x7f bytes)
// Index: 178/906
__int64 __fastcall RstDeviceProbe(__int64 a1)
{
__int64 v2; // rcx
__int64 v4; // rax
__int64 v5; // rcx
int v6; // eax
v2 = *(_QWORD *)(a1 + 184); /*0x6c19*/
if ( !v2 ) /*0x6c23*/
return 0x8000000000000007uLL; /*0x6c25*/
*(_DWORD *)(a1 + 88) = 0; /*0x6c31*/
*(_BYTE *)(a1 + 92) = 0; /*0x6c35*/
*(_BYTE *)(a1 + 93) = 1; /*0x6c39*/
*(_BYTE *)(a1 + 94) = 0; /*0x6c3d*/
*(_BYTE *)(a1 + 95) = 0; /*0x6c41*/
*(_BYTE *)(a1 + 96) = 0; /*0x6c45*/
*(_DWORD *)(a1 + 104) = 4; /*0x6c49*/
v4 = RstCallGetData88(v2); /*0x6c50*/
v5 = *(_QWORD *)(a1 + 184); /*0x6c55*/
*(_QWORD *)(a1 + 112) = v4 - 1; /*0x6c5f*/
v6 = j_HiiLibReturnZero(v5); /*0x6c63*/
*(_QWORD *)(a1 + 120) = 0; /*0x6c68*/
*(_DWORD *)(a1 + 100) = v6; /*0x6c77*/
*(_DWORD *)(a1 + 128) = 1; /*0x6c7a*/
return RstHiiConfigRead(a1, (__int64)&unk_277C0); /*0x6c89*/
}
// Function: RstDeviceConfigure @ 0x6c90 (0x1a0 bytes)
// Index: 179/906
EFI_STATUS __fastcall RstDeviceConfigure(RST_DEVICE *Device)
{
uint8_t v2; // di
__int64 v4; // rax
_BYTE *i; // rcx
__int64 v6; // rcx
const CHAR8 *Intel; // rax
unsigned __int16 v8; // ax
unsigned int v9; // eax
__int64 v10; // rcx
v2 = -1; /*0x6cba*/
if ( !*(_QWORD *)&Device->reserved_090[40] ) /*0x6ca9*/
return 0x8000000000000007uLL; /*0x6cc0*/
*(_QWORD *)&Device->reserved_170[24] = MemAllocPages(12); /*0x6ce2*/
*(_QWORD *)&Device->reserved_170[32] = MemAllocPages(40); /*0x6cf2*/
v4 = MemAllocPages(42); /*0x6cf9*/
i = *(_BYTE **)&Device->reserved_170[24]; /*0x6cfe*/
*(_QWORD *)&Device->reserved_170[40] = v4; /*0x6d0b*/
MemZero(i, 0, 12); /*0x6d12*/
MemZero(*(_BYTE **)&Device->reserved_170[32], 0, 40); /*0x6d23*/
MemZero(*(_BYTE **)&Device->reserved_170[40], 0, 42); /*0x6d35*/
StrHexToDecimal("Intel", *(CHAR16 **)&Device->reserved_170[24]); /*0x6d48*/
v6 = *(_QWORD *)&Device->reserved_090[40]; /*0x6d4d*/
if ( !v6 ) /*0x6d57*/
goto LABEL_8; /*0x6d57*/
Intel = (const CHAR8 *)RstDeviceFindByGuidInList(v6); /*0x6d59*/
if ( Intel ) /*0x6d61*/
StrHexToDecimal(Intel, *(CHAR16 **)&Device->reserved_170[40]); /*0x6d6d*/
v8 = RstDeviceGetRaidLevel(*(_QWORD *)&Device->reserved_090[40]); /*0x6d79*/
v2 = v8; /*0x6d7e*/
if ( v8 == 0xFFFF ) /*0x6d85*/
LABEL_8:
StrHexToDecimal("VROC Volume", *(CHAR16 **)&Device->reserved_170[32]); /*0x6db1*/
else
HiiCfgArraySet(*(CHAR8 **)&Device->reserved_170[32], 0x28u, "VROC %d Volume", v8); /*0x6d9c*/
v9 = j_HiiLibReturnZero(*(_QWORD *)&Device->reserved_090[40]); /*0x6dbd*/
v10 = *(_QWORD *)&Device->reserved_090[40]; /*0x6dc2*/
Device->reserved_170[64] = v2; /*0x6dc9*/
*(_QWORD *)&Device->reserved_170[56] = v9; /*0x6dd3*/
*(_QWORD *)&Device->reserved_170[48] = RstCallGetData88(v10); /*0x6de5*/
Device->reserved_170[65] = 2; /*0x6dec*/
return (*(__int64 (__fastcall **)(void **, void *, uint8_t *, _QWORD, _QWORD))(qword_58070 + 328))( /*0x6e29*/
&Device->Destructor,
&unk_27910,
&Device->reserved_170[24],
0,
0);
}
// Function: RstDeviceCheck @ 0x6e30 (0x79 bytes)
// Index: 180/906
__int64 __fastcall RstDeviceCheck(__int64 a1)
{
__int64 v2; // rbx
v2 = (*(__int64 (__fastcall **)(_QWORD, void *, __int64))(qword_58070 + 144))( /*0x6e61*/
*(_QWORD *)(a1 + 8),
&unk_27910,
a1 + 392);
if ( !v2 ) /*0x6e67*/
{
MemZeroThenFree(*(_BYTE **)(a1 + 400), 40); /*0x6e73*/
MemZeroThenFree(*(_BYTE **)(a1 + 392), 12); /*0x6e82*/
MemZeroThenFree(*(_BYTE **)(a1 + 408), 42); /*0x6e91*/
}
return v2; /*0x6ea3*/
}
// Function: RsteDeviceInit @ 0x6eac (0x8a bytes)
// Index: 181/906
__int64 __fastcall RsteDeviceInit(_QWORD *a1)
{
__int64 result; // rax
__int64 v3; // rdi
if ( !a1[23] ) /*0x6eb6*/
return 0x8000000000000002uLL; /*0x6ec3*/
result = RstBeginSession(a1); /*0x6ecf*/
if ( result >= 0 ) /*0x6ed7*/
{
result = RstDeviceProbe((__int64)a1); /*0x6edc*/
v3 = result; /*0x6ee1*/
if ( result >= 0 ) /*0x6ee7*/
{
if ( (unsigned int)RstDeviceFindIndex(a1[23]) != -1 ) /*0x6ef8*/
v3 = RstDeviceConfigure((__int64)a1); /*0x6f02*/
if ( (unsigned int)RstDeviceFindIndex(a1[23]) == -1 ) /*0x6f14*/
RstProtocolRevision(a1[23], 0, a1 + 1); /*0x6f23*/
return v3; /*0x6f28*/
}
}
return result; /*0x6f30*/
}
// Function: RsteDeviceAlloc2 @ 0x6f38 (0xe9 bytes)
// Index: 182/906
unsigned __int64 __fastcall RsteDeviceAlloc2(__int64 a1, __int64 a2, __int64 a3, unsigned __int64 a4, __int64 a5)
{
__int64 v5; // rbx
char v7; // r12
void (__fastcall ***v10)(_QWORD, __int16 *); // rcx
__int64 v11; // [rsp+20h] [rbp-28h] BYREF
int v12; // [rsp+28h] [rbp-20h]
int v13; // [rsp+2Ch] [rbp-1Ch]
bool v14; // [rsp+30h] [rbp-18h]
v5 = 0; /*0x6f51*/
v7 = a2; /*0x6f56*/
if ( !*(_QWORD *)(a1 + 184) ) /*0x6f5c*/
return 0x8000000000000007uLL; /*0x6f65*/
if ( !a5 ) /*0x6f7c*/
return 0x8000000000000002uLL; /*0x6f7e*/
if ( !a4 ) /*0x6f8d*/
return 0x8000000000000004uLL; /*0x6f8f*/
v11 = a3; /*0x6f9b*/
if ( (unsigned __int8)RstDebugEnabled(a1, a2) && !*(_DWORD *)(a1 + 100) ) /*0x6fa9*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\efidriver\\BaseDevice.h", 0xD3u, "mBlkMedia.BlockSize != ( 0 )"); /*0x6fc1*/
v10 = *(void (__fastcall ****)(_QWORD, __int16 *))(a1 + 184); /*0x6fd1*/
v12 = a4 / *(unsigned int *)(a1 + 100); /*0x6fe0*/
v13 = a5; /*0x6fe4*/
v14 = v7 == 0; /*0x6fe8*/
if ( RstHelper_a454(v10, &v11) ) /*0x6fed*/
return 0x8000000000000007uLL; /*0x6fff*/
return v5; /*0x701a*/
}
// Function: RstReturn2 @ 0x7024 (0x1b bytes)
// Index: 183/906
unsigned __int64 __fastcall RstReturn2(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
__int64 v5; // r8
v5 = a2; /*0x7030*/
LOBYTE(a2) = 1; /*0x7033*/
return RsteDeviceAlloc2(a1, a2, v5, a3, a4); /*0x703a*/
}
// Function: RstReturn2_0 @ 0x7040 (0x1b bytes)
// Index: 184/906
unsigned __int64 __fastcall RstReturn2_0(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
return RsteDeviceAlloc2(a1, 0, a2, a3, a4); /*0x7056*/
}
// Function: RstReturn0 @ 0x705c (0x6 bytes)
// Index: 185/906
__int64 RstReturn0()
{
return 1; /*0x7061*/
}
// Function: RstGetVariable @ 0x7064 (0xa4 bytes)
// Index: 186/906
unsigned __int64 __fastcall RstGetVariable(__int64 a1, __int64 a2, _QWORD *a3)
{
_BYTE *i; // rdi
const CHAR8 *v6; // rax
CHAR8 *v7; // rsi
unsigned int n99; // ebx
if ( !*(_QWORD *)(a1 + 184) ) /*0x7078*/
return 0x8000000000000002uLL; /*0x7093*/
i = (_BYTE *)(a1 + 192); /*0x7095*/
if ( !*(_WORD *)(a1 + 192) ) /*0x709c*/
{
v6 = (const CHAR8 *)RstCallGetOffset45(*(_QWORD *)(a1 + 184)); /*0x70a4*/
v7 = (CHAR8 *)v6; /*0x70a9*/
if ( !v6 ) /*0x70af*/
return 0x8000000000000007uLL; /*0x70bb*/
n99 = AsciiStrLen(v6); /*0x70c8*/
if ( n99 > 0x63 ) /*0x70d6*/
n99 = 99; /*0x70d6*/
MemZero(i, 0, 200); /*0x70db*/
RstAsciiStrnToUnicodeStrn(i, n99, v7); /*0x70e8*/
}
*a3 = i; /*0x70ed*/
return 0; /*0x7102*/
}
// Function: RstSetVariable @ 0x7108 (0x87 bytes)
// Index: 187/906
__int64 __fastcall RstSetVariable(_QWORD *a1)
{
if ( !a1[1] || !a1[23] ) /*0x711c*/
return 0x8000000000000002uLL; /*0x717a*/
RstDeviceCheck((__int64)a1); /*0x7126*/
if ( (unsigned int)RstDeviceFindIndex(a1[23]) == -1 ) /*0x713a*/
RstProtocolRevision(a1[23], 1, a1 + 1); /*0x714c*/
RstCallVtableEntry((__int64)a1); /*0x7154*/
return (*(__int64 (__fastcall **)(_QWORD, void *, _QWORD, _QWORD))(qword_58070 + 336))(a1[1], &unk_27730, a1[3], 0); /*0x7189*/
}
// Function: RstGpioRead @ 0x7190 (0x11c bytes)
// Index: 188/906
__int16 __fastcall RstGpioRead(unsigned __int8 n12)
{
if ( n12 <= 0xCu ) /*0x7198*/
{
if ( n12 == 12 ) /*0x719e*/
return 53; /*0x722e*/
if ( n12 > 6u ) /*0x71a7*/
{
switch ( n12 ) /*0x71f7*/
{
case 7u: /*0x71f7*/
return 48; /*0x7228*/
case 8u: /*0x71f7*/
return 49; /*0x7222*/
case 9u: /*0x71f7*/
return 50; /*0x721c*/
case 0xAu: /*0x71f7*/
return 51; /*0x7216*/
case 0xBu: /*0x71f7*/
return 52; /*0x7210*/
}
}
else
{
switch ( n12 ) /*0x71a9*/
{
case 6u: /*0x71a9*/
return 47; /*0x71f3*/
case 0u: /*0x71a9*/
return 41; /*0x71ed*/
case 1u: /*0x71a9*/
return 42; /*0x71e7*/
case 2u: /*0x71a9*/
return 43; /*0x71e1*/
case 3u: /*0x71a9*/
return 44; /*0x71db*/
case 4u: /*0x71a9*/
return 45; /*0x71d5*/
case 5u: /*0x71a9*/
return 46; /*0x71cf*/
}
}
return 0; /*0x71c6*/
}
if ( n12 <= 0x12u ) /*0x7232*/
{
switch ( n12 ) /*0x7234*/
{
case 0x12u: /*0x7234*/
return 59; /*0x7270*/
case 0xDu: /*0x7234*/
return 54; /*0x726a*/
case 0xEu: /*0x7234*/
return 55; /*0x7264*/
case 0xFu: /*0x7234*/
return 56; /*0x725e*/
case 0x10u: /*0x7234*/
return 57; /*0x7258*/
case 0x11u: /*0x7234*/
return 58; /*0x7252*/
}
return 0; /*0x724d*/
}
switch ( n12 ) /*0x7274*/
{
case 0x13u: /*0x7274*/
return 60; /*0x72a6*/
case 0x14u: /*0x7274*/
return 61; /*0x72a0*/
case 0x15u: /*0x7274*/
return 62; /*0x729a*/
case 0x16u: /*0x7274*/
return 63; /*0x7294*/
}
if ( n12 != 23 ) /*0x7288*/
return 0; /*0x728d*/
return 64; /*0x71cf*/
}
// Function: RstGpioWrite @ 0x72ac (0x240 bytes)
// Index: 189/906
__int16 __fastcall RstGpioWrite(unsigned __int8 n24)
{
if ( n24 <= 0x18u ) /*0x72b4*/
{
if ( n24 == 24 ) /*0x72ba*/
return 89; /*0x73e2*/
if ( n24 > 0xCu ) /*0x72c3*/
{
if ( n24 > 0x12u ) /*0x7361*/
{
switch ( n24 ) /*0x73a7*/
{
case 0x13u: /*0x73a7*/
return 84; /*0x73dc*/
case 0x14u: /*0x73a7*/
return 85; /*0x73d6*/
case 0x15u: /*0x73a7*/
return 86; /*0x73d0*/
case 0x16u: /*0x73a7*/
return 87; /*0x73ca*/
case 0x17u: /*0x73a7*/
return 88; /*0x73c4*/
}
}
else
{
switch ( n24 ) /*0x7363*/
{
case 0x12u: /*0x7363*/
return 83; /*0x73a3*/
case 0xDu: /*0x7363*/
return 78; /*0x739d*/
case 0xEu: /*0x7363*/
return 79; /*0x7397*/
case 0xFu: /*0x7363*/
return 80; /*0x7391*/
case 0x10u: /*0x7363*/
return 81; /*0x738b*/
case 0x11u: /*0x7363*/
return 82; /*0x7385*/
}
}
}
else
{
if ( n24 == 12 ) /*0x72c9*/
return 77; /*0x735d*/
if ( n24 > 6u ) /*0x72d2*/
{
switch ( n24 ) /*0x7322*/
{
case 7u: /*0x7322*/
return 72; /*0x7357*/
case 8u: /*0x7322*/
return 73; /*0x7351*/
case 9u: /*0x7322*/
return 74; /*0x734b*/
case 0xAu: /*0x7322*/
return 75; /*0x7345*/
case 0xBu: /*0x7322*/
return 76; /*0x733f*/
}
}
else
{
switch ( n24 ) /*0x72d4*/
{
case 6u: /*0x72d4*/
return 71; /*0x731e*/
case 0u: /*0x72d4*/
return 65; /*0x7318*/
case 1u: /*0x72d4*/
return 66; /*0x7312*/
case 2u: /*0x72d4*/
return 67; /*0x730c*/
case 3u: /*0x72d4*/
return 68; /*0x7306*/
case 4u: /*0x72d4*/
return 69; /*0x7300*/
case 5u: /*0x72d4*/
return 70; /*0x72fa*/
}
}
}
return 0; /*0x72f1*/
}
if ( n24 <= 0x24u ) /*0x73e6*/
{
if ( n24 == 36 ) /*0x73ec*/
return 101; /*0x746e*/
if ( n24 > 0x1Eu ) /*0x73f1*/
{
switch ( n24 ) /*0x7437*/
{
case 0x1Fu: /*0x7437*/
return 96; /*0x7468*/
case 0x20u: /*0x7437*/
return 97; /*0x7462*/
case 0x21u: /*0x7437*/
return 98; /*0x745c*/
case 0x22u: /*0x7437*/
return 99; /*0x7456*/
case 0x23u: /*0x7437*/
return 100; /*0x7450*/
}
}
else
{
switch ( n24 ) /*0x73f3*/
{
case 0x1Eu: /*0x73f3*/
return 95; /*0x7433*/
case 0x19u: /*0x73f3*/
return 90; /*0x742d*/
case 0x1Au: /*0x73f3*/
return 91; /*0x7427*/
case 0x1Bu: /*0x73f3*/
return 92; /*0x7421*/
case 0x1Cu: /*0x73f3*/
return 93; /*0x741b*/
case 0x1Du: /*0x73f3*/
return 94; /*0x7415*/
}
}
return 0; /*0x740c*/
}
if ( n24 <= 0x2Au ) /*0x7472*/
{
switch ( n24 ) /*0x7474*/
{
case '*': /*0x7474*/
return 107; /*0x74b0*/
case '%': /*0x7474*/
return 102; /*0x74aa*/
case '&': /*0x7474*/
return 103; /*0x74a4*/
case '\'': /*0x7474*/
return 104; /*0x749e*/
case '(': /*0x7474*/
return 105; /*0x7498*/
case ')': /*0x7474*/
return 106; /*0x7492*/
}
return 0; /*0x748d*/
}
switch ( n24 ) /*0x74b4*/
{
case '+': /*0x74b4*/
return 108; /*0x74e6*/
case ',': /*0x74b4*/
return 109; /*0x74e0*/
case '-': /*0x74b4*/
return 110; /*0x74da*/
case '.': /*0x74b4*/
return 111; /*0x74d4*/
}
if ( n24 != 47 ) /*0x74c8*/
return 0; /*0x74cd*/
return 112; /*0x72fa*/
}
// Function: RstGpioConfigure @ 0x74ec (0x1b2 bytes)
// Index: 190/906
__int16 __fastcall RstGpioConfigure(int n19)
{
__int16 n9; // dx
int v2; // ecx
int v3; // ecx
int v4; // ecx
int v5; // ecx
int v6; // ecx
int v7; // ecx
int v8; // ecx
int v10; // ecx
int v11; // ecx
int v12; // ecx
int v13; // ecx
int v14; // ecx
int v15; // ecx
int v16; // ecx
int v17; // ecx
int v18; // ecx
int v19; // ecx
int v20; // ecx
int v21; // ecx
int v22; // ecx
int v23; // ecx
int v24; // ecx
int v25; // ecx
int v26; // ecx
int v27; // ecx
int v28; // ecx
int v29; // ecx
int v30; // ecx
int v31; // ecx
int v32; // ecx
if ( n19 <= 19 ) /*0x74f5*/
{
if ( n19 == 19 ) /*0x74fb*/
return 21; /*0x75d6*/
n9 = 9; /*0x7501*/
if ( n19 > 9 ) /*0x7507*/
{
v10 = n19 - 10; /*0x756e*/
if ( !v10 ) /*0x7571*/
return 12; /*0x75d0*/
v11 = v10 - 1; /*0x7578*/
if ( !v11 ) /*0x757a*/
return 13; /*0x75ca*/
v12 = v11 - 1; /*0x757c*/
if ( !v12 ) /*0x757e*/
return 14; /*0x75c4*/
v13 = v12 - 1; /*0x7580*/
if ( !v13 ) /*0x7582*/
return 15; /*0x75be*/
v14 = v13 - 1; /*0x7584*/
if ( !v14 ) /*0x7586*/
return 16; /*0x75b8*/
v15 = v14 - 1; /*0x7588*/
if ( !v15 ) /*0x758a*/
return 17; /*0x75b2*/
v16 = v15 - 1; /*0x758c*/
if ( !v16 ) /*0x758e*/
return 18; /*0x75ac*/
v17 = v16 - 1; /*0x7590*/
if ( !v17 ) /*0x7592*/
return 19; /*0x75a6*/
if ( v17 == 1 ) /*0x7596*/
return 20; /*0x75a1*/
return 40; /*0x7596*/
}
if ( n19 == 9 ) /*0x7509*/
return 11; /*0x756d*/
if ( !n19 ) /*0x750d*/
return 2; /*0x7567*/
v2 = n19 - 1; /*0x7512*/
if ( !v2 ) /*0x7514*/
return 3; /*0x7561*/
v3 = v2 - 1; /*0x7516*/
if ( !v3 ) /*0x7518*/
return 4; /*0x755b*/
v4 = v3 - 1; /*0x751a*/
if ( !v4 ) /*0x751c*/
return 5; /*0x7555*/
v5 = v4 - 1; /*0x751e*/
if ( !v5 ) /*0x7520*/
return 6; /*0x754f*/
v6 = v5 - 1; /*0x7522*/
if ( !v6 ) /*0x7524*/
return 7; /*0x7549*/
v7 = v6 - 1; /*0x7526*/
if ( !v7 ) /*0x7528*/
return 8; /*0x7543*/
v8 = v7 - 1; /*0x752a*/
if ( v8 ) /*0x752c*/
{
if ( v8 == 1 ) /*0x7530*/
return 10; /*0x7539*/
return 40; /*0x7530*/
}
return n9; /*0x753d*/
}
n9 = 29; /*0x75d7*/
if ( n19 <= 29 ) /*0x75de*/
{
if ( n19 == 29 ) /*0x75e0*/
return 31; /*0x7641*/
v18 = n19 - 20; /*0x75e2*/
if ( !v18 ) /*0x75e5*/
return 22; /*0x763b*/
v19 = v18 - 1; /*0x75ea*/
if ( !v19 ) /*0x75ec*/
return 23; /*0x7635*/
v20 = v19 - 1; /*0x75ee*/
if ( !v20 ) /*0x75f0*/
return 24; /*0x762f*/
v21 = v20 - 1; /*0x75f2*/
if ( !v21 ) /*0x75f4*/
return 25; /*0x7629*/
v22 = v21 - 1; /*0x75f6*/
if ( !v22 ) /*0x75f8*/
return 26; /*0x7623*/
v23 = v22 - 1; /*0x75fa*/
if ( !v23 ) /*0x75fc*/
return 27; /*0x761d*/
v24 = v23 - 1; /*0x75fe*/
if ( !v24 ) /*0x7600*/
return 28; /*0x7617*/
v25 = v24 - 1; /*0x7602*/
if ( v25 ) /*0x7604*/
{
if ( v25 == 1 ) /*0x760c*/
return 30; /*0x7611*/
return 40; /*0x760c*/
}
return n9; /*0x7604*/
}
v26 = n19 - 30; /*0x7642*/
if ( !v26 ) /*0x7645*/
return 32; /*0x7698*/
v27 = v26 - 1; /*0x764c*/
if ( !v27 ) /*0x764e*/
return 33; /*0x7692*/
v28 = v27 - 1; /*0x7650*/
if ( !v28 ) /*0x7652*/
return 34; /*0x768c*/
v29 = v28 - 1; /*0x7654*/
if ( !v29 ) /*0x7656*/
return 35; /*0x7686*/
v30 = v29 - 1; /*0x7658*/
if ( !v30 ) /*0x765a*/
return 36; /*0x7680*/
v31 = v30 - 1; /*0x765c*/
if ( !v31 ) /*0x765e*/
return 37; /*0x767a*/
v32 = v31 - 1; /*0x7660*/
if ( !v32 ) /*0x7662*/
return 38; /*0x7674*/
if ( v32 != 1 ) /*0x7666*/
return 40; /*0x766d*/
return 39; /*0x7539*/
}
// Function: RstGetControllerInfo @ 0x76a0 (0xeb bytes)
// Index: 191/906
EFI_STRING __fastcall RstGetControllerInfo(CHAR16 *Destination, __int64 a2, void *HiiHandle)
{
unsigned __int8 n12; // r10
EFI_STRING_ID StringId; // di
unsigned __int16 v7; // r9
const CHAR8 *StringToLanguage; // rax
unsigned __int16 v9; // ax
__int64 v10; // rax
_WORD i[24]; // [rsp+30h] [rbp-168h] BYREF
CHAR8 Language[304]; // [rsp+60h] [rbp-138h] BYREF
RstGpioConfigure(*((_DWORD *)Destination + 35)); /*0x76c1*/
StringId = RstGpioRead(n12); /*0x76dc*/
StringToLanguage = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, v7, 0); /*0x76df*/
HiiGetString(HiiHandle, StringId, StringToLanguage); /*0x76f0*/
MemZero(i, 0, 34); /*0x7700*/
MemZero(Language, 0, 300); /*0x7712*/
RstAsciiStrnToUnicodeStrn(i, 0x11u, (_BYTE *)Destination + 4); /*0x7725*/
v9 = RstGpioConfigure(*((_DWORD *)Destination + 35)); /*0x7730*/
v10 = HiiGetStringToLanguage(HiiHandle, v9, 0); /*0x773e*/
HiiCfgArrayGet(Language, 0x12Cu, (unsigned __int8 *)L"%s, %s", i, v10); /*0x775e*/
return HiiGetString(HiiHandle, StringId, Language); /*0x7786*/
}
// Function: RstLanguageHandler @ 0x778c (0x12e bytes)
// Index: 192/906
EFI_STRING __fastcall RstLanguageHandler(CHAR16 *Source, unsigned __int8 n24, void *HiiHandle)
{
EFI_STRING_ID StringId; // bp
unsigned __int16 v7; // r9
const CHAR8 *StringToLanguage; // rax
__int64 v9; // rax
CHAR16 *v10; // r8
unsigned __int16 v11; // ax
__int64 v12; // rax
_QWORD v14[3]; // [rsp+30h] [rbp-188h] BYREF
_WORD i[28]; // [rsp+48h] [rbp-170h] BYREF
CHAR8 Language[304]; // [rsp+80h] [rbp-138h] BYREF
RstGpioConfigure(*((_DWORD *)Source + 36)); /*0x77b2*/
StringId = RstGpioWrite(n24); /*0x77cd*/
StringToLanguage = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, v7, 0); /*0x77d0*/
HiiGetString(HiiHandle, StringId, StringToLanguage); /*0x77e1*/
MemZero(i, 0, 44); /*0x77f1*/
MemZero(Language, 0, 300); /*0x7806*/
if ( n24 == 0xFF ) /*0x780f*/
v9 = 0x8000000000000002uLL; /*0x7828*/
else
v9 = RstDeviceGetProperty((__int64)v14, n24, "en"); /*0x7821*/
v10 = (CHAR16 *)v14; /*0x783c*/
if ( v9 ) /*0x7844*/
v10 = Source + 2; /*0x7846*/
RstAsciiStrnToUnicodeStrn(i, 0x2Cu, v10); /*0x784a*/
v11 = RstGpioConfigure(*((_DWORD *)Source + 36)); /*0x7855*/
v12 = HiiGetStringToLanguage(HiiHandle, v11, 0); /*0x7863*/
HiiCfgArrayGet(Language, 0x12Cu, (unsigned __int8 *)L"%s, %s", i, v12); /*0x7886*/
return HiiGetString(HiiHandle, StringId, Language); /*0x78b5*/
}
// Function: RstGetString @ 0x78bc (0x98 bytes)
// Index: 193/906
__int64 __fastcall RstGetString(__int64 a1, __int64 a2)
{
__int64 v4; // rbx
__int64 v5; // rax
LocateHandleBuffer(*(_QWORD *)(qword_35418 + 624), SystemTable); /*0x78e1*/
v4 = (*(__int64 (__fastcall **)(__int64, void *, __int64, _QWORD))(qword_58070 + 328))(a2, &unk_271D8, a1 + 8, 0); /*0x7929*/
v5 = HiiPackageListBuild((__int64)&unk_271C8, *(_QWORD *)(qword_35418 + 624), &unk_271F0, 0, 0); /*0x792c*/
*(_QWORD *)(a1 + 24) = v5; /*0x793e*/
if ( !v5 ) /*0x7942*/
return 0x8000000000000002uLL; /*0x7942*/
return v4; /*0x794e*/
}
// Function: RstIsDebugEnabled @ 0x7954 (0xdf bytes)
// Index: 194/906
char RstIsDebugEnabled()
{
char v0; // di
unsigned int v1; // eax
unsigned __int8 n0x18; // si
unsigned __int64 v3; // rbx
unsigned __int8 v4; // si
unsigned __int64 v5; // rbx
__int64 i[17]; // [rsp+20h] [rbp-F8h] BYREF
int n21; // [rsp+ACh] [rbp-6Ch]
int n5; // [rsp+B0h] [rbp-68h]
v0 = 0; /*0x7966*/
v1 = RstDeviceBuildAllBitmap(); /*0x7969*/
n0x18 = 0; /*0x796e*/
v3 = v1; /*0x7971*/
while ( v3 ) /*0x7975*/
{
if ( !(unsigned int)RstHelper_c8a8(n0x18, (__int64)i) ) /*0x797f*/
{
if ( (v3 & 1) != 0 && n21 != 21 && (n21 <= 23 || n21 > 25 && (n21 <= 31 || n21 > 36)) ) /*0x79ab*/
++v0; /*0x79ad*/
v3 >>= 1; /*0x79b0*/
++n0x18; /*0x79b3*/
}
}
v4 = 0; /*0x79bd*/
v5 = RstVolFindDevicesByProperty(0); /*0x79c5*/
while ( v5 ) /*0x79cb*/
{
if ( !(unsigned int)RstHelper_ce6c(v4, (__int64)i) ) /*0x79d6*/
{
if ( (v5 & 1) != 0 && n5 && n5 != 5 && (n5 <= 6 || n5 > 9 && n5 != 13 && (n5 <= 17 || n5 > 19)) ) /*0x7a0b*/
++v0; /*0x7a0d*/
v5 >>= 1; /*0x7a10*/
++v4; /*0x7a13*/
}
}
return v0; /*0x7a2e*/
}
// Function: RstProcessForm @ 0x7a34 (0x23a bytes)
// Index: 195/906
void __fastcall RstProcessForm(RST_PRIVATE_DATA *Private)
{
_DWORD *v1; // rdx
void *HiiHandle_1; // r8
void *HiiHandle; // r14
_DWORD *v4; // rsi
unsigned int v6; // eax
__int64 v7; // r13
unsigned __int8 n0x18; // di
unsigned __int64 v9; // rbx
__int64 v10; // rdx
__int64 v11; // r8
__int16 v12; // ax
__int64 v13; // r8
unsigned __int8 n24; // di
unsigned __int64 v15; // rbx
unsigned __int8 v16; // bp
__int64 v17; // r8
__int16 v18; // ax
__int64 v19; // r8
CHAR16 Source[70]; // [rsp+20h] [rbp-1F8h] BYREF
int n21; // [rsp+ACh] [rbp-16Ch]
CHAR16 Destination[72]; // [rsp+110h] [rbp-108h] BYREF
int n5; // [rsp+1A0h] [rbp-78h]
HiiHandle = HiiHandle_1; /*0x7a54*/
v4 = v1; /*0x7a57*/
if ( !RstVolGetOnlineMemberMask() ) /*0x7a5d*/
{
*v4 = 0; /*0x7a67*/
return; /*0x7a69*/
}
v6 = RstDeviceBuildAllBitmap(); /*0x7a6e*/
LOBYTE(v7) = 0; /*0x7a73*/
n0x18 = 0; /*0x7a76*/
v9 = v6; /*0x7a79*/
if ( v6 ) /*0x7a80*/
{
while ( 1 ) /*0x7a86*/
{
if ( (v9 & 1) == 0 ) /*0x7a89*/
goto LABEL_13; /*0x7a89*/
if ( !(unsigned int)RstHelper_c8a8(n0x18, (__int64)Source) ) /*0x7a97*/
break; /*0x7a97*/
LABEL_14:
if ( !v9 ) /*0x7b4c*/
goto LABEL_15; /*0x7b4c*/
}
if ( n21 != 21 && (n21 <= 23 || n21 > 25 && (n21 <= 31 || n21 > 36)) ) /*0x7aca*/
{
*v4 = 3; /*0x7acc*/
if ( Private ) /*0x7ad5*/
{
StrnCpy(Destination, Source, 0xA8u); /*0x7aea*/
LOBYTE(v10) = n0x18; /*0x7afa*/
RstGetControllerInfo(Destination, v10, HiiHandle); /*0x7afd*/
v11 = 3LL * (unsigned __int8)v7; /*0x7b0a*/
*((_QWORD *)Private->Vtable + v11 + 2) = 0; /*0x7b11*/
*((_QWORD *)Private->Vtable + v11) = HiiHandle; /*0x7b1b*/
v12 = RstGpioRead(n0x18); /*0x7b1f*/
*((_WORD *)Private->Vtable + 4 * v13 + 4) = v12; /*0x7b28*/
v7 = (unsigned __int8)(v7 + 1); /*0x7b35*/
*((_QWORD *)Private->Vtable + 3 * v7) = 0; /*0x7b3e*/
}
}
LABEL_13:
v9 >>= 1; /*0x7b43*/
++n0x18; /*0x7b46*/
goto LABEL_14; /*0x7b46*/
}
LABEL_15:
n24 = 0; /*0x7b52*/
v15 = RstVolFindDevicesByProperty(0); /*0x7b5c*/
if ( v15 ) /*0x7b62*/
{
v16 = v7 + 1; /*0x7b68*/
while ( 1 ) /*0x7b6c*/
{
if ( (v15 & 1) == 0 ) /*0x7b6f*/
goto LABEL_28; /*0x7b6f*/
if ( !(unsigned int)RstHelper_ce6c(n24, (__int64)Destination) ) /*0x7b81*/
break; /*0x7b81*/
LABEL_29:
if ( !v15 ) /*0x7c46*/
return; /*0x7c46*/
}
if ( n5 && n5 != 5 && (n5 <= 6 || n5 > 9 && n5 != 13 && (n5 <= 17 || n5 > 19)) ) /*0x7bc5*/
{
*v4 = 3; /*0x7bc7*/
if ( Private ) /*0x7bd0*/
{
StrnCpy(Source, Destination, 0xF0u); /*0x7be5*/
RstLanguageHandler(Source, n24, HiiHandle); /*0x7bf5*/
v17 = 3LL * (unsigned __int8)v7; /*0x7c02*/
*((_QWORD *)Private->Vtable + v17 + 2) = 0; /*0x7c09*/
*((_QWORD *)Private->Vtable + v17) = HiiHandle; /*0x7c13*/
v18 = RstGpioWrite(n24); /*0x7c17*/
*((_WORD *)Private->Vtable + 4 * v19 + 4) = v18; /*0x7c20*/
LOBYTE(v7) = v7 + 1; /*0x7c2a*/
*((_QWORD *)Private->Vtable + 3 * v16++) = 0; /*0x7c35*/
}
}
LABEL_28:
v15 >>= 1; /*0x7c3d*/
++n24; /*0x7c40*/
goto LABEL_29; /*0x7c40*/
}
}
// Function: RstGetBrowserData @ 0x7c70 (0xbd bytes)
// Index: 196/906
__int64 __fastcall RstGetBrowserData(__int64 a1, __int64 a2, __int64 a3, _DWORD *a4, unsigned __int64 *Private_1)
{
RST_PRIVATE_DATA *Private; // rdi
unsigned __int8 IsDebugEnabled; // al
if ( a2 && a2 != qword_35418[78] ) /*0x7c99*/
return 0x8000000000000003uLL; /*0x7ca5*/
if ( a3 ) /*0x7caa*/
return (a4 != 0) - 0x7FFFFFFFFFFFFFFELL; /*0x7cc2*/
Private = (RST_PRIVATE_DATA *)Private_1; /*0x7cc4*/
*a4 = 0; /*0x7cc9*/
if ( Private_1 ) /*0x7cd0*/
{
IsDebugEnabled = RstIsDebugEnabled(); /*0x7cd2*/
if ( IsDebugEnabled ) /*0x7cdc*/
{
if ( (*(__int64 (__fastcall **)(__int64, __int64, unsigned __int64 *))(qword_58070 + 64))( /*0x7cfd*/
4,
24LL * ((unsigned int)IsDebugEnabled + 1),
Private_1) < 0 )
return 0x8000000000000009uLL; /*0x7d09*/
}
else
{
Private = 0; /*0x7d0b*/
}
}
RstProcessForm(Private); /*0x7d16*/
return 0; /*0x7d27*/
}
// Function: RstInitBrowserCallbacks @ 0x7d30 (0x1d bytes)
// Index: 197/906
_QWORD *__fastcall RstInitBrowserCallbacks(_QWORD *a1, __int64 a2)
{
*a1 = a2; /*0x7d37*/
a1[1] = RstGetBrowserData; /*0x7d3a*/
a1[2] = RstReturnOne; /*0x7d45*/
return a1; /*0x7d4c*/
}
// Function: RstHiiConfigRead @ 0x7d50 (0x7e bytes)
// Index: 198/906
__int64 __fastcall RstHiiConfigRead(__int64 a1, __int64 a2)
{
__int64 v4; // rax
__int64 v5; // rcx
__int64 v6; // rbx
v4 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, _QWORD, _QWORD))(qword_58070 + 328))( /*0x7d86*/
a1 + 8,
a2,
a1 + 40,
0,
0);
v5 = *(_QWORD *)(a1 + 8); /*0x7d8c*/
*(_QWORD *)(a1 + 32) = a2; /*0x7d90*/
v6 = v4; /*0x7da6*/
(*(void (__fastcall **)(__int64, __int64, __int64, __int64))(qword_58070 + 136))(v5, a2, a1 + 40, a1 + 40); /*0x7da9*/
return v6; /*0x7dc7*/
}
// Function: RstCallVtableEntry @ 0x7dd0 (0x1d bytes)
// Index: 199/906
__int64 __fastcall RstCallVtableEntry(__int64 a1)
{
return (*(__int64 (__fastcall **)(_QWORD, _QWORD, __int64, _QWORD))(qword_58070 + 336))(
*(_QWORD *)(a1 + 8),
*(_QWORD *)(a1 + 32),
a1 + 40,
0);
}
// Function: RstConfigAccessExtract @ 0x7df0 (0x26 bytes)
// Index: 200/906
__int64 __fastcall RstConfigAccessExtract(__int64 a1)
{
__int64 v2; // rcx
if ( a1 && (v2 = a1 - 40) != 0 ) /*0x7e09*/
return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)v2 + 24LL))(v2); /*0x7e0e*/
else
return 0x8000000000000007uLL; /*0x7df9*/
}
// Function: RstSetBrowserData @ 0x7e18 (0xba bytes)
// Index: 201/906
char __fastcall RstSetBrowserData(
__int64 a1,
int a2,
unsigned __int64 a3,
unsigned __int64 a4,
unsigned __int64 a5,
unsigned __int64 *a6)
{
unsigned __int64 v7; // rax
unsigned __int64 v8; // rcx
if ( !a6 ) /*0x7e2b*/
return 0; /*0x7e2b*/
if ( !a1 ) /*0x7e34*/
goto LABEL_17; /*0x7e34*/
if ( *(_DWORD *)(a1 + 88) != a2 ) /*0x7e3d*/
{
v7 = 0x800000000000000DuLL; /*0x7e3f*/
LABEL_18:
*a6 = v7; /*0x7ec7*/
return 0; /*0x7ec7*/
}
if ( !a5 ) /*0x7e53*/
{
LABEL_17:
v7 = 0x8000000000000002uLL; /*0x7ebd*/
goto LABEL_18; /*0x7ebd*/
}
if ( a4 ) /*0x7e58*/
{
v8 = *(unsigned int *)(a1 + 100); /*0x7e5f*/
if ( a4 % v8 ) /*0x7e67*/
{
v7 = 0x8000000000000004uLL; /*0x7e6f*/
goto LABEL_18; /*0x7e79*/
}
if ( a3 <= *(_QWORD *)(a1 + 112) /*0x7eb3*/
&& a4 / v8 + a3 - 1 <= *(_QWORD *)(a1 + 112)
&& a4 + a5 <= 0x100000000LL
&& a5 <= 0x100000000LL
&& (!*(_DWORD *)(a1 + 104) || ((*(_DWORD *)(a1 + 104) - 1) & (unsigned int)a5) == 0) )
{
*a6 = 0; /*0x7eb5*/
return 1; /*0x7ebb*/
}
goto LABEL_17; /*0x7eb3*/
}
*a6 = 0; /*0x7e5a*/
return 0; /*0x7ed1*/
}
// Function: RstDeviceRead @ 0x7ed4 (0x82 bytes)
// Index: 202/906
__int64 __fastcall RstDeviceRead(__int64 a1, int a2, unsigned __int64 a3, unsigned __int64 a4, unsigned __int64 a5)
{
unsigned __int64 v8; // rbp
__int64 v9; // rsi
unsigned __int64 v10; // [rsp+40h] [rbp+8h] BYREF
v10 = 0; /*0x7ee8*/
if ( !a1 ) /*0x7ef6*/
return 0x8000000000000002uLL; /*0x7ef8*/
v8 = a5; /*0x7f04*/
v9 = a1 - 40; /*0x7f09*/
if ( RstSetBrowserData(a1 - 40, a2, a3, a4, a5, &v10) ) /*0x7f1f*/
return (*(__int64 (__fastcall **)(__int64, unsigned __int64, unsigned __int64, unsigned __int64))(*(_QWORD *)v9 + 32LL))( /*0x7f3e*/
v9,
a3,
a4,
v8);
else
return v10; /*0x7f28*/
}
// Function: RstDeviceWrite @ 0x7f58 (0x94 bytes)
// Index: 203/906
__int64 __fastcall RstDeviceWrite(__int64 a1, int a2, unsigned __int64 a3, unsigned __int64 a4, unsigned __int64 a5)
{
unsigned __int64 v8; // rbp
_BYTE *v9; // rbx
unsigned __int64 v10; // [rsp+40h] [rbp+8h] BYREF
v10 = 0; /*0x7f6c*/
if ( !a1 ) /*0x7f7a*/
return 0x8000000000000002uLL; /*0x7f7c*/
v8 = a5; /*0x7f88*/
v9 = (_BYTE *)(a1 - 40); /*0x7f8d*/
if ( !RstSetBrowserData(a1 - 40, a2, a3, a4, a5, &v10) ) /*0x7fa3*/
return v10; /*0x7fac*/
if ( v9[95] ) /*0x7fb3*/
return 0x8000000000000008uLL; /*0x7fb9*/
return (*(__int64 (__fastcall **)(_BYTE *, unsigned __int64, unsigned __int64, unsigned __int64))(*(_QWORD *)v9 + 40LL))( /*0x7fe6*/
v9,
a3,
a4,
v8);
}
// Function: RstDeviceGetStatus @ 0x7fec (0x26 bytes)
// Index: 204/906
__int64 __fastcall RstDeviceGetStatus(__int64 a1)
{
__int64 v2; // rcx
if ( a1 && (v2 = a1 - 40) != 0 ) /*0x8005*/
return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)v2 + 48LL))(v2); /*0x800a*/
else
return 0x8000000000000007uLL; /*0x7ff5*/
}
// Function: CfgArrayAllocBlock @ 0x8014 (0x5d bytes)
// Index: 205/906
_QWORD *__fastcall CfgArrayAllocBlock(_QWORD *a1, RST_PRIVATE_DATA *Private)
{
a1[2] = Private; /*0x801e*/
*a1 = off_23610; /*0x8022*/
a1[4] = 0; /*0x8029*/
a1[6] = a1 + 11; /*0x802d*/
a1[1] = 0; /*0x8038*/
a1[7] = RstConfigAccessExtract; /*0x803c*/
a1[5] = 131073; /*0x8047*/
a1[8] = RstDeviceRead; /*0x804f*/
a1[3] = 0; /*0x805a*/
a1[9] = RstDeviceWrite; /*0x805e*/
a1[10] = RstDeviceGetStatus; /*0x8069*/
return a1; /*0x8070*/
}
// Function: CfgArrayGetBlock @ 0x8074 (0x26 bytes)
// Index: 206/906
__int64 (__fastcall **__fastcall CfgArrayGetBlock(_QWORD *a1))()
{
__int64 (__fastcall **result)(); // rax
result = off_23610; /*0x8078*/
*a1 = off_23610; /*0x807f*/
if ( a1[3] ) /*0x8082*/
return (*(__int64 (__fastcall **(**)(void))())(qword_58070 + 72))(); /*0x8092*/
return result; /*0x8095*/
}
// Function: StrnCmp @ 0x809c (0x27 bytes)
// Index: 207/906
INTN __cdecl StrnCmp(const CHAR16 *FirstString, const CHAR16 *SecondString, UINTN Length)
{
INTN result; // rax
if ( Length ) /*0x80a2*/
{
while ( *(_BYTE *)FirstString == *(_BYTE *)SecondString ) /*0x80ac*/
{
FirstString = (const CHAR16 *)((char *)FirstString + 1); /*0x80ae*/
SecondString = (const CHAR16 *)((char *)SecondString + 1); /*0x80b1*/
if ( !--Length ) /*0x80b7*/
goto LABEL_4; /*0x80b7*/
}
LOWORD(result) = 1; /*0x80be*/
}
else
{
LABEL_4:
LOWORD(result) = 0; /*0x80b9*/
}
return result; /*0x80bd*/
}
// Function: StrnCpy @ 0x80c4 (0x1f bytes)
// Index: 208/906
CHAR16 *__cdecl StrnCpy(CHAR16 *Destination, const CHAR16 *Source, UINTN Length)
{
CHAR16 *Destination_1; // r9
signed __int64 v4; // rdx
Destination_1 = Destination; /*0x80c4*/
if ( Length ) /*0x80ca*/
{
v4 = (char *)Source - (char *)Destination; /*0x80cc*/
do /*0x80dd*/
{
*(_BYTE *)Destination_1 = *((_BYTE *)Destination_1 + v4); /*0x80d3*/
Destination_1 = (CHAR16 *)((char *)Destination_1 + 1); /*0x80d6*/
--Length; /*0x80d9*/
}
while ( Length ); /*0x80dd*/
}
return Destination; /*0x80e2*/
}
// Function: MemZero @ 0x80e4 (0x17 bytes)
// Index: 209/906
_BYTE *__fastcall MemZero(_BYTE *i, char a2, __int64 a3)
{
_BYTE *j; // rax
for ( j = i; a3; --a3 ) /*0x80ea*/
*j++ = a2; /*0x80ec*/
return i; /*0x80fa*/
}
// Function: MemAllocPages @ 0x80fc (0x2b bytes)
// Index: 210/906
__int64 __fastcall MemAllocPages(__int64 a1)
{
__int64 v2; // [rsp+38h] [rbp+10h] BYREF
v2 = 0; /*0x8107*/
(*(void (__fastcall **)(__int64, __int64, __int64 *))(qword_58070 + 64))(4, a1, &v2); /*0x811a*/
return v2; /*0x8122*/
}
// Function: MemZeroThenFree @ 0x8128 (0x1f bytes)
// Index: 211/906
__int64 __fastcall MemZeroThenFree(_BYTE *a1, __int64 a2)
{
for ( ; a2; --a2 ) /*0x812e*/
*a1++ = 0; /*0x8130*/
return (*(__int64 (**)(void))(qword_58070 + 72))();
}
// Function: MemAlloc @ 0x8148 (0x5 bytes)
// Index: 212/906
// attributes: thunk
__int64 __fastcall MemAlloc(__int64 a1)
{
return MemAllocPages(a1);
}
// Function: MemFree @ 0x8150 (0xb bytes)
// Index: 213/906
__int64 MemFree()
{
return (*(__int64 (**)(void))(qword_58070 + 72))();
}
// Function: GetSystemMemoryMap @ 0x815c (0x5 bytes)
// Index: 214/906
// attributes: thunk
unsigned __int64 __fastcall GetSystemMemoryMap(__int64 a1)
{
return RstGetMemoryMap();
}
// Function: StrLenA @ 0x8164 (0x1d bytes)
// Index: 215/906
__int16 __fastcall StrLenA(_BYTE *a1)
{
__int16 result; // ax
for ( result = 0; *a1; ++result ) /*0x816b*/
++a1; /*0x8174*/
return result; /*0x817f*/
}
// Function: StrnCpy16 @ 0x8184 (0x3a bytes)
// Index: 216/906
__int16 __fastcall StrnCpy16(_BYTE *a1, _BYTE *a2, __int16 a3)
{
while ( *a1 ) /*0x81a3*/
{
if ( !a3 ) /*0x818d*/
return 0; /*0x818d*/
if ( *a1 != *a2 ) /*0x8191*/
break; /*0x8191*/
++a1; /*0x8199*/
++a2; /*0x819c*/
--a3; /*0x819f*/
}
if ( !a3 ) /*0x81ae*/
return 0; /*0x81b4*/
return (unsigned __int8)*a1 - (unsigned __int8)*a2; /*0x81b4*/
}
// Function: RstStringTrim @ 0x81c0 (0x43 bytes)
// Index: 217/906
_BYTE *__fastcall RstStringTrim(_BYTE *i)
{
_BYTE *j; // rax
_BYTE *i_1; // rax
for ( j = i; *j; ++j ) /*0x81c6*/
; /*0x81cb*/
do /*0x81da*/
--j; /*0x81d5*/
while ( *j == 32 ); /*0x81da*/
j[1] = 0; /*0x81dc*/
for ( i_1 = i; *i_1 == 32; ++i_1 ) /*0x81e5*/
; /*0x81e7*/
while ( *i_1 ) /*0x81fd*/
*i++ = *i_1++; /*0x81f0*/
*i = 0; /*0x81ff*/
return i_1; /*0x8202*/
}
// Function: RstStrCopy @ 0x8204 (0x13 bytes)
// Index: 218/906
char __fastcall RstStrCopy(_BYTE *a1, char *a2)
{
char result; // al
while ( 1 ) /*0x820e*/
{
result = *a2; /*0x820e*/
if ( !*a2 ) /*0x820e*/
break; /*0x820e*/
*a1++ = result; /*0x8206*/
++a2; /*0x820b*/
}
*a1 = 0; /*0x8214*/
return result; /*0x8216*/
}
// Function: RstStringFindChar @ 0x8218 (0x48 bytes)
// Index: 219/906
_BYTE *__fastcall RstStringFindChar(_BYTE *a1, char n92)
{
unsigned __int16 i_1; // r8
_BYTE *v4; // rax
unsigned __int16 i; // dx
i_1 = 0; /*0x8218*/
if ( a1 ) /*0x8221*/
{
v4 = a1; /*0x8223*/
for ( i = 0; *v4; ++i ) /*0x822e*/
++v4; /*0x8233*/
while ( i_1 < i ) /*0x8253*/
{
if ( a1[i_1] == n92 ) /*0x8249*/
return &a1[i_1]; /*0x825c*/
++i_1; /*0x824b*/
}
}
return 0; /*0x8257*/
}
// Function: RstStringFindInBuffer @ 0x8260 (0xa4 bytes)
// Index: 220/906
char __fastcall RstStringFindInBuffer(__int64 a1, char *_A, unsigned __int16 n2)
{
char *_A_1; // rax
unsigned __int16 n2_1; // bx
unsigned __int16 i; // r11
_BYTE *v9; // rcx
__int16 v10; // r11
if ( a1 && _A ) /*0x828d*/
{
_A_1 = _A; /*0x828f*/
n2_1 = 0; /*0x8292*/
if ( !*_A ) /*0x829b*/
goto LABEL_6; /*0x829b*/
do /*0x82a7*/
{
++_A_1; /*0x82a0*/
++n2_1; /*0x82a3*/
}
while ( *_A_1 ); /*0x82a7*/
if ( n2_1 <= n2 ) /*0x82af*/
{
LABEL_6:
for ( i = 0; i < n2; i = v10 + 1 ) /*0x82b9*/
{
v9 = (_BYTE *)(i + a1); /*0x82bf*/
if ( !*v9 ) /*0x82c3*/
break; /*0x82c3*/
if ( !StrnCpy16(v9, _A, n2_1) ) /*0x82d8*/
return 1; /*0x82ff*/
}
}
}
return 0; /*0x82f5*/
}
// Function: RstStringCopyN @ 0x8304 (0x42 bytes)
// Index: 221/906
__int64 __fastcall RstStringCopyN(__int64 a1, __int64 a2, __int16 a3)
{
unsigned __int16 v3; // ax
char v4; // r10
v3 = 0; /*0x8307*/
if ( a3 ) /*0x830f*/
{
do /*0x8333*/
{
v4 = *(_BYTE *)(v3 + a2); /*0x8315*/
if ( !v4 ) /*0x831c*/
break; /*0x831c*/
*(_BYTE *)(v3++ + a1) = v4; /*0x831e*/
--a3; /*0x832b*/
}
while ( a3 ); /*0x8333*/
if ( a3 ) /*0x8339*/
*(_BYTE *)(v3 + a1) = 0; /*0x833e*/
}
return a1; /*0x8345*/
}
// Function: RstStringTrimCopy @ 0x8348 (0xef bytes)
// Index: 222/906
CHAR16 *__fastcall RstStringTrimCopy(CHAR16 *i, __int64 n21, const CHAR16 *Source, UINTN n20)
{
unsigned int v8; // edi
CHAR16 *i_1; // rsi
CHAR16 *j; // r11
const CHAR16 *k; // rbx
if ( !i || !n20 || !n21 || !Source ) /*0x838a*/
return 0; /*0x841c*/
v8 = 0; /*0x8393*/
i_1 = (CHAR16 *)MemAllocPages(n21); /*0x83a2*/
MemZero(i_1, 0, n21); /*0x83a5*/
StrnCpy(i_1, Source, n20); /*0x83b3*/
for ( j = (CHAR16 *)((char *)i_1 + n21 - 1); j > i_1 && (*(_BYTE *)j == 32 || !*(_BYTE *)j); j = (CHAR16 *)((char *)j - 1) ) /*0x83b8*/
++v8; /*0x83cf*/
*((_BYTE *)j + 1) = 0; /*0x83d6*/
for ( k = i_1; *(_BYTE *)k == 32; ++v8 ) /*0x83e0*/
k = (const CHAR16 *)((char *)k + 1); /*0x83e2*/
MemZero(i, 0, n21); /*0x83f3*/
StrnCpy(i, k, n21 - v8); /*0x8407*/
MemZeroThenFree(i_1, n21); /*0x8412*/
return i; /*0x842d*/
}
// Function: RstParseDecimalString @ 0x8438 (0x154 bytes)
// Index: 223/906
__int64 __fastcall RstParseDecimalString(
__int64 a1,
unsigned __int64 n9,
unsigned __int8 i,
unsigned __int64 *a4,
unsigned __int64 *a5)
{
__int64 v5; // r14
char v10; // di
unsigned __int8 n9_2; // si
CHAR16 *v12; // rbx
unsigned __int8 n9_1; // al
__int64 n9_4; // rdx
CHAR16 n46; // cx
unsigned __int8 n9_3; // al
__int64 n9_5; // rcx
unsigned __int8 j; // dl
CHAR16 n0x30; // cx
unsigned __int64 n0xA; // rax
v5 = 2 * n9; /*0x8454*/
v10 = 1; /*0x8467*/
n9_2 = 0; /*0x846a*/
v12 = (CHAR16 *)MemAllocPages(2 * n9); /*0x8475*/
n9_1 = 0; /*0x8478*/
if ( n9 ) /*0x847e*/
{
n9_4 = 0; /*0x8480*/
while ( 1 ) /*0x8483*/
{
n46 = *(_WORD *)(a1 + 2 * n9_4); /*0x8483*/
if ( n46 == 46 ) /*0x848c*/
break; /*0x848c*/
if ( n46 < 0x30u || n46 > 0x39u ) /*0x849e*/
{
n9_2 = -1; /*0x84b1*/
goto LABEL_10; /*0x84b4*/
}
++n9_1; /*0x84a0*/
v12[n9_4] = n46; /*0x84a3*/
n9_4 = n9_1; /*0x84a7*/
if ( n9_1 >= n9 ) /*0x84ad*/
goto LABEL_10; /*0x84ad*/
}
n9_2 = n9_1; /*0x84b6*/
}
LABEL_10:
v12[n9_1] = 0; /*0x84b9*/
*a4 = StrToUpper(v12); /*0x84c9*/
if ( n9_2 != 0xFF ) /*0x84d1*/
{
n9_3 = 0; /*0x84da*/
if ( n9 ) /*0x84e0*/
{
n9_5 = 0; /*0x84e2*/
do /*0x84f3*/
{
++n9_3; /*0x84e5*/
v12[n9_5] = 0; /*0x84e8*/
n9_5 = n9_3; /*0x84ed*/
}
while ( n9_3 < n9 ); /*0x84f3*/
}
for ( j = 0; j < i; ++j ) /*0x84fb*/
{
if ( j + n9_2 + 1 < n9 ) /*0x850f*/
{
n0x30 = *(_WORD *)(a1 + 2 * (j + (unsigned __int64)n9_2) + 2); /*0x851c*/
if ( n0x30 < 0x30u || n0x30 > 0x39u ) /*0x852c*/
{
v10 = 0; /*0x853d*/
break; /*0x853d*/
}
v12[j] = n0x30; /*0x852e*/
}
}
n0xA = StrToUpper(v12); /*0x8540*/
*a5 = n0xA; /*0x854d*/
if ( !v10 && n0xA < 0xA ) /*0x8559*/
*a5 = 10 * n0xA; /*0x8562*/
}
return MemZeroThenFree(v12, v5); /*0x857a*/
}
// Function: RstFormatDiskSize @ 0x858c (0x12f bytes)
// Index: 224/906
__int64 __fastcall RstFormatDiskSize(__int64 a1, unsigned __int64 a2, unsigned int a3, char a4, char a5)
{
__int64 n5; // rcx
unsigned __int64 v7; // r8
unsigned __int64 v8; // rbx
if ( a2 && a3 ) /*0x85a4*/
{
n5 = 0; /*0x85b1*/
v7 = (1000 * (a2 / (0x100000 / a3))) >> 10; /*0x85ce*/
if ( a4 == 1 ) /*0x85d6*/
n5 = 5; /*0x85d6*/
v8 = (n5 + v7) / 0xA; /*0x85ed*/
if ( a1 ) /*0x85f4*/
{
if ( a5 ) /*0x860a*/
RstHelper_8da8( /*0x8641*/
a1,
0xAu,
"%4ld.%ld%ldGB",
(unsigned int)v8 / 0x64,
(unsigned int)v8 / 0xA % 0xA,
(unsigned int)v8 % 0xA);
else
RstHelper_8da8( /*0x868d*/
a1,
0xAu,
"%ld.%ld%ldGB",
(unsigned int)v8 / 0x64,
(unsigned int)v8 / 0xA % 0xA,
(unsigned int)v8 % 0xA);
}
return (unsigned int)v8; /*0x8692*/
}
else
{
RstHelper_8da8(a1, 0xAu, "%4ld.%ldMB", 0, 0); /*0x86ae*/
return 0; /*0x86b3*/
}
}
// Function: RstParseUnicodeString @ 0x86bc (0x70 bytes)
// Index: 225/906
unsigned __int64 __fastcall RstParseUnicodeString(_BYTE *a1, _BYTE **i, _QWORD *a3)
{
_BYTE *v3; // rax
_BYTE **j; // rbx
v3 = *i; /*0x86d0*/
for ( j = i; ; v3 = *j ) /*0x86d6*/
{
if ( !v3 ) /*0x8700*/
return 0x8000000000000003uLL; /*0x8702*/
if ( !StrnCpy16(v3, a1, 0xFFFF) ) /*0x86ec*/
break; /*0x86ec*/
j += 2; /*0x86f6*/
}
*a3 = j[1]; /*0x8725*/
return 0; /*0x871b*/
}
// Function: RstAsciiStrnToUnicodeStrn @ 0x872c (0x25 bytes)
// Index: 226/906
__int64 __fastcall RstAsciiStrnToUnicodeStrn(_WORD *a1, unsigned int i, _BYTE *a3)
{
unsigned int j; // r9d
__int64 result; // rax
for ( j = 0; j < i; ++a3 ) /*0x8731*/
{
result = (unsigned __int8)*a3; /*0x8733*/
*a1 = result; /*0x8737*/
if ( !*a3 ) /*0x873a*/
break; /*0x873e*/
++j; /*0x8740*/
++a1; /*0x8743*/
}
return result; /*0x874f*/
}
// Function: RstUnicodeStrnToAsciiStrn @ 0x8754 (0x27 bytes)
// Index: 227/906
char __fastcall RstUnicodeStrnToAsciiStrn(char *a1, unsigned int n16, char *a3)
{
unsigned int i; // r9d
char result; // al
for ( i = 0; i < n16; a3 += 2 ) /*0x875d*/
{
result = *a3; /*0x875f*/
*a1 = *a3; /*0x8762*/
if ( !*(_WORD *)a3 ) /*0x8764*/
break; /*0x8768*/
++i; /*0x876a*/
++a1; /*0x876d*/
}
return result; /*0x8779*/
}
// Function: RstGetMemoryMap @ 0x877c (0x50 bytes)
// Index: 228/906
unsigned __int64 RstGetMemoryMap()
{
__int64 v1; // [rsp+30h] [rbp+8h] BYREF
__int64 v2; // [rsp+38h] [rbp+10h] BYREF
RstReadTsc(&v2); /*0x8785*/
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(3000); /*0x8796*/
RstReadTsc(&v1); /*0x87a1*/
dword_35430 = (v1 - v2) / 0xBB8uLL; /*0x87c1*/
return 0xAEC33E1F671529A5uLL * (v1 - v2); /*0x87c7*/
}
// Function: RstGetTimestamp @ 0x87cc (0x27 bytes)
// Index: 229/906
__int64 __fastcall RstGetTimestamp(unsigned int a1)
{
__int64 v1; // rbx
__int64 v3; // [rsp+38h] [rbp+10h] BYREF
v1 = a1; /*0x87d2*/
RstReadTsc(&v3); /*0x87d9*/
return v3 + v1 * (unsigned int)dword_35430; /*0x87ed*/
}
// Function: RstTimestampExpired @ 0x87f4 (0x24 bytes)
// Index: 230/906
bool __fastcall RstTimestampExpired(unsigned __int64 *a1)
{
unsigned __int64 v3; // [rsp+30h] [rbp+8h] BYREF
RstReadTsc(&v3); /*0x8802*/
return v3 >= *a1; /*0x8812*/
}
// Function: RstMicrosecondsToTime @ 0x8818 (0x2a bytes)
// Index: 231/906
__int64 __fastcall RstMicrosecondsToTime(unsigned __int16 a1)
{
__int64 result; // rax
__int64 v2; // [rsp+38h] [rbp+10h] BYREF
v2 = RstGetTimestamp(1000000 * (unsigned int)a1); /*0x882a*/
do /*0x883b*/
result = RstTimestampExpired(&v2); /*0x8834*/
while ( !(_BYTE)result ); /*0x883b*/
return result; /*0x883d*/
}
// Function: RstGetUefiTime @ 0x8844 (0x1e bytes)
// Index: 232/906
__int64 RstGetUefiTime()
{
_BYTE v1[8]; // [rsp+20h] [rbp-18h] BYREF
unsigned int v2; // [rsp+28h] [rbp-10h]
(*(void (__fastcall **)(_BYTE *, _QWORD))(RuntimeServices + 24))(v1, 0); /*0x8856*/
return v2; /*0x885d*/
}
// Function: RstUint64ToHexString @ 0x8864 (0xbd bytes)
// Index: 233/906
unsigned __int16 __fastcall RstUint64ToHexString(_BYTE *a1, unsigned __int64 a2, char a3, unsigned __int16 a4)
{
_BYTE *i; // rdi
unsigned __int16 v6; // bp
char v7; // al
char n48; // r10
__int64 v9; // rbx
_BYTE i_1[56]; // [rsp+20h] [rbp-38h] BYREF
i = i_1; /*0x888a*/
v6 = 0; /*0x888e*/
do /*0x88b2*/
{
v7 = a2; /*0x8892*/
a2 >>= 4; /*0x889c*/
++v6; /*0x88a3*/
*i++ = a0123456789abcd_0[v7 & 0xF]; // "0123456789ABCDEF" /*0x88aa*/
}
while ( a2 ); /*0x88b2*/
if ( (a3 & 0x20) != 0 ) /*0x88b8*/
n48 = 48; /*0x88ba*/
else
n48 = ~(32 * a3) & 0x20; /*0x88c6*/
if ( v6 < a4 ) /*0x88ce*/
{
v9 = (unsigned __int16)(a4 - v6); /*0x88da*/
MemZero(i, n48, v9); /*0x88e1*/
i += v9; /*0x88e6*/
v6 += v9; /*0x88e9*/
}
while ( i != i_1 ) /*0x8900*/
*a1++ = *--i; /*0x88f3*/
*a1 = 0; /*0x8907*/
return v6; /*0x8917*/
}
// Function: RstInt64ToDecimalString @ 0x8924 (0x17c bytes)
// Index: 234/906
unsigned __int16 __fastcall RstInt64ToDecimalString(_BYTE *i, __int64 a2, char a3, unsigned __int16 a4)
{
__int64 v5; // r10
_BYTE *i_1; // rbp
__int64 *v7; // rsi
char v8; // r13
unsigned __int16 v9; // di
__int16 v10; // r11
char n48; // r9
__int64 v12; // rdx
__int16 v13; // ax
unsigned __int16 v14; // di
unsigned __int16 v15; // ax
_BYTE *i_2; // rcx
__int64 v17; // rbx
__int64 v18; // rax
__int64 v20; // [rsp+20h] [rbp-48h] BYREF
v5 = a2; /*0x8947*/
i_1 = i; /*0x894d*/
v7 = &v20; /*0x8950*/
v8 = 0; /*0x8958*/
v9 = 0; /*0x895b*/
if ( a2 < 0 && a3 >= 0 ) /*0x8964*/
{
v8 = 1; /*0x8966*/
v5 = -a2; /*0x8969*/
}
v10 = 0; /*0x8970*/
n48 = 48; /*0x8974*/
do /*0x89ea*/
{
v12 = v5 / 10; /*0x8993*/
v13 = v5 % 10; /*0x89a7*/
if ( v13 < 0 ) /*0x89ab*/
v13 = -v13; /*0x89ad*/
++v9; /*0x89b3*/
v5 /= 10; /*0x89b7*/
*(_BYTE *)v7 = v13 + 48; /*0x89ba*/
v7 = (__int64 *)((char *)v7 + 1); /*0x89bc*/
if ( (a3 & 8) == 8 && v9 == 3 * (v9 / 3) ) /*0x89db*/
{
*(_BYTE *)v7 = 44; /*0x89dd*/
v7 = (__int64 *)((char *)v7 + 1); /*0x89e0*/
++v10; /*0x89e3*/
}
}
while ( v12 ); /*0x89ea*/
if ( v8 ) /*0x89ef*/
{
*(_BYTE *)v7 = 45; /*0x89f1*/
v7 = (__int64 *)((char *)v7 + 1); /*0x89f4*/
++v9; /*0x89f7*/
}
v14 = v10 + v9; /*0x89fb*/
if ( (a3 & 0x20) == 0 ) /*0x8a03*/
n48 = 32; /*0x8a05*/
v15 = a4 - v14; /*0x8a0c*/
if ( (a3 & 1) != 0 )
{
i_2 = &i[v14]; /*0x8a17*/
if ( (v15 & (unsigned __int16)-(v14 < a4)) != 0 )
MemZero(i_2, n48, v14 < a4 ? v15 : 0);
}
else if ( (v15 & (unsigned __int16)-(v14 < a4)) != 0 )
{
v17 = v14 < a4 ? v15 : 0;
MemZero(i, n48, v17); /*0x8a4e*/
i_1 += v17; /*0x8a53*/
}
if ( v14 ) /*0x8a5a*/
{
v18 = v14; /*0x8a5c*/
do /*0x8a6d*/
{
v7 = (__int64 *)((char *)v7 - 1); /*0x8a5f*/
*i_1++ = *(_BYTE *)v7; /*0x8a64*/
--v18; /*0x8a6a*/
}
while ( v18 ); /*0x8a6d*/
}
if ( a4 > v14 ) /*0x8a80*/
v14 = a4; /*0x8a80*/
i_1[v14] = 0; /*0x8a8b*/
return v14; /*0x8a93*/
}
// Function: HiiGetStringOrNull @ 0x8aa0 (0x306 bytes)
// Index: 235/906
__int64 __fastcall HiiGetStringOrNull(__int64 a1, unsigned __int16 n0x100, char *a3, va_list va)
{
int n0x100_1; // ebx
char *v5; // rsi
unsigned __int64 *v8; // rdi
__int64 n0x100_2; // rax
char v10; // al
__int16 v11; // dx
unsigned __int16 v12; // r9
unsigned int n0x39; // r8d
__int16 v14; // ax
unsigned int n114; // ecx
unsigned __int64 v16; // rax
unsigned __int16 v17; // ax
__int64 v18; // rax
const char *_null_string_; // r8
unsigned __int16 v20; // dx
__int64 n0x100_3; // rax
__int64 n0x100_4; // rcx
__int64 v23; // rcx
__int64 n0x100_5; // rax
v5 = a3; /*0x8abf*/
LOWORD(n0x100_1) = 0; /*0x8acd*/
if ( !*a3 ) /*0x8ad4*/
goto LABEL_79; /*0x8ad4*/
v8 = (unsigned __int64 *)(va - 1); /*0x8ada*/
do /*0x8d74*/
{
if ( (unsigned __int16)n0x100_1 >= n0x100 ) /*0x8af3*/
break; /*0x8af3*/
if ( *v5 != 37 ) /*0x8afc*/
{
if ( *v5 == 10 ) /*0x8b01*/
{
n0x100_2 = (unsigned __int16)n0x100_1; /*0x8b03*/
LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8b06*/
*(_BYTE *)(n0x100_2 + a1) = 13; /*0x8b0a*/
}
v10 = *v5; /*0x8b0e*/
LABEL_46:
*(_BYTE *)((unsigned __int16)n0x100_1 + a1) = v10; /*0x8c33*/
goto LABEL_56; /*0x8c39*/
}
v11 = 0; /*0x8b15*/
v12 = 0; /*0x8b19*/
while ( 1 ) /*0x8bd8*/
{
while ( 1 ) /*0x8bd2*/
{
while ( 1 ) /*0x8b28*/
{
while ( 1 ) /*0x8b1d*/
{
n0x39 = (unsigned __int8)*++v5; /*0x8b20*/
if ( n0x39 > 0x39 ) /*0x8b28*/
break; /*0x8b28*/
if ( (unsigned __int8)*v5 >= 0x31u ) /*0x8b32*/
goto LABEL_18; /*0x8b32*/
switch ( n0x39 ) /*0x8b3a*/
{
case ' ': /*0x8b3a*/
v11 |= 4u; /*0x8bb6*/
break;
case '+': /*0x8b3a*/
v11 |= 2u; /*0x8bb0*/
break;
case ',': /*0x8b3a*/
v11 |= 8u; /*0x8baa*/
break;
case '-': /*0x8b3a*/
v11 |= 1u; /*0x8b9c*/
break;
default:
if ( n0x39 != 46 ) /*0x8b4e*/
{
if ( n0x39 != 48 ) /*0x8b53*/
goto LABEL_38; /*0x8b53*/
v11 |= 0x20u; /*0x8b59*/
}
LABEL_18:
v12 = 0; /*0x8b5d*/
do /*0x8b95*/
{
if ( (_BYTE)n0x39 == 46 ) /*0x8b64*/
++v5; /*0x8b66*/
v14 = (unsigned __int8)*v5++; /*0x8b75*/
LOBYTE(n0x39) = *v5; /*0x8b7b*/
v12 = v14 + 10 * v12 - 48; /*0x8b86*/
}
while ( (unsigned __int8)*v5 >= 0x30u && (unsigned __int8)n0x39 <= 0x39u ); /*0x8b95*/
--v5; /*0x8b97*/
break;
}
}
if ( n0x39 != 70 ) /*0x8bc0*/
{
if ( n0x39 == 76 ) /*0x8bc6*/
goto LABEL_35; /*0x8bc6*/
if ( n0x39 == 78 ) /*0x8bcc*/
goto LABEL_34; /*0x8bcc*/
if ( n0x39 != 102 ) /*0x8bd2*/
break; /*0x8bd2*/
}
LABEL_37:
v11 |= 0x10u; /*0x8bf6*/
}
if ( n0x39 != 108 ) /*0x8bd8*/
break; /*0x8bd8*/
LABEL_35:
if ( (v11 & 0x10) == 0 ) /*0x8bec*/
goto LABEL_37; /*0x8bec*/
v11 |= 0x100u; /*0x8bee*/
}
if ( n0x39 != 110 ) /*0x8bde*/
break; /*0x8bde*/
LABEL_34:
v11 |= 0x40u; /*0x8be0*/
}
LABEL_38:
n114 = (unsigned __int8)*v5; /*0x8bff*/
if ( n114 > 0x64 ) /*0x8c05*/
{
if ( n114 == 114 ) /*0x8c58*/
{
v17 = EfiStatusToStringWide(*++v8, a1 + (unsigned __int16)n0x100_1, n0x100); /*0x8d5a*/
goto LABEL_77; /*0x8d5a*/
}
if ( n114 != 115 ) /*0x8c61*/
{
if ( n114 == 117 ) /*0x8c66*/
{
v11 |= 0x80u; /*0x8c9f*/
LABEL_60:
++v8; /*0x8ca2*/
if ( (v11 & 0x100) != 0 ) /*0x8cad*/
v18 = *v8; /*0x8caf*/
else
v18 = *(unsigned int *)v8; /*0x8cb4*/
v17 = RstInt64ToDecimalString((_BYTE *)(a1 + (unsigned __int16)n0x100_1), v18, v11, v12); /*0x8cc3*/
goto LABEL_77; /*0x8cc8*/
}
if ( n114 != 119 ) /*0x8c6b*/
{
if ( n114 != 120 ) /*0x8c70*/
goto LABEL_55; /*0x8c70*/
LABEL_48:
++v8; /*0x8c3f*/
if ( (v11 & 0x100) != 0 ) /*0x8c4a*/
v16 = *v8; /*0x8c4c*/
else
v16 = *(unsigned int *)v8; /*0x8c81*/
v17 = RstUint64ToHexString((_BYTE *)(a1 + (unsigned __int16)n0x100_1), v16, v11, v12); /*0x8c90*/
LABEL_77:
LOWORD(n0x100_1) = v17 + n0x100_1; /*0x8d5f*/
goto LABEL_78; /*0x8d65*/
}
}
LABEL_64:
++v8; /*0x8ccd*/
_null_string_ = "<null string>"; /*0x8cd0*/
v20 = 0; /*0x8cd7*/
if ( *v8 ) /*0x8cdb*/
_null_string_ = (const char *)*v8; /*0x8ce1*/
while ( *_null_string_ && (v20 < v12 || !v12) ) /*0x8cf1*/
{
if ( *_null_string_ == 10 ) /*0x8cf5*/
{
n0x100_3 = (unsigned __int16)n0x100_1; /*0x8cf7*/
LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8cfa*/
*(_BYTE *)(n0x100_3 + a1) = 13; /*0x8cfe*/
}
n0x100_4 = (unsigned __int16)n0x100_1; /*0x8d05*/
LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8d08*/
*(_BYTE *)(n0x100_4 + a1) = *_null_string_; /*0x8d0c*/
_null_string_ += (*v5 == 119) + 1; /*0x8d1b*/
++v20; /*0x8d1e*/
}
if ( v20 < v12 ) /*0x8d2e*/
{
v23 = (unsigned __int16)(v12 - v20); /*0x8d34*/
do /*0x8d46*/
{
n0x100_5 = (unsigned __int16)n0x100_1; /*0x8d38*/
LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8d3b*/
--v23; /*0x8d3f*/
*(_BYTE *)(n0x100_5 + a1) = 32; /*0x8d42*/
}
while ( v23 ); /*0x8d46*/
}
goto LABEL_78; /*0x8d46*/
}
switch ( n114 ) /*0x8c07*/
{
case 'd': /*0x8c07*/
goto LABEL_60; /*0x8c07*/
case '%': /*0x8c07*/
break; /*0x8c10*/
case 'S': /*0x8c07*/
goto LABEL_64; /*0x8c15*/
case 'X': /*0x8c07*/
v11 |= 0x20u; /*0x8c3b*/
goto LABEL_48; /*0x8c3b*/
case 'a': /*0x8c07*/
goto LABEL_64; /*0x8c23*/
case 'c': /*0x8c07*/
v10 = *(_BYTE *)++v8; /*0x8c31*/
goto LABEL_46; /*0x8c31*/
}
LABEL_55:
*(_BYTE *)((unsigned __int16)n0x100_1 + a1) = n114; /*0x8c72*/
LABEL_56:
LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8c78*/
LABEL_78:
++v5; /*0x8d6c*/
}
while ( *v5 ); /*0x8d74*/
LABEL_79:
*(_BYTE *)((unsigned __int16)n0x100_1 + a1) = 0; /*0x8d7d*/
return (unsigned int)(n0x100_1 + 1); /*0x8d98*/
}
// Function: RstHelper_8da8 @ 0x8da8 (0x1d bytes)
// Index: 236/906
__int64 sub_8DA8(__int64 a1, unsigned __int16 n0x100, char *a3, ...)
{
va_list va; // [rsp+48h] [rbp+20h] BYREF
va_start(va, a3);
return HiiGetStringOrNull(a1, n0x100, a3, va); /*0x8dc0*/
}
// Function: EfiStatusToStringWide @ 0x8dc8 (0x265 bytes)
// Index: 237/906
__int64 __fastcall EfiStatusToStringWide(unsigned __int64 a1, __int64 a2, unsigned __int16 n0x100)
{
const char *EFI_VOLUME_FULL; // r9
unsigned __int16 v4; // ax
if ( a1 > 0x800000000000000AuLL ) /*0x8de0*/
{
switch ( a1 ) /*0x8f86*/
{
case 0x800000000000000BuLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_VOLUME_FULL"; /*0x8f88*/
goto LABEL_47; /*0x8f8f*/
case 0x800000000000000CuLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_NO_MEDIA"; /*0x8f91*/
goto LABEL_47; /*0x8f98*/
case 0x800000000000000DuLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_MEDIA_CHANGED"; /*0x8f9a*/
goto LABEL_47; /*0x8fa1*/
case 0x800000000000000EuLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_NOT_FOUND"; /*0x8fa3*/
goto LABEL_47; /*0x8faa*/
case 0x800000000000000FuLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_ACCESS_DENIED"; /*0x8fac*/
goto LABEL_47; /*0x8fb3*/
case 0x8000000000000010uLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_NO_RESPONSE"; /*0x8fb5*/
goto LABEL_47; /*0x8fbc*/
case 0x8000000000000011uLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_NO_MAPPING"; /*0x8fbe*/
goto LABEL_47; /*0x8fc5*/
case 0x8000000000000012uLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_TIMEOUT"; /*0x8fc7*/
goto LABEL_47; /*0x8fce*/
case 0x8000000000000013uLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_NOT_STARTED"; /*0x8fd0*/
goto LABEL_47; /*0x8fd7*/
case 0x8000000000000014uLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_ALREADY_STARTED"; /*0x8fd9*/
goto LABEL_47; /*0x8fe0*/
case 0x8000000000000015uLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_ABORTED"; /*0x8fe2*/
goto LABEL_47; /*0x8fe9*/
case 0x8000000000000016uLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_ICMP_ERROR"; /*0x8feb*/
goto LABEL_47; /*0x8ff2*/
case 0x8000000000000017uLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_TFTP_ERROR"; /*0x8ff4*/
goto LABEL_47; /*0x8ffb*/
case 0x8000000000000018uLL: /*0x8f86*/
EFI_VOLUME_FULL = "EFI_PROTOCOL_ERROR"; /*0x8ffd*/
goto LABEL_47; /*0x8ffd*/
default:
goto LABEL_48;
}
}
if ( a1 == 0x800000000000000AuLL ) /*0x8de6*/
{
EFI_VOLUME_FULL = "EFI_VOLUME_CORRUPTED"; /*0x8f52*/
}
else if ( a1 > 0x8000000000000003uLL ) /*0x8df9*/
{
switch ( a1 ) /*0x8eb5*/
{
case 0x8000000000000004uLL: /*0x8eb5*/
EFI_VOLUME_FULL = "EFI_BAD_BUFFER_SIZE"; /*0x8f46*/
break;
case 0x8000000000000005uLL: /*0x8eb5*/
EFI_VOLUME_FULL = "EFI_BUFFER_TOO_SMALL"; /*0x8f3a*/
break;
case 0x8000000000000006uLL: /*0x8eb5*/
EFI_VOLUME_FULL = "EFI_NOT_READY"; /*0x8f2e*/
break;
case 0x8000000000000007uLL: /*0x8eb5*/
EFI_VOLUME_FULL = "EFI_DEVICE_ERROR"; /*0x8f22*/
break;
case 0x8000000000000008uLL: /*0x8eb5*/
EFI_VOLUME_FULL = "EFI_WRITE_PROTECTED"; /*0x8f16*/
break;
default:
EFI_VOLUME_FULL = "EFI_OUT_OF_RESOURCES"; /*0x8f0a*/
break;
}
}
else if ( a1 == 0x8000000000000003uLL ) /*0x8dff*/
{
EFI_VOLUME_FULL = "EFI_UNSUPPORTED"; /*0x8e9c*/
}
else if ( a1 ) /*0x8e08*/
{
switch ( a1 ) /*0x8e12*/
{
case 1uLL: /*0x8e12*/
EFI_VOLUME_FULL = "EFI_WARN_UNKNOWN_GLYPH"; /*0x8e84*/
break;
case 2uLL: /*0x8e12*/
EFI_VOLUME_FULL = "EFI_WARN_DELETE_FAILURE"; /*0x8e78*/
break;
case 3uLL: /*0x8e12*/
EFI_VOLUME_FULL = "EFI_WARN_WRITE_FAILURE"; /*0x8e6c*/
break;
case 4uLL: /*0x8e12*/
EFI_VOLUME_FULL = "EFI_WARN_BUFFER_TOO_SMALL"; /*0x8e60*/
break;
case 0x8000000000000001uLL: /*0x8e12*/
EFI_VOLUME_FULL = "EFI_LOAD_ERROR"; /*0x8e54*/
break;
case 0x8000000000000002uLL: /*0x8e12*/
EFI_VOLUME_FULL = "EFI_INVALID_PARAMETER"; /*0x8e48*/
break;
default:
LABEL_48:
v4 = RstHelper_8da8(a2, n0x100, "%X", a1); /*0x900d*/
return (unsigned int)v4 - 1; /*0x901e*/
}
}
else
{
EFI_VOLUME_FULL = "EFI_SUCCESS"; /*0x8e90*/
}
LABEL_47:
v4 = RstHelper_8da8(a2, n0x100, "%a", EFI_VOLUME_FULL); /*0x9004*/
return (unsigned int)v4 - 1; /*0x9028*/
}
// Function: RstReadTsc @ 0x9070 (0x8 bytes)
// Index: 238/906
unsigned __int64 __fastcall RstReadTsc(_DWORD *a1)
{
unsigned __int64 result; // rax
int v2; // edx
result = __rdtsc(); /*0x9070*/
v2 = HIDWORD(result); /*0x9070*/
result = (unsigned int)result; /*0x9070*/
*a1 = result; /*0x9072*/
a1[1] = v2; /*0x9074*/
return result; /*0x9077*/
}
// Function: StrLenSafe @ 0x9078 (0x79 bytes)
// Index: 239/906
unsigned __int64 __fastcall StrLenSafe(_WORD *a1, __int64 n1000000)
{
unsigned __int64 result; // rax
if ( RstDebugEnabled() && ((unsigned __int8)a1 & 1) != 0 ) /*0x909c*/
DebugAssert("SecureString.cpp", 0x20u, "((UINTN) String & 0x00000001) == 0"); /*0x90af*/
if ( !a1 || !n1000000 ) /*0x90bc*/
return 0; /*0x90df*/
result = 0; /*0x90be*/
if ( *a1 ) /*0x90c1*/
{
while ( result < n1000000 - 1 ) /*0x90cd*/
{
if ( !a1[++result] ) /*0x90d2*/
return result; /*0x90d6*/
}
return n1000000; /*0x90da*/
}
return result; /*0x90eb*/
}
// Function: RstStringFirstNullOffset @ 0x90f4 (0x2b bytes)
// Index: 240/906
unsigned __int64 __fastcall RstStringFirstNullOffset(_BYTE *i, unsigned __int64 n20)
{
unsigned __int64 result; // rax
if ( !i || !n20 ) /*0x90fc*/
return 0; /*0x911c*/
result = 0; /*0x90fe*/
if ( *i ) /*0x9100*/
{
while ( result < n20 - 1 ) /*0x910b*/
{
if ( !i[++result] ) /*0x9110*/
return result; /*0x9114*/
}
return n20; /*0x9118*/
}
return result; /*0x9116*/
}
// Function: Assert_9 @ 0x9120 (0x20b bytes)
// Index: 241/906
__int64 __fastcall Assert_9(_BYTE *i, unsigned __int64 i_1, unsigned __int64 n20)
{
unsigned __int64 n20_1; // rbp
if ( RstDebugEnabled() && (i_1 & 1) != 0 ) /*0x9158*/
DebugAssert("SecureString.cpp", 0x72u, "((UINTN) Destination & 0x00000001) == 0"); /*0x9169*/
if ( RstDebugEnabled() ) /*0x916e*/
{
if ( i_1 ) /*0x917b*/
goto LABEL_9; /*0x917b*/
DebugAssert("SecureString.cpp", 0x77u, "(Destination != 0)"); /*0x918c*/
}
if ( !i_1 ) /*0x9194*/
return 0x8000000000000002uLL; /*0x91a0*/
LABEL_9:
if ( RstDebugEnabled() ) /*0x91a5*/
{
if ( i ) /*0x91b2*/
goto LABEL_13; /*0x91b2*/
DebugAssert("SecureString.cpp", 0x78u, "(Source != 0)"); /*0x91c3*/
}
if ( !i ) /*0x91cb*/
return 0x8000000000000002uLL; /*0x91cb*/
LABEL_13:
if ( RstDebugEnabled() ) /*0x91cd*/
{
if ( n20 <= 0xF4240 ) /*0x91df*/
goto LABEL_17; /*0x91df*/
DebugAssert("SecureString.cpp", 0x7Eu, "(DestMax <= 1000000)"); /*0x91f0*/
}
if ( n20 > 0xF4240 ) /*0x91f8*/
return 0x8000000000000002uLL; /*0x91f8*/
LABEL_17:
RstDebugEnabled(); /*0x91fa*/
if ( RstDebugEnabled() ) /*0x9226*/
{
if ( n20 ) /*0x9233*/
goto LABEL_21; /*0x9233*/
DebugAssert("SecureString.cpp", 0x87u, "(DestMax != 0)"); /*0x9244*/
}
if ( !n20 ) /*0x924c*/
return 0x8000000000000002uLL; /*0x924c*/
LABEL_21:
n20_1 = RstStringFirstNullOffset(i, n20); /*0x9252*/
if ( RstDebugEnabled() ) /*0x9260*/
{
if ( n20 > n20_1 ) /*0x926d*/
goto LABEL_26; /*0x926d*/
DebugAssert("SecureString.cpp", 0x8Du, "(DestMax > SourceLen)"); /*0x927e*/
}
if ( n20 <= n20_1 ) /*0x9286*/
return 0x8000000000000005uLL; /*0x9292*/
LABEL_26:
if ( !RstDebugEnabled() ) /*0x929c*/
goto LABEL_32; /*0x929c*/
if ( (unsigned __int64)i > i_1 ) /*0x92a1*/
{
LABEL_30:
if ( (unsigned __int64)i >= i_1 + 2 * n20 ) /*0x92b9*/
goto LABEL_32; /*0x92b9*/
goto LABEL_31; /*0x92b9*/
}
if ( i_1 >= (unsigned __int64)&i[n20_1 + 1] ) /*0x92ab*/
{
if ( i_1 > (unsigned __int64)i ) /*0x92b0*/
goto LABEL_33; /*0x92b0*/
goto LABEL_30; /*0x92b0*/
}
LABEL_31:
DebugAssert( /*0x92bb*/
"SecureString.cpp",
0x92u,
"!InternalSafeStringIsOverlap (Destination, DestMax * sizeof(CHAR16), (void *)Source, SourceLen + 1)");
LABEL_32:
if ( (unsigned __int64)i > i_1 ) /*0x92d2*/
{
LABEL_35:
if ( (unsigned __int64)i < i_1 + 2 * n20 ) /*0x92ea*/
return 0x800000000000000FuLL; /*0x92ea*/
goto LABEL_38; /*0x92ea*/
}
LABEL_33:
if ( i_1 < (unsigned __int64)&i[n20_1 + 1] ) /*0x92dc*/
return 0x800000000000000FuLL; /*0x92f6*/
if ( (unsigned __int64)i >= i_1 ) /*0x92e1*/
goto LABEL_35; /*0x92e1*/
LABEL_38:
while ( *i ) /*0x930a*/
{
*(_WORD *)i_1 = (unsigned __int8)*i; /*0x92fb*/
i_1 += 2LL; /*0x92fe*/
++i; /*0x9302*/
}
*(_WORD *)i_1 = 0; /*0x930c*/
return 0; /*0x9321*/
}
// Function: StrLenSafe_w @ 0x932c (0xa bytes)
// Index: 242/906
unsigned __int64 StrLenSafe_w_WORD *a1)
{
return StrLenSafe(a1, 1000000);
}
// Function: RstDriverInit2 @ 0x9338 (0x2d bytes)
// Index: 243/906
__int64 __fastcall RstDriverInit2(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
UefiBootServicesTableLibConstructor((__int64)ImageHandle, (__int64)SystemTable); /*0x9348*/
UefiRuntimeServicesTableLibConstructor(ImageHandle, SystemTable); /*0x9353*/
return 0; /*0x935f*/
}
// Function: RstGetGlobalContext @ 0x9368 (0x8 bytes)
// Index: 244/906
void *RstGetGlobalContext()
{
return &qword_27920; /*0x936f*/
}
// Function: RstValidateGlobalContext @ 0x9370 (0x29 bytes)
// Index: 245/906
char RstValidateGlobalContext()
{
char result; // al
byte_2792F = 0; /*0x9380*/
result = -(char)RstChecksum16(&qword_27920, 38); /*0x938c*/
byte_2792F = result; /*0x938e*/
return result; /*0x9394*/
}
// Function: RstCompareDriverSignature @ 0x939c (0x30 bytes)
// Index: 246/906
char RstCompareDriverSignature()
{
unsigned __int8 v0; // r8
char result; // al
v0 = 0; /*0x939c*/
result = 1; /*0x93a6*/
while ( *((_BYTE *)&dword_35434 + (_QWORD)_ImageBase + v0) == *((_BYTE *)&dword_23A30 + (_QWORD)_ImageBase + v0) ) /*0x93bc*/
{
if ( ++v0 > 6u ) /*0x93c5*/
return result; /*0x93c5*/
}
return 0; /*0x93c7*/
}
// Function: RstVrocModeFromString @ 0x93cc (0x70 bytes)
// Index: 247/906
__int64 __fastcall RstVrocModeFromString(CHAR16 *FirstString)
{
if ( !(unsigned __int16)StrnCmp(FirstString, "Premium Intel VROC", 8u) ) /*0x93e8*/
return 2; /*0x93f2*/
if ( (unsigned __int16)StrnCmp(FirstString, "Standard Intel VROC", 8u) )
return (unsigned __int16)StrnCmp(FirstString, "Intel-SSD-only Intel VROC", 8u) == 0 ? 3 : 0;
return 1; /*0x9436*/
}
// Function: RstDriverModeSet @ 0x943c (0xd8 bytes)
// Index: 248/906
__int64 __fastcall RstDriverModeSet(int a1, char a2)
{
char *v4; // rax
__int64 n6; // rdx
char *v6; // rbx
unsigned int v7; // eax
__int64 n41682; // rax
unsigned __int16 v9; // [rsp+30h] [rbp+8h] BYREF
v4 = (char *)RstGetGlobalContext(); /*0x9450*/
v6 = v4; /*0x9455*/
switch ( a1 ) /*0x945a*/
{
case 0: /*0x945a*/
*(_DWORD *)(v4 + 26) &= 0xFFFFFFE9; /*0x945c*/
*((_WORD *)v4 + 8) &= 0xFFE9u; /*0x9465*/
*(_DWORD *)(v4 + 34) &= 0xFFFFF8FF; /*0x9469*/
break; /*0x9470*/
case 1: /*0x945a*/
n6 = 6; /*0x947a*/
*(_DWORD *)(v4 + 26) = *(_DWORD *)(v4 + 26) & 0xFFFFFFE9 | 6; /*0x9487*/
*((_WORD *)v4 + 8) = *((_WORD *)v4 + 8) & 0xFFE9 | 6; /*0x9494*/
v7 = *(_DWORD *)(v4 + 34) & 0xFFFFF8FF | 0x500; /*0x949f*/
LABEL_7:
*(_DWORD *)(v6 + 34) = v7; /*0x94c1*/
break; /*0x94c4*/
case 2: /*0x945a*/
*(_DWORD *)(v4 + 26) |= 0x16u; /*0x94ae*/
*((_WORD *)v4 + 8) |= 0x16u; /*0x94b1*/
v7 = *(_DWORD *)(v4 + 34) & 0xFFFFF8FF | 0x600; /*0x94bc*/
goto LABEL_7; /*0x94bc*/
case 3: /*0x945a*/
*(_DWORD *)(v4 + 34) &= ~0x400u; /*0x94cb*/
*(_DWORD *)(v4 + 26) |= 0x16u; /*0x94d3*/
*((_WORD *)v4 + 8) |= 0x16u; /*0x94d6*/
*(_DWORD *)(v4 + 34) |= 0x300u; /*0x94da*/
break;
}
LOBYTE(n6) = a2; /*0x94e1*/
n41682 = RstHelper_178c(&v9, n6); /*0x94e9*/
if ( (_DWORD)n41682 == 2 ) /*0x94f1*/
{
n41682 = 41682; /*0x94f3*/
if ( v9 == 0xA2D2 ) /*0x94fd*/
*(_DWORD *)(v6 + 34) &= ~0x400u; /*0x94ff*/
}
return n41682; /*0x950e*/
}
// Function: RstAuthChallengeWriteVerifyRead @ 0x9514 (0x7c bytes)
// Index: 249/906
char __fastcall RstAuthChallengeWriteVerifyRead(CHAR16 *Source, _BYTE *a2)
{
char result; // al
CHAR16 *Source_1; // rsi
__int64 n8; // rbp
_BYTE *v7; // rcx
CHAR16 *v8; // rdx
__int64 n6; // r8
char v10; // al
result = RstAuthLockAcquire(); /*0x952e*/
if ( !result ) /*0x9535*/
{
RstAuthTpmControlAll(51); /*0x9539*/
Source_1 = Source; /*0x953e*/
n8 = 8; /*0x9541*/
do /*0x9554*/
{
*(_BYTE *)Source_1 = RstAuthTpmGetStateMask(); /*0x954b*/
Source_1 = (CHAR16 *)((char *)Source_1 + 1); /*0x954d*/
--n8; /*0x9550*/
}
while ( n8 ); /*0x9554*/
*((_BYTE *)Source + 8) = 0; /*0x9556*/
v7 = a2; /*0x955a*/
v8 = Source + 3; /*0x955d*/
n6 = 6; /*0x9561*/
do /*0x9573*/
{
v10 = *(_BYTE *)v8; /*0x9565*/
v8 = (CHAR16 *)((char *)v8 - 1); /*0x9567*/
*v7++ = v10; /*0x956a*/
--n6; /*0x956f*/
}
while ( n6 ); /*0x9573*/
a2[6] = 0; /*0x9575*/
return 0; /*0x9579*/
}
return result; /*0x958a*/
}
// Function: RstAuthVariableRead @ 0x9590 (0x7e bytes)
// Index: 250/906
char __fastcall RstAuthVariableRead(char n0x97, char *a2, unsigned __int8 n8)
{
char result; // al
__int64 n8_1; // rbx
result = RstAuthLockAcquire(); /*0x95a7*/
if ( !result ) /*0x95ae*/
{
if ( (unsigned __int8)n0x97 <= 0x97u ) /*0x95b3*/
{
if ( (unsigned __int8)(n0x97 + 0x80) > 7u ) /*0x95c1*/
{
RstAuthTpmControlAll(204); /*0x95c9*/
RstAuthTpmControlAll(240); /*0x95d0*/
RstAuthTpmControlAll(n0x97); /*0x95d7*/
RstAuthTpmControlAll(0); /*0x95de*/
if ( n8 ) /*0x95e6*/
{
n8_1 = n8; /*0x95e8*/
do /*0x95fa*/
{
*a2++ = RstAuthTpmGetStateMask(); /*0x95f1*/
--n8_1; /*0x95f6*/
}
while ( n8_1 ); /*0x95fa*/
}
return 0; /*0x95fc*/
}
else
{
return 6; /*0x95c3*/
}
}
else
{
return 5; /*0x95b5*/
}
}
return result; /*0x9608*/
}
// Function: RstSha1Round @ 0x9610 (0x3c bytes)
// Index: 251/906
__int64 __fastcall RstSha1Round(unsigned int n1732584193, unsigned int n271733878, unsigned int a3, _BYTE *n0x50)
{
if ( (unsigned __int8)n0x50 < 0x14u ) /*0x9614*/
return n271733878 & n1732584193 | a3 & ~n1732584193; /*0x9621*/
if ( (unsigned __int8)n0x50 < 0x28u ) /*0x9626*/
return a3 ^ n271733878 ^ n1732584193; /*0x9626*/
if ( (unsigned __int8)n0x50 < 0x3Cu ) /*0x9634*/
return a3 & n271733878 | n1732584193 & (a3 | n271733878); /*0x9640*/
if ( (unsigned __int8)n0x50 < 0x50u ) /*0x9647*/
return a3 ^ n271733878 ^ n1732584193; /*0x962f*/
return 0; /*0x9621*/
}
// Function: RstSha1RoundConstant @ 0x964c (0x2c bytes)
// Index: 252/906
__int64 __fastcall RstSha1RoundConstant(unsigned __int8 n0x14)
{
if ( n0x14 < 0x14u ) /*0x964f*/
return 1518500249; /*0x9651*/
if ( n0x14 < 0x28u ) /*0x965a*/
return 1859775393; /*0x965c*/
if ( n0x14 >= 0x3Cu )
return n0x14 < 0x50u ? 0xCA62C1D6 : 0;
return 2400959708LL; /*0x9656*/
}
// Function: RstCrc16 @ 0x9678 (0x40 bytes)
// Index: 253/906
unsigned __int16 __fastcall RstCrc16(unsigned __int8 *Source, unsigned __int8 n0x14)
{
unsigned __int16 v2; // r8
__int64 n0x14_1; // r9
unsigned __int8 v4; // dl
__int64 n8; // r10
char v6; // al
v2 = 0; /*0x9678*/
if ( n0x14 ) /*0x967e*/
{
n0x14_1 = n0x14; /*0x9680*/
do /*0x96b1*/
{
v4 = *Source; /*0x9684*/
n8 = 8; /*0x9686*/
do /*0x96a8*/
{
v6 = v2 ^ v4; /*0x968e*/
v2 >>= 1; /*0x9691*/
if ( (v6 & 1) != 0 ) /*0x9697*/
v2 ^= 0xA001u; /*0x969e*/
v4 >>= 1; /*0x96a2*/
--n8; /*0x96a4*/
}
while ( n8 ); /*0x96a8*/
++Source; /*0x96aa*/
--n0x14_1; /*0x96ad*/
}
while ( n0x14_1 ); /*0x96b1*/
}
return v2; /*0x96b7*/
}
// Function: RstGenerateXorPattern @ 0x96b8 (0x3a bytes)
// Index: 254/906
char RstGenerateXorPattern()
{
_BYTE *v0; // r10
__int64 n7; // rdx
char *v2; // rcx
if ( RstCompareDriverSignature() ) /*0x96bf*/
return 1; /*0x96eb*/
n7 = 7; /*0x96cf*/
v2 = (char *)((char *)&dword_35434 - v0); /*0x96d4*/
do /*0x96e5*/
{
*v0 = v0[(_QWORD)v2]; /*0x96db*/
++v0; /*0x96de*/
--n7; /*0x96e1*/
}
while ( n7 ); /*0x96e5*/
return 0; /*0x96ed*/
}
// Function: RstAuthChallengeWriteVerify @ 0x96f4 (0x120 bytes)
// Index: 255/906
char __fastcall RstAuthChallengeWriteVerify(__int64 n0x97, const CHAR16 *Source, unsigned __int8 Length)
{
unsigned __int8 n0x97_1; // bl
char result; // al
unsigned __int8 v7; // di
__int64 n8; // rsi
char *v9; // rbx
unsigned __int8 Sourcea[8]; // [rsp+20h] [rbp-28h] BYREF
__int16 v11; // [rsp+28h] [rbp-20h]
char v12; // [rsp+2Ah] [rbp-1Eh]
__int16 v13; // [rsp+50h] [rbp+8h]
n0x97_1 = n0x97; /*0x9715*/
*(_QWORD *)Sourcea = 0; /*0x9717*/
v11 = 0; /*0x971b*/
v12 = 0; /*0x9720*/
if ( (unsigned __int8)n0x97 > 0x97u ) /*0x9727*/
return 5; /*0x9729*/
v7 = n0x97 & 0xF8; /*0x9733*/
result = RstAuthLockAcquire(); /*0x9737*/
if ( !result ) /*0x973f*/
{
RstAuthTpmControlAll(204); /*0x9747*/
n8 = 8; /*0x974c*/
RstAuthVariableRead(n0x97_1 & 0xF8, (char *)&Sourcea[3], 8u); /*0x975c*/
if ( Length ) /*0x9764*/
StrnCpy((CHAR16 *)&Sourcea[n0x97_1 - (unsigned __int64)v7 + 3], Source, Length); /*0x977c*/
Sourcea[0] = 15; /*0x9781*/
Sourcea[1] = n0x97_1; /*0x9786*/
Sourcea[2] = 0; /*0x978a*/
result = RstAuthLockAcquire(); /*0x978f*/
if ( !result ) /*0x9797*/
{
RstAuthTpmControlAll(204); /*0x979b*/
RstAuthTpmControlAll(15); /*0x97a2*/
RstAuthTpmControlAll(n0x97_1); /*0x97a9*/
RstAuthTpmControlAll(0); /*0x97b0*/
v9 = (char *)&Sourcea[3]; /*0x97b5*/
do /*0x97c8*/
{
RstAuthTpmControlAll(*v9++); /*0x97bc*/
--n8; /*0x97c4*/
}
while ( n8 ); /*0x97c8*/
LOBYTE(v13) = RstAuthTpmGetStateMask(); /*0x97cf*/
HIBYTE(v13) = RstAuthTpmGetStateMask(); /*0x97df*/
if ( v13 == ~RstCrc16(Sourcea, 0xBu) ) /*0x97f0*/
return RstAuthLockAcquire(); /*0x97f6*/
else
return 9; /*0x97f2*/
}
}
return result; /*0x980a*/
}
// Function: RstMD5Transform @ 0x9814 (0x151 bytes)
// Index: 256/906
char __fastcall RstMD5Transform(__int64 a1)
{
_BYTE *n0x50; // r9
char *v2; // rdx
_BYTE *v3; // r11
int n1732584193; // edi
unsigned int n1732584193_1; // esi
unsigned int n271733878_1; // ebx
__int64 n16; // rcx
unsigned int n271733878; // ebp
int n271733878_2; // r12d
char *v10; // r8
char v11; // al
char *v12; // rcx
__int64 n64; // rdx
int v14; // eax
unsigned __int8 n0x14; // r9
int v16; // eax
_BYTE *v17; // r10
int v18; // r8d
_DWORD *v19; // r11
int n1732584193_3; // r8d
unsigned int n1732584193_2; // ebx
char n5; // dl
char *v23; // rcx
char v24; // al
bool v25; // zf
char result; // al
int n271733878_3; // [rsp+30h] [rbp-158h] BYREF
char v28; // [rsp+40h] [rbp-148h] BYREF
_BYTE v29[7]; // [rsp+41h] [rbp-147h] BYREF
char v30; // [rsp+48h] [rbp-140h] BYREF
n0x50 = &v29[-a1]; /*0x983d*/
v2 = (char *)(a1 + 2); /*0x9840*/
v3 = &v29[-a1 - 1]; /*0x9844*/
n1732584193 = 1732584193; /*0x9847*/
n1732584193_1 = -271733879; /*0x984c*/
n271733878_1 = -1732584194; /*0x9851*/
n16 = 16; /*0x9856*/
n271733878 = 271733878; /*0x985b*/
n271733878_2 = -1009589776; /*0x9860*/
v10 = &v28; /*0x9866*/
do /*0x9891*/
{
v2[(_QWORD)n0x50] = *(v2 - 2); /*0x986e*/
v2[(_QWORD)v3] = *(v2 - 1); /*0x9875*/
v11 = *v2; /*0x9879*/
v2 += 4; /*0x987b*/
v10[1] = v11; /*0x987f*/
*v10 = *(v2 - 3); /*0x9886*/
v10 += 4; /*0x9889*/
--n16; /*0x988d*/
}
while ( n16 ); /*0x9891*/
v12 = &v30; /*0x9893*/
n64 = 64; /*0x9898*/
do /*0x98b5*/
{
v14 = *(_DWORD *)v12 ^ *((_DWORD *)v12 - 2) ^ *((_DWORD *)v12 + 6) ^ *((_DWORD *)v12 + 11); /*0x98a6*/
v12 += 4; /*0x98a8*/
--n64; /*0x98ae*/
*((_DWORD *)v12 + 13) = __ROL4__(v14, 1); /*0x98b2*/
}
while ( n64 ); /*0x98b5*/
LOBYTE(n0x50) = 0; /*0x98b7*/
do /*0x9901*/
{
RstSha1Round(n1732584193_1, n271733878_1, n271733878, n0x50); /*0x98c6*/
v16 = RstSha1RoundConstant(n0x14); /*0x98d1*/
LOBYTE(n0x50) = (_BYTE)n0x50 + 1; /*0x98d6*/
n1732584193_3 = n271733878_2 + *v19 + __ROL4__(n1732584193, 5) + v16 + v18; /*0x98eb*/
n271733878_2 = n271733878; /*0x98ee*/
n271733878 = n271733878_1; /*0x98f1*/
n1732584193_2 = n1732584193_1; /*0x98f3*/
n1732584193_1 = n1732584193; /*0x98f5*/
n1732584193 = n1732584193_3; /*0x98f7*/
n271733878_1 = __ROR4__(n1732584193_2, 2); /*0x98fa*/
}
while ( (unsigned __int8)n0x50 < 0x50u ); /*0x9901*/
n271733878_3 = n271733878_2; /*0x9914*/
n5 = 5; /*0x9919*/
v23 = (char *)&n271733878_3 + 1; /*0x991b*/
do /*0x9945*/
{
*v17 = *(v23 - 1); /*0x9923*/
v17 += 4; /*0x9928*/
*(v17 - 3) = *v23; /*0x992c*/
v24 = v23[1]; /*0x9930*/
v23 -= 4; /*0x9933*/
v25 = n5-- == 1; /*0x9937*/
*(v17 - 2) = v24; /*0x993a*/
result = v23[6]; /*0x993e*/
*(v17 - 1) = result; /*0x9941*/
}
while ( !v25 ); /*0x9945*/
return result; /*0x995f*/
}
// Function: RstAuthMd5Init @ 0x9968 (0x127 bytes)
// Index: 257/906
char __fastcall RstAuthMd5Init(_QWORD *a1, CHAR16 *Source, const CHAR16 *Source_1)
{
char v6; // al
char v7; // al
char v8; // al
char v9; // al
char v10; // al
char v11; // al
char v12; // al
int v14; // [rsp+40h] [rbp-48h] BYREF
CHAR16 Destination[16]; // [rsp+44h] [rbp-44h] BYREF
char v16; // [rsp+64h] [rbp-24h]
char v17; // [rsp+65h] [rbp-23h]
char v18; // [rsp+66h] [rbp-22h]
char v19; // [rsp+67h] [rbp-21h]
char v20; // [rsp+68h] [rbp-20h]
char v21; // [rsp+69h] [rbp-1Fh]
char v22; // [rsp+6Ah] [rbp-1Eh]
char v23; // [rsp+6Bh] [rbp-1Dh]
char v24; // [rsp+6Ch] [rbp-1Ch]
char v25; // [rsp+6Dh] [rbp-1Bh]
char v26; // [rsp+6Eh] [rbp-1Ah]
char v27; // [rsp+6Fh] [rbp-19h]
int n1128482840; // [rsp+70h] [rbp-18h]
char v29; // [rsp+74h] [rbp-14h]
char v30; // [rsp+75h] [rbp-13h]
char v31; // [rsp+76h] [rbp-12h]
char v32; // [rsp+77h] [rbp-11h]
char v33; // [rsp+78h] [rbp-10h]
char v34; // [rsp+79h] [rbp-Fh]
char v35; // [rsp+7Ah] [rbp-Eh]
char v36; // [rsp+7Bh] [rbp-Dh]
char v37; // [rsp+7Ch] [rbp-Ch]
char v38; // [rsp+7Dh] [rbp-Bh]
char v39; // [rsp+7Eh] [rbp-Ah]
char v40; // [rsp+7Fh] [rbp-9h]
MemZero((_BYTE *)&v14 + 1, 0, 63); /*0x9992*/
v14 = -2097072044; /*0x99c5*/
StrnCpy(Destination, Source_1, 0x20u); /*0x99c9*/
v20 = *(_BYTE *)Source & 0x3F; /*0x99dc*/
v6 = *((_BYTE *)Source + 1); /*0x99e0*/
v16 = -1; /*0x99e3*/
v21 = v6; /*0x99e8*/
v7 = *((_BYTE *)Source + 2); /*0x99ec*/
v17 = -1; /*0x99ef*/
v22 = v7; /*0x99f4*/
v8 = *((_BYTE *)Source + 3); /*0x99f8*/
v18 = -1; /*0x99fb*/
v23 = v8; /*0x9a00*/
v9 = *((_BYTE *)Source + 4); /*0x9a04*/
v19 = -1; /*0x9a07*/
v24 = v9; /*0x9a0c*/
v10 = *((_BYTE *)Source + 5); /*0x9a10*/
v29 = -1; /*0x9a13*/
v25 = v10; /*0x9a18*/
v11 = *((_BYTE *)Source + 6); /*0x9a1c*/
v30 = -1; /*0x9a1f*/
v26 = v11; /*0x9a24*/
v12 = *((_BYTE *)Source + 7); /*0x9a28*/
v31 = -1; /*0x9a2b*/
v27 = v12; /*0x9a30*/
v32 = 0x80; /*0x9a3a*/
v33 = 0; /*0x9a3f*/
v34 = 0; /*0x9a44*/
v35 = 0; /*0x9a49*/
n1128482840 = 1128482840; /*0x9a4e*/
v36 = 0; /*0x9a52*/
v37 = 0; /*0x9a57*/
v38 = 0; /*0x9a5c*/
v39 = 1; /*0x9a61*/
v40 = -72; /*0x9a66*/
RstMD5Transform((__int64)&v14); /*0x9a6b*/
*a1 = 0; /*0x9a81*/
return 0; /*0x9a8a*/
}
// Function: RstAuthChecksumVerify @ 0x9a90 (0x2e8 bytes)
// Index: 258/906
char __fastcall RstAuthChecksumVerify(unsigned __int8 n4, const CHAR16 *Source, int *a3, _QWORD *FirstString, char *a5)
{
__int64 n0x97; // rcx
char result; // al
char *Source_1; // rbx
__int64 n3; // rsi
__int64 *p_Sourcea; // rbx
__int64 n33; // rsi
char v15; // al
char v16; // al
unsigned __int8 *Source_4; // rbx
__int64 n20; // rsi
char *v19; // rbx
__int64 n8; // rdi
unsigned __int8 v21; // cl
CHAR16 Source_; // [rsp+20h] [rbp-C8h] BYREF
char v23; // [rsp+22h] [rbp-C6h]
__int64 Sourcea; // [rsp+23h] [rbp-C5h] BYREF
__int64 v25; // [rsp+2Bh] [rbp-BDh]
__int64 v26; // [rsp+33h] [rbp-B5h]
__int64 v27; // [rsp+3Bh] [rbp-ADh]
_BYTE v28[8]; // [rsp+48h] [rbp-A0h] BYREF
int v29; // [rsp+50h] [rbp-98h] BYREF
CHAR16 Destination[16]; // [rsp+54h] [rbp-94h] BYREF
char v31; // [rsp+74h] [rbp-74h]
char v32; // [rsp+75h] [rbp-73h]
char v33; // [rsp+76h] [rbp-72h]
char v34; // [rsp+77h] [rbp-71h]
char v35; // [rsp+78h] [rbp-70h]
CHAR16 Destination_; // [rsp+79h] [rbp-6Fh] BYREF
int v37; // [rsp+80h] [rbp-68h]
char v38; // [rsp+84h] [rbp-64h]
char v39; // [rsp+85h] [rbp-63h]
char v40; // [rsp+86h] [rbp-62h]
char v41; // [rsp+87h] [rbp-61h]
char v42; // [rsp+88h] [rbp-60h]
char v43; // [rsp+89h] [rbp-5Fh]
char v44; // [rsp+8Ah] [rbp-5Eh]
char v45; // [rsp+8Bh] [rbp-5Dh]
char v46; // [rsp+8Ch] [rbp-5Ch]
char v47; // [rsp+8Dh] [rbp-5Bh]
char v48; // [rsp+8Eh] [rbp-5Ah]
char v49; // [rsp+8Fh] [rbp-59h]
unsigned __int8 Source_2[24]; // [rsp+90h] [rbp-58h] BYREF
unsigned __int8 Source_3[24]; // [rsp+A8h] [rbp-40h] BYREF
__int16 v52; // [rsp+F0h] [rbp+8h]
__int16 v53; // [rsp+F0h] [rbp+8h]
LOBYTE(Source_) = 0; /*0x9ac0*/
MemZero((_BYTE *)&Source_ + 1, 0, 35); /*0x9ac5*/
if ( n4 >= 4u ) /*0x9ace*/
return 14; /*0x9ad0*/
BYTE1(Sourcea) = *a5; /*0x9af1*/
LOBYTE(n0x97) = 32 * n4; /*0x9afa*/
WORD1(Sourcea) = *(_WORD *)(a5 + 1); /*0x9afc*/
result = RstAuthChallengeWriteVerify(n0x97, &Source_, 8u); /*0x9b09*/
if ( !result ) /*0x9b10*/
{
LOBYTE(Source_) = -91; /*0x9b16*/
HIBYTE(Source_) = 32 * n4; /*0x9b1b*/
v23 = 0; /*0x9b1f*/
result = RstAuthLockAcquire(); /*0x9b23*/
if ( !result ) /*0x9b2a*/
{
RstAuthTpmControlAll(204); /*0x9b32*/
Source_1 = (char *)&Source_; /*0x9b37*/
n3 = 3; /*0x9b3c*/
do /*0x9b4f*/
{
RstAuthTpmControlAll(*Source_1++); /*0x9b43*/
--n3; /*0x9b4b*/
}
while ( n3 ); /*0x9b4f*/
p_Sourcea = &Sourcea; /*0x9b51*/
n33 = 33; /*0x9b56*/
do /*0x9b69*/
{
*(_BYTE *)p_Sourcea = RstAuthTpmGetStateMask(); /*0x9b60*/
p_Sourcea = (__int64 *)((char *)p_Sourcea + 1); /*0x9b62*/
--n33; /*0x9b65*/
}
while ( n33 ); /*0x9b69*/
LOBYTE(v52) = RstAuthTpmGetStateMask(); /*0x9b70*/
HIBYTE(v52) = RstAuthTpmGetStateMask(); /*0x9b83*/
if ( v52 == ~RstCrc16((unsigned __int8 *)&Source_, 0x24u) ) /*0x9b9a*/
{
v29 = *a3; /*0x9bb7*/
StrnCpy(Destination, (const CHAR16 *)&Sourcea, 0x20u); /*0x9bbb*/
v31 = -1; /*0x9bd2*/
v32 = -1; /*0x9bd7*/
v33 = -1; /*0x9bdc*/
v34 = -1; /*0x9be1*/
v35 = n4 | 0x40; /*0x9be6*/
StrnCpy(&Destination_, Source, 7u); /*0x9beb*/
v37 = a3[1]; /*0x9bf4*/
v38 = *a5; /*0x9c04*/
v15 = a5[1]; /*0x9c0b*/
v41 = 0x80; /*0x9c10*/
v39 = v15; /*0x9c18*/
v16 = a5[2]; /*0x9c1f*/
v42 = 0; /*0x9c24*/
v40 = v16; /*0x9c2c*/
v43 = 0; /*0x9c3a*/
v44 = 0; /*0x9c42*/
v45 = 0; /*0x9c4a*/
v46 = 0; /*0x9c52*/
v47 = 0; /*0x9c5a*/
v48 = 1; /*0x9c62*/
v49 = -72; /*0x9c6a*/
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(2000); /*0x9c72*/
Source_4 = Source_3; /*0x9c78*/
n20 = 20; /*0x9c80*/
do /*0x9c93*/
{
*Source_4++ = RstAuthTpmGetStateMask(); /*0x9c8a*/
--n20; /*0x9c8f*/
}
while ( n20 ); /*0x9c93*/
LOBYTE(v53) = RstAuthTpmGetStateMask(); /*0x9c9a*/
HIBYTE(v53) = RstAuthTpmGetStateMask(); /*0x9cb3*/
RstMD5Transform((__int64)&v29); /*0x9cba*/
if ( v53 == ~RstCrc16(Source_3, 0x14u) ) /*0x9cd9*/
{
if ( v53 == ~RstCrc16(Source_2, 0x14u) ) /*0x9cf9*/
{
v19 = v28; /*0x9d04*/
*FirstString = Sourcea; /*0x9d0c*/
FirstString[1] = v25; /*0x9d13*/
FirstString[2] = v26; /*0x9d1b*/
FirstString[3] = v27; /*0x9d23*/
n8 = 8; /*0x9d27*/
do /*0x9d3a*/
{
*v19++ = RstAuthTpmGetStateMask(); /*0x9d31*/
--n8; /*0x9d36*/
}
while ( n8 ); /*0x9d3a*/
v21 = 1; /*0x9d3c*/
while ( v28[v21] == 0xAA || v28[v21] == 85 ) /*0x9d4d*/
{
if ( ++v21 >= 8u ) /*0x9d54*/
return 0; /*0x9d56*/
}
return 20; /*0x9d74*/
}
else
{
return 17; /*0x9cfb*/
}
}
else
{
return 16; /*0x9cdb*/
}
}
else
{
return 15; /*0x9b9c*/
}
}
}
return result; /*0x9d68*/
}
// Function: RstAuthVerifySignature @ 0x9d78 (0x225 bytes)
// Index: 259/906
char __fastcall RstAuthVerifySignature(char a1, unsigned int *a2, char a3)
{
__int64 v6; // rsi
__int64 n6; // rdx
int v8; // edi
char n23; // bl
int v10; // eax
__int16 v12; // [rsp+30h] [rbp-78h] BYREF
char n29; // [rsp+32h] [rbp-76h]
char v14[8]; // [rsp+38h] [rbp-70h] BYREF
int v15; // [rsp+40h] [rbp-68h] BYREF
int v16; // [rsp+44h] [rbp-64h] BYREF
int v17; // [rsp+48h] [rbp-60h] BYREF
__int64 v18; // [rsp+50h] [rbp-58h] BYREF
CHAR16 Source[8]; // [rsp+58h] [rbp-50h] BYREF
CHAR16 FirstString[20]; // [rsp+68h] [rbp-40h] BYREF
__int16 v21; // [rsp+C8h] [rbp+20h]
LODWORD(dword_35434) = -1; /*0x9da1*/
word_35438 = -1; /*0x9db1*/
byte_3543A = -1; /*0x9dc1*/
v6 = (*(__int64 (__fastcall **)(__int64))(qword_58070 + 24))(31); /*0x9dd4*/
RstAuthLevelCommit(a3, n6); /*0x9dd7*/
RstHelper_18e0(n16908298, 0, &v15); /*0x9de9*/
RstHelper_18e0(n16908298, 1u, &v16); /*0x9dfb*/
RstReadTsc(&v17); /*0x9e05*/
if ( (unsigned int)(1103515245 * v17 + 12345) >> 8 ) /*0x9e1d*/
{
v12 = (unsigned int)(1103515245 * v17 + 12345) >> 8; /*0x9e29*/
n29 = (unsigned int)(1103515245 * v17 + 12345) >> 8 >> 16; /*0x9e35*/
}
else
{
v12 = -23173; /*0x9e40*/
n29 = 29; /*0x9e4a*/
}
v8 = 0; /*0x9e4f*/
while ( 1 ) /*0x9e62*/
{
n23 = RstAuthChallengeWriteVerifyRead(Source, &dword_35434); /*0x9e62*/
if ( n23 ) /*0x9e66*/
goto LABEL_16; /*0x9e66*/
n23 = RstAuthVariableRead(136, v14, 8u); /*0x9e7b*/
LOBYTE(v21) = v14[7]; /*0x9e81*/
HIBYTE(v21) = v14[6]; /*0x9e8c*/
if ( n23 ) /*0x9e95*/
goto LABEL_16; /*0x9e95*/
n23 = 0; /*0x9ea0*/
if ( v14[3] != -86 ) /*0x9ea8*/
n23 = 23; /*0x9ea8*/
if ( n23 ) /*0x9ead*/
goto LABEL_16; /*0x9ead*/
if ( v21 == -27648 || v21 == -27392 || v21 == -23296 ) /*0x9ed3*/
break; /*0x9ed3*/
n23 = 24; /*0x9ed5*/
LABEL_16:
if ( (unsigned int)++v8 >= 0x3E8 ) /*0x9f23*/
goto LABEL_20; /*0x9f23*/
}
n23 = RstAuthMd5Init(&v18, Source, &Source_); /*0x9eef*/
if ( n23 ) /*0x9ef3*/
goto LABEL_16; /*0x9ef3*/
n23 = RstAuthChecksumVerify(0, Source, (int *)&v18, FirstString, (char *)&v12); /*0x9f15*/
if ( n23 ) /*0x9f19*/
goto LABEL_16; /*0x9f19*/
v10 = RstVrocModeFromString(FirstString); /*0x9f2f*/
*a2 = v10; /*0x9f34*/
if ( a1 ) /*0x9f3b*/
RstDriverModeSet(v10, a3); /*0x9f42*/
LABEL_20:
if ( n23 ) /*0x9f49*/
{
LODWORD(dword_35434) = -1; /*0x9f51*/
word_35438 = -1; /*0x9f5e*/
byte_3543A = -1; /*0x9f6b*/
}
(*(void (__fastcall **)(__int64))(qword_58070 + 32))(v6); /*0x9f7b*/
return n23; /*0x9f94*/
}
// Function: RstAuthLevelToNvramId @ 0x9fa0 (0x34 bytes)
// Index: 260/906
__int64 __fastcall RstAuthLevelToNvramId(char a1, __int64 n6)
{
int n2; // r11d
__int64 n16908298; // rax
unsigned __int16 v4; // [rsp+38h] [rbp+10h] BYREF
LOBYTE(n6) = a1; /*0x9fa4*/
n2 = RstHelper_178c(&v4, n6); /*0x9fb0*/
n16908298 = 16908298; /*0x9fb6*/
if ( n2 == 2 ) /*0x9fbb*/
n16908298 = 17104918; /*0x9fc6*/
n16908298 = n16908298; /*0x9fc9*/
return n16908298; /*0x9fcf*/
}
// Function: RstNvramResetAndNotify @ 0x9fd4 (0x34 bytes)
// Index: 261/906
__int64 RstNvramResetAndNotify()
{
RstHelper_1960((unsigned int)n16908298, 0, -258, 257); /*0x9fec*/
return (*(__int64 (__fastcall **)(__int64))(qword_58070 + 248))(1);
}
// Function: Assert_101 @ 0xa008 (0x5f bytes)
// Index: 262/906
__int64 sub_A008()
{
int v1; // [rsp+30h] [rbp+8h] BYREF
unsigned int v2; // [rsp+34h] [rbp+Ch]
Assert_7((unsigned int)n16908298, (__int64)&v1); /*0xa017*/
v2 = v2 & 0xFFFF9FFF | 0x2000; /*0xa04d*/
v1 = v1 & 0x60 | 0xD702481; /*0xa058*/
return AssertCpuDeadLoop(n16908298, &v1); /*0xa062*/
}
// Function: RstAuthLockAcquire @ 0xa068 (0xa7 bytes)
// Index: 263/906
char RstAuthLockAcquire()
{
char n2; // bl
__int16 v1; // di
int v3; // [rsp+30h] [rbp+8h] BYREF
RstHelper1960Wrapper(n16908298, 0); /*0xa07a*/
RstHelper18e0Wrapper(n16908298, &v3); /*0xa08a*/
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(477); /*0xa09b*/
RstNvramResetAndNotify(); /*0xa0a1*/
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(57); /*0xa0b2*/
n2 = 0; /*0xa0b8*/
v1 = 0; /*0xa0ba*/
while ( 1 ) /*0xa0c8*/
{
RstNvramReadBit(n16908298, (unsigned int *)&v3); /*0xa0c8*/
if ( !v3 ) /*0xa0d1*/
break; /*0xa0d1*/
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(100); /*0xa0df*/
if ( (unsigned __int16)++v1 >= 0xAu ) /*0xa0ec*/
{
n2 = 2; /*0xa0ee*/
break; /*0xa0ee*/
}
}
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(417); /*0xa0f0*/
return n2; /*0xa109*/
}
// Function: RstAuthTpmControl @ 0xa110 (0x8e bytes)
// Index: 264/906
__int64 __fastcall RstAuthTpmControl(char a1)
{
__int64 n71; // rcx
if ( a1 ) /*0xa11e*/
{
RstHelper1960Wrapper(n16908298, 0); /*0xa120*/
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(3); /*0xa131*/
RstHelper1960Wrapper(n16908298, 1); /*0xa142*/
n71 = 71; /*0xa147*/
}
else
{
RstHelper1960Wrapper(n16908298, 0); /*0xa14e*/
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(67); /*0xa15f*/
RstHelper1960Wrapper(n16908298, 1); /*0xa170*/
n71 = 7; /*0xa175*/
}
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(n71); /*0xa181*/
return (*(__int64 (__fastcall **)(__int64))(qword_58070 + 248))(7);
}
// Function: RstAuthTpmCheckState @ 0xa1a0 (0x69 bytes)
// Index: 265/906
bool RstAuthTpmCheckState()
{
int v1; // [rsp+30h] [rbp+8h] BYREF
RstHelper1960Wrapper((unsigned int)n16908298, 0); /*0xa1ac*/
RstNvramResetAndNotify(); /*0xa1b1*/
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(2); /*0xa1c2*/
RstNvramReadBit((unsigned int)n16908298, &v1); /*0xa1d3*/
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(36); /*0xa1e4*/
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(7); /*0xa1f6*/
return v1 != 0; /*0xa204*/
}
// Function: RstAuthTpmControlAll @ 0xa20c (0x28 bytes)
// Index: 266/906
__int64 __fastcall RstAuthTpmControlAll(char a1)
{
char v2; // bl
__int64 result; // rax
v2 = 1; /*0xa219*/
do /*0xa227*/
{
result = RstAuthTpmControl(a1 & v2); /*0xa220*/
v2 *= 2; /*0xa225*/
}
while ( v2 ); /*0xa227*/
return result; /*0xa22e*/
}
// Function: RstAuthTpmGetStateMask @ 0xa234 (0x2d bytes)
// Index: 267/906
char RstAuthTpmGetStateMask()
{
char v0; // bl
char v1; // di
v0 = 0; /*0xa23e*/
v1 = 1; /*0xa240*/
do /*0xa252*/
{
if ( RstAuthTpmCheckState() ) /*0xa243*/
v0 |= v1; /*0xa24c*/
v1 *= 2; /*0xa24f*/
}
while ( v1 ); /*0xa252*/
return v0; /*0xa25b*/
}
// Function: RstAuthLevelCommit @ 0xa264 (0x12 bytes)
// Index: 268/906
__int64 __fastcall RstAuthLevelCommit(char a1, __int64 n6)
{
RstAuthLevelToNvramId(a1, n6); /*0xa268*/
return Assert_101(); /*0xa26d*/
}
// Function: RstAuthInstallProtocol @ 0xa278 (0x19 bytes)
// Index: 269/906
unsigned __int8 RstAuthInstallProtocol()
{
Assert_136(Source_16); /*0xa283*/
return DxeInstall_4(); /*0xa288*/
}
// Function: j_HiiLibReturnZero @ 0xa294 (0x5 bytes)
// Index: 270/906
// attributes: thunk
__int64 __fastcall j_HiiLibReturnZero(__int64 a1)
{
return HiiLibReturnZero(a1);
}
// Function: RstCallGetData88 @ 0xa29c (0x5 bytes)
// Index: 271/906
// attributes: thunk
__int64 __fastcall RstCallGetData88(__int64 a1)
{
return RstGetData88(a1);
}
// Function: RstCallGetOffset45 @ 0xa2a4 (0x5 bytes)
// Index: 272/906
// attributes: thunk
__int64 __fastcall RstCallGetOffset45(__int64 a1)
{
return RstGetOffset45(a1);
}
// Function: RstDeviceFindByGuidInList @ 0xa2ac (0x6f bytes)
// Index: 273/906
_QWORD *__fastcall RstDeviceFindByGuidInList(__int64 a1)
{
__int64 v2; // rdi
unsigned int v3; // esi
unsigned __int8 v4; // bl
_QWORD *v5; // rax
v2 = *(_QWORD *)(Source_16 + 216); /*0xa2ca*/
if ( !v2 ) /*0xa2d4*/
return 0; /*0xa2d4*/
v3 = *(unsigned __int8 *)(v2 + 48); /*0xa2d6*/
v4 = 0; /*0xa2da*/
if ( !*(_BYTE *)(v2 + 48) ) /*0xa2d6*/
return 0; /*0xa2fe*/
while ( 1 ) /*0xa2e6*/
{
v5 = (_QWORD *)RstArrayEntryLookup(v2, v4); /*0xa2e6*/
if ( v5 ) /*0xa2ee*/
{
if ( *v5 == a1 ) /*0xa2f3*/
break; /*0xa2f3*/
}
if ( ++v4 >= v3 ) /*0xa2fc*/
return 0; /*0xa2fc*/
}
return v5 + 2; /*0xa30f*/
}
// Function: RstDeviceGetRaidLevel @ 0xa31c (0x97 bytes)
// Index: 274/906
__int16 __fastcall RstDeviceGetRaidLevel(__int64 a1)
{
__int64 v2; // rdi
unsigned int v3; // esi
unsigned __int8 v4; // bl
_QWORD *v5; // rax
__int64 v6; // rdx
__int16 v8; // cx
v2 = *(_QWORD *)(Source_16 + 216); /*0xa33a*/
if ( !v2 ) /*0xa344*/
return -1; /*0xa344*/
v3 = *(unsigned __int8 *)(v2 + 48); /*0xa346*/
v4 = 0; /*0xa34a*/
if ( !*(_BYTE *)(v2 + 48) ) /*0xa346*/
return -1; /*0xa37b*/
while ( 1 ) /*0xa356*/
{
v5 = (_QWORD *)RstArrayEntryLookup(v2, v4); /*0xa356*/
if ( v5 ) /*0xa35e*/
{
if ( *v5 == a1 ) /*0xa363*/
{
v6 = *(_QWORD *)(v5[7] + 40LL); /*0xa369*/
if ( v6 ) /*0xa370*/
break; /*0xa370*/
}
}
if ( ++v4 >= v3 ) /*0xa379*/
return -1; /*0xa379*/
}
v8 = *(_WORD *)(v6 + 4); /*0xa395*/
if ( v8 == 1 && *(_BYTE *)(v5[1] + 20LL) > 3u ) /*0xa3a7*/
return 10; /*0xa3a9*/
return v8; /*0xa38f*/
}
// Function: RstDeviceNameExists @ 0xa3b4 (0x83 bytes)
// Index: 275/906
bool __fastcall RstDeviceNameExists(const CHAR16 *Source, unsigned __int8 Length)
{
bool result; // al
__int64 v3; // rcx
__int64 *v4; // rax
int v5; // ecx
_BYTE v6[9]; // [rsp+30h] [rbp-28h] BYREF
__int64 v7; // [rsp+39h] [rbp-1Fh]
result = 0; /*0xa3b8*/
memset(v6, 0, sizeof(v6)); /*0xa3ba*/
v7 = 0; /*0xa3c4*/
if ( Source && Length && Source_16 ) /*0xa3d9*/
{
RstFormatStringCopy((__int64)v6, Source, 0x11u, Length, 0); /*0xa3ed*/
v3 = *(_QWORD *)(Source_16 + 216); /*0xa3f9*/
result = v3 && (v4 = RstLinkedListFindByName(v3, v6)) != 0 && (v5 = *(_DWORD *)(v4[6] + 136), (v5 & 0x40) == 0) && (v5 & 2) != 0; /*0xa42c*/
}
return result; /*0xa432*/
}
// Function: RstProtocolRelease @ 0xa438 (0x7 bytes)
// Index: 276/906
__int64 __fastcall RstProtocolRelease(__int64 a1)
{
return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 8LL))(a1);
}
// Function: RstBlockSizeToStatus @ 0xa440 (0x11 bytes)
// Index: 277/906
char __fastcall RstBlockSizeToStatus(unsigned __int16 n5)
{
char result; // al
if ( n5 == 1 ) /*0xa444*/
return 2; /*0xa444*/
result = 1; /*0xa446*/
if ( n5 == 10 ) /*0xa44c*/
return 2; /*0xa44e*/
return result; /*0xa450*/
}
// Function: RstHelper_a454 @ 0xa454 (0x71 bytes)
// Index: 278/906
_BOOL8 __fastcall RstHelper_a454(void (__fastcall ***a1)(_QWORD, __int16 *), __int64 *a2)
{
int v3; // eax
__int16 v5; // [rsp+20h] [rbp-28h] BYREF
__int64 v6; // [rsp+28h] [rbp-20h]
int v7; // [rsp+30h] [rbp-18h]
int v8; // [rsp+34h] [rbp-14h]
char v9; // [rsp+38h] [rbp-10h]
v6 = *a2; /*0xa46c*/
v3 = *((_DWORD *)a2 + 3); /*0xa478*/
v9 = *((_BYTE *)a2 + 16) != 0 ? 42 : 40;
v8 = v3; /*0xa48a*/
v7 = *((_DWORD *)a2 + 2) * HiiLibReturnZero((__int64)a1); /*0xa49f*/
(**a1)(a1, &v5); /*0xa4a6*/
return v5 != 0; /*0xa4bf*/
}
// Function: RstCallGetUint108 @ 0xa4c8 (0x5 bytes)
// Index: 279/906
// attributes: thunk
__int64 __fastcall RstCallGetUint108(__int64 a1)
{
return RstGetUint108(a1);
}
// Function: RstDeviceFindIndex @ 0xa4d0 (0x74 bytes)
// Index: 280/906
__int64 __fastcall RstDeviceFindIndex(__int64 a1)
{
unsigned __int8 n0x18; // bl
__int64 v3; // rsi
unsigned int n0x19; // edi
n0x18 = 0; /*0xa4eb*/
if ( !Source_16 ) /*0xa4f3*/
return 0xFFFFFFFFLL; /*0xa4f3*/
v3 = *(_QWORD *)(Source_16 + 216); /*0xa4f5*/
if ( !v3 ) /*0xa4ff*/
return 0xFFFFFFFFLL; /*0xa4ff*/
n0x19 = *(unsigned __int8 *)(v3 + 48); /*0xa501*/
if ( n0x19 > 0x19 || !*(_BYTE *)(v3 + 48) ) /*0xa501*/
return 0xFFFFFFFFLL; /*0xa527*/
while ( *(_QWORD *)RstArrayEntryLookup(v3, n0x18) != a1 ) /*0xa51c*/
{
if ( ++n0x18 >= n0x19 ) /*0xa525*/
return 0xFFFFFFFFLL; /*0xa525*/
}
return n0x18; /*0xa539*/
}
// Function: RstDeviceCtxInit @ 0xa544 (0x13d bytes)
// Index: 281/906
__int64 __fastcall RstDeviceCtxInit(__int64 i, _QWORD *NewContext, __int64 a3, __int16 n36220)
{
int v8; // eax
int v9; // r11d
unsigned __int64 v10; // rcx
__int64 n20; // rbx
_BYTE *v12; // r11
char *v13; // rcx
char v14; // al
__int64 result; // rax
MemZero((_BYTE *)i, 0, 128); /*0xa572*/
v8 = (unsigned __int16)word_35440; /*0xa577*/
v9 = *(_DWORD *)(a3 + 8); /*0xa57e*/
*(_DWORD *)(i + 8) = (unsigned __int16)word_35440; /*0xa582*/
*(_DWORD *)(i + 24) = v9; /*0xa588*/
*(_WORD *)(i + 16) = n36220; /*0xa58c*/
*(_DWORD *)(i + 12) = v8; /*0xa590*/
v10 = (unsigned __int64)*(unsigned __int16 *)(a3 + 16) << 32; /*0xa59e*/
word_35440 = v8 + 1; /*0xa5a6*/
*(_QWORD *)i = *(unsigned int *)(a3 + 18) + v10; /*0xa5b3*/
if ( (*(_BYTE *)(a3 + 147) & 1) != 0 ) /*0xa5bd*/
*(_DWORD *)(i + 20) |= 3u; /*0xa5bf*/
if ( (*(_BYTE *)(a3 + 147) & 2) != 0 ) /*0xa5ca*/
*(_DWORD *)(i + 20) |= 4u; /*0xa5cc*/
if ( (unsigned __int8)RstProtocolCallEntry6(NewContext) ) /*0xa5d3*/
*(_DWORD *)(i + 20) |= 8u; /*0xa5df*/
if ( *(_WORD *)(a3 + 26) == 1 ) /*0xa5e8*/
*(_DWORD *)(i + 20) |= 0x10u; /*0xa5ea*/
n20 = 20; /*0xa5ee*/
RstFormatStringCopy(i + 69, (const CHAR16 *)(a3 + 28), 0x11u, 0x14u, 0); /*0xa606*/
v12 = (_BYTE *)(i + 29); /*0xa60b*/
v13 = (char *)(a3 + 49); /*0xa60f*/
do /*0xa62a*/
{
*(v12 - 1) = *(v13 - 1); /*0xa616*/
v14 = *v13; /*0xa61a*/
v13 += 2; /*0xa61c*/
*v12 = v14; /*0xa620*/
v12 += 2; /*0xa623*/
--n20; /*0xa627*/
}
while ( n20 ); /*0xa62a*/
RstStringTrim((_BYTE *)(i + 28)); /*0xa630*/
*(_DWORD *)(i + 90) = 0; /*0xa63a*/
*(_DWORD *)(i + 86) = 0; /*0xa63d*/
*(_WORD *)(i + 100) = *(_WORD *)(a3 + 26); /*0xa649*/
*(_WORD *)(i + 102) = *(_WORD *)(a3 + 149); /*0xa654*/
*(_QWORD *)(i + 104) = *(_QWORD *)(a3 + 99); /*0xa65c*/
*(_QWORD *)(i + 112) = *(_QWORD *)(a3 + 107); /*0xa664*/
result = *(_QWORD *)(a3 + 115); /*0xa668*/
*(_QWORD *)(i + 120) = result; /*0xa671*/
return result; /*0xa67a*/
}
// Function: RstProtocolRevision @ 0xa684 (0x7 bytes)
// Index: 282/906
__int64 __fastcall RstProtocolRevision(__int64 a1)
{
return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 16LL))(a1);
}
// Function: RstDeviceRaidLevelBitsToIndex @ 0xa68c (0x1c bytes)
// Index: 283/906
__int64 __fastcall RstDeviceRaidLevelBitsToIndex(__int64 a1)
{
unsigned int v1; // eax
unsigned __int16 v2; // cx
v1 = *(_DWORD *)(a1 + 108); /*0xa68c*/
v2 = 0; /*0xa691*/
while ( v1 && (v1 & 1) == 0 ) /*0xa698*/
{
v1 >>= 1; /*0xa69a*/
++v2; /*0xa69c*/
}
return RstDeviceGetRaidLevelByIndex(v2);
}
// Function: RstDiskArrayInit @ 0xa6a8 (0xa7 bytes)
// Index: 284/906
__int64 __fastcall RstDiskArrayInit(__int64 a1)
{
__int64 v2; // rdi
int i; // esi
__int64 v4; // rdi
__int64 v5; // rax
v2 = a1 + 2984; /*0xa6bf*/
for ( i = 143; i >= 0; --i ) /*0xa6c6*/
{
RstDiskInit(v2); /*0xa6ce*/
v2 += 208; /*0xa6d3*/
}
v4 = 0; /*0xa6e6*/
*(_WORD *)(a1 + 32936) = 0; /*0xa6e8*/
RstRaidOpStateInit(a1 + 32952); /*0xa6ef*/
RstListNodeInit(a1 + 33680); /*0xa6fb*/
RstConfigBlockZero(a1 + 34096); /*0xa707*/
RstConfigBlockZero(a1 + 34176); /*0xa713*/
v5 = RstMemPoolAlloc(24); /*0xa71b*/
if ( v5 ) /*0xa723*/
v4 = RstInitArray(v5); /*0xa72d*/
*(_QWORD *)(a1 + 200) = v4; /*0xa73a*/
return a1; /*0xa749*/
}
// Function: RstDriverContextInitialize @ 0xa750 (0x107 bytes)
// Index: 285/906
char RstDriverContextInitialize()
{
_BYTE *i; // rcx
__int64 v1; // rax
__int64 v2; // rax
__int64 Source; // rax
char v4; // bl
unsigned int p_n24682; // [rsp+30h] [rbp+8h] BYREF
unsigned int v7; // [rsp+38h] [rbp+10h] BYREF
i = i; /*0xa75f*/
word_35440 = 0; /*0xa76d*/
if ( i /*0xa7a3*/
|| (v1 = (*(__int64 (__fastcall **)(__int64, char *, _BYTE **))(qword_58070 + 64))(4, (char *)&loc_1F918 + 1, &i),
v1 >= 0)
&& (i = i) != 0 )
{
MemZero(i, 0, (__int64)&loc_1F918 + 1); /*0xa7ae*/
i_1 = (__int64)i; /*0xa7bf*/
dword_35460 = 0; /*0xa7c9*/
i_2 = (__int64)&i[(_QWORD)&loc_1F918 + 1]; /*0xa7cf*/
v2 = RstMemPoolAlloc(34264); /*0xa7d6*/
if ( v2 ) /*0xa7de*/
Source = RstDiskArrayInit(v2); /*0xa7e3*/
else
Source = 0; /*0xa7ea*/
Source_16 = Source; /*0xa7f0*/
RstDriverContextInit(Source); /*0xa7f7*/
v7 = 0; /*0xa801*/
RstCpuid(&p_n24682); /*0xa808*/
p_n24682 >>= 4; /*0xa829*/
v4 = p_n24682 != 24682; /*0xa82e*/
LOBYTE(v1) = RstAuthVerifySignature(1, &v7, p_n24682 != 24682); /*0xa834*/
if ( (_BYTE)v1 ) /*0xa83c*/
LOBYTE(v1) = RstDriverModeSet(0, v4); /*0xa842*/
}
return v1; /*0xa851*/
}
// Function: Assert_137 @ 0xa858 (0x3d bytes)
// Index: 286/906
char Assert_137_QWORD *NewContext, __int64 a2, __int16 n36220)
{
_BYTE i[136]; // [rsp+20h] [rbp-88h] BYREF
RstDeviceCtxInit((__int64)i, NewContext, a2, n36220); /*0xa873*/
return Assert_82(Source_16, NewContext, i); /*0xa88c*/
}
// Function: RstDeviceGetFirstWord @ 0xa898 (0x12 bytes)
// Index: 287/906
__int16 RstDeviceGetFirstWord()
{
return **(_WORD **)(Source_16 + 216); /*0xa8a9*/
}
// Function: RstDeviceGetSlotCapacity @ 0xa8ac (0x16 bytes)
// Index: 288/906
__int16 RstDeviceGetSlotCapacity()
{
return *(_WORD *)(*(_QWORD *)(Source_16 + 216) + 256LL); /*0xa8c1*/
}
// Function: RstDeviceGetByIndex @ 0xa8c4 (0x35 bytes)
// Index: 289/906
__int64 __fastcall RstDeviceGetByIndex(unsigned __int16 a1)
{
__int64 v1; // rdx
__int64 v2; // rcx
__int64 v3; // rax
v1 = a1; /*0xa8cf*/
if ( Source_16 && (v2 = *(_QWORD *)(Source_16 + 216)) != 0 && (v3 = RstArrayEntryLookup(v2, v1)) != 0 ) /*0xa8eb*/
return *(_QWORD *)v3; /*0xa8ed*/
else
return 0; /*0xa8f2*/
}
// Function: Assert_24 @ 0xa8fc (0x15e bytes)
// Index: 290/906
__int64 __fastcall Assert_24(unsigned __int8 n24)
{
__int64 v2; // rcx
_QWORD *v3; // rax
__int64 v4; // rdi
__int64 v6; // rsi
int v7; // ecx
__int64 v8; // rax
__int64 v9; // rax
__int64 v10; // rcx
char n24_1; // al
_BYTE *Source; // rsi
__int64 v13; // rdx
if ( !Source_16 ) /*0xa917*/
return 1; /*0xa917*/
v2 = *(_QWORD *)(Source_16 + 216); /*0xa91d*/
if ( !v2 ) /*0xa927*/
return 1; /*0xaa45*/
v3 = RstLinkedListGetNth((_QWORD **)(v2 + 16), n24); /*0xa934*/
v4 = (__int64)v3; /*0xa939*/
if ( !v3 ) /*0xa93f*/
return 15; /*0xa93f*/
v6 = v3[6]; /*0xa94b*/
if ( !v6 ) /*0xa952*/
return 15; /*0xa941*/
v7 = *(_DWORD *)(v6 + 136); /*0xa954*/
if ( (v7 & 0x10) != 0 && (v7 & 0x40) == 0 ) /*0xa971*/
{
v8 = v3[5]; /*0xa977*/
if ( v8 ) /*0xa97e*/
{
v9 = *(_QWORD *)(v8 + 232); /*0xa980*/
if ( v9 ) /*0xa98a*/
{
v10 = *(_QWORD *)(*(_QWORD *)(v9 + 56) + 40LL); /*0xa990*/
if ( v10 ) /*0xa997*/
{
if ( *(_WORD *)(v10 + 4) != 1 ) /*0xa99d*/
goto LABEL_15; /*0xa99d*/
n24_1 = 24; /*0xa99f*/
if ( *(_BYTE *)(v10 + 6) <= 0x18u ) /*0xa9a5*/
n24_1 = *(_BYTE *)(v10 + 6); /*0xa9a7*/
if ( n24_1 != 2 ) /*0xa9ad*/
LABEL_15:
Assert_28(*(_QWORD *)(Source_16 + 216), 0, v6); /*0xa9c2*/
}
}
}
if ( RstDeviceIsActive(v4) && Source_16 != -224 ) /*0xa9e1*/
{
Source = (_BYTE *)RstBufferPoolFindEntry(Source_16 + 224, v6); /*0xa9eb*/
if ( RstDebugEnabled() ) /*0xa9ee*/
{
if ( !Source ) /*0xa9fa*/
DebugAssert("IsmApi.cpp", 0x10Cu, "pJd"); /*0xaa0f*/
}
Assert_93(Source); /*0xaa17*/
}
RstDeviceClearFlags(*(_QWORD *)(v4 + 48), -1); /*0xaa23*/
RstDeviceSetFlags(*(_QWORD *)(v4 + 48), 0x110u); /*0xaa31*/
LOBYTE(v13) = 1; /*0xaa3a*/
(***(void (__fastcall ****)(_QWORD, __int64))(v4 + 64))(*(_QWORD *)(v4 + 64), v13); /*0xaa3f*/
}
return 0; /*0xaa54*/
}
// Function: RstDeviceSetPropertyByIndex @ 0xaa5c (0x5b bytes)
// Index: 291/906
__int64 __fastcall RstDeviceSetPropertyByIndex(__int16 n0x90, __int16 a2, char n3)
{
__int64 v7; // rcx
_QWORD *v8; // rax
if ( !Source_16 ) /*0xaa79*/
return 1; /*0xaa79*/
v7 = *(_QWORD *)(Source_16 + 216); /*0xaa82*/
if ( !v7 ) /*0xaa8c*/
return 1; /*0xaa7b*/
v8 = RstLinkedListGetNth((_QWORD **)(v7 + 16), n0x90); /*0xaa92*/
if ( !v8 ) /*0xaa9a*/
return 15; /*0xaa9c*/
*((_WORD *)v8 + 28) = a2; /*0xaaa3*/
*((_BYTE *)v8 + 58) = n3; /*0xaaa7*/
return 0; /*0xaab1*/
}
// Function: RstDeviceCountOnline @ 0xaab8 (0x81 bytes)
// Index: 292/906
char RstDeviceCountOnline()
{
unsigned __int16 *v0; // rsi
char v1; // bl
unsigned __int16 i; // di
__int64 v3; // rax
v0 = *(unsigned __int16 **)(Source_16 + 216); /*0xaadb*/
v1 = 0; /*0xaae2*/
for ( i = 0; i < *v0; ++i ) /*0xaae9*/
{
v3 = RstLinkedListGetNth(v0 + 8, i); /*0xaaf6*/
if ( v3 && (*(_DWORD *)(*(_QWORD *)(v3 + 48) + 136LL) & 0x10) != 0 ) /*0xab10*/
++v1; /*0xab12*/
}
return v1; /*0xab32*/
}
// Function: Assert_121 @ 0xab3c (0x10a bytes)
// Index: 293/906
__int64 __fastcall Assert_121(__int16 a1, __int64 i)
{
_QWORD *v3; // rax
__int64 v4; // rsi
unsigned __int8 n2_2; // al
unsigned __int8 n2; // di
unsigned __int8 n2_1; // r12
unsigned __int8 n2_3; // bp
int n2_4; // ecx
__int64 v10; // rcx
if ( !Source_16 ) /*0xab67*/
return 19; /*0xab67*/
v3 = RstLinkedListSkipN(*(_QWORD *)(Source_16 + 216), a1); /*0xab70*/
v4 = (__int64)v3; /*0xab75*/
if ( !v3 || !i ) /*0xab80*/
return 19; /*0xab80*/
n2_2 = *((_BYTE *)v3 + 224); /*0xab82*/
n2 = 2; /*0xab89*/
n2_1 = 2; /*0xab91*/
if ( n2_2 < 2u ) /*0xab94*/
n2_1 = n2_2; /*0xab94*/
n2_3 = 0; /*0xab98*/
if ( !n2_1 ) /*0xab9e*/
return 19; /*0xabd3*/
while ( 1 ) /*0xaba4*/
{
n2_4 = 1; /*0xaba4*/
if ( n2_3 < 2u ) /*0xabac*/
n2_4 = n2_3; /*0xabac*/
v10 = *(_QWORD *)(v4 + 8LL * n2_4 + 232); /*0xabb2*/
if ( v10 ) /*0xabbd*/
{
if ( RstDeviceMemberIsNvme(v10) ) /*0xabc2*/
break; /*0xabc2*/
}
if ( ++n2_3 >= n2_1 ) /*0xabd1*/
return 19; /*0xabd1*/
}
MemZero((_BYTE *)i, 0, 32); /*0xabfe*/
*(_DWORD *)i = 32; /*0xac06*/
*(_DWORD *)(i + 16) = Assert_110(v4); /*0xac0d*/
*(_DWORD *)(i + 8) = *(unsigned __int8 *)(v4 + 20); /*0xac14*/
if ( *(_BYTE *)(v4 + 224) < 2u ) /*0xac20*/
n2 = *(_BYTE *)(v4 + 224); /*0xac22*/
*(_DWORD *)(i + 12) = n2; /*0xac2c*/
*(_DWORD *)(i + 20) = RstCfgCheckVolumeType(v4); /*0xac37*/
*(_DWORD *)(i + 24) = Assert_109(v4); /*0xac3f*/
return 0; /*0xabe7*/
}
// Function: RstVolGetDeviceStatus @ 0xac48 (0x3a bytes)
// Index: 294/906
char __fastcall RstVolGetDeviceStatus(unsigned __int16 a1)
{
__int64 v1; // rdx
__int64 v3; // rcx
__int64 v4; // rax
v1 = a1; /*0xac53*/
if ( Source_16 && (v3 = *(_QWORD *)(Source_16 + 216)) != 0 && (v4 = RstLinkedListSkipN(v3, v1)) != 0 ) /*0xac73*/
return RstRaidVolumeTypeValid(v4); /*0xac78*/
else
return 0; /*0xac5b*/
}
// Function: RstDeviceGetLevel @ 0xac84 (0x1a6 bytes)
// Index: 295/906
__int64 __fastcall RstDeviceGetLevel(unsigned __int8 n0x18, unsigned __int8 n24)
{
__int64 v4; // r12
unsigned __int16 n0x18_1; // r13
__int64 v6; // rax
__int64 v7; // r11
__int64 v8; // rdi
int n24_1; // eax
__int64 v10; // rsi
__int64 v11; // rax
__int64 v12; // rcx
__int64 v13; // rbx
int n23; // eax
__int64 v15; // rbp
__int64 v16; // rax
__int64 v17; // rcx
__int64 v18; // rax
__int64 v19; // rcx
__int64 v20; // rax
__int64 v21; // rdx
__int64 v22; // rcx
_DWORD *v23; // rcx
_DWORD *v24; // rcx
void (__fastcall ***v25)(_QWORD, __int64); // rcx
if ( !Source_16 ) /*0xacab*/
return 1; /*0xacab*/
v4 = *(_QWORD *)(Source_16 + 216); /*0xacb7*/
if ( !v4 ) /*0xacc1*/
return 1; /*0xacc1*/
n0x18_1 = n0x18; /*0xacc3*/
v6 = RstDeviceContextGetNth(Source_16, n0x18); /*0xaccb*/
v7 = v6; /*0xacd0*/
if ( !v6 ) /*0xacd6*/
return 14; /*0xacdc*/
v8 = *(_QWORD *)(v6 + 144); /*0xace1*/
if ( v8 ) /*0xaceb*/
{
n24_1 = 24; /*0xacf1*/
if ( n24 < 0x19u ) /*0xacfe*/
n24_1 = n24; /*0xacfe*/
v10 = *(_QWORD *)(v8 + 8LL * n24_1 + 24); /*0xad03*/
if ( v10 ) /*0xad0b*/
{
v11 = *(_QWORD *)(v7 + 160); /*0xad11*/
if ( v11 ) /*0xad1b*/
{
v12 = *(_QWORD *)(v11 + 16); /*0xad21*/
v13 = *(_QWORD *)(v11 + 24); /*0xad25*/
if ( v12 ) /*0xad2c*/
{
if ( v13 ) /*0xad35*/
{
*(_DWORD *)(v12 + 8) = 0; /*0xad3b*/
n23 = 23; /*0xad43*/
if ( n24 < 0x18u ) /*0xad48*/
n23 = n24; /*0xad48*/
v15 = 2 * (n23 + 7LL); /*0xad52*/
v16 = v12 + 16 * (n23 + 7LL); /*0xad55*/
if ( v16 ) /*0xad5c*/
{
if ( *(_BYTE *)(v16 + 8) ) /*0xad5e*/
{
*(_BYTE *)(v16 + 8) = 0; /*0xad64*/
v17 = *(_QWORD *)(v10 + 48); /*0xad68*/
if ( (*(_DWORD *)(v17 + 136) & 0x80) != 0 ) /*0xad77*/
RstDeviceClearFlags(v17, 132); /*0xad7e*/
}
}
*(_DWORD *)(v13 + 8) = 0; /*0xad83*/
v18 = v13 + 8 * v15; /*0xad87*/
if ( v18 ) /*0xad8e*/
{
if ( *(_BYTE *)(v18 + 8) ) /*0xad90*/
{
*(_BYTE *)(v18 + 8) = 0; /*0xad96*/
v19 = *(_QWORD *)(v10 + 48); /*0xad9a*/
if ( (*(_DWORD *)(v19 + 136) & 0x80) != 0 ) /*0xada9*/
RstDeviceClearFlags(v19, 132); /*0xadb0*/
}
}
v20 = RstArrayEntryLookup(v4, n0x18_1); /*0xadbc*/
v22 = *(_QWORD *)(v20 + 56); /*0xadc1*/
if ( v22 ) /*0xadc8*/
{
v23 = *(_DWORD **)(v22 + 48); /*0xadca*/
if ( v23 ) /*0xadd1*/
*v23 = 0; /*0xadd3*/
v24 = *(_DWORD **)(*(_QWORD *)(v20 + 56) + 40LL); /*0xadda*/
if ( v24 ) /*0xade1*/
*v24 = 0; /*0xade3*/
}
v25 = *(void (__fastcall ****)(_QWORD, __int64))(v8 + 248); /*0xade6*/
if ( v25 || (v25 = *(void (__fastcall ****)(_QWORD, __int64))(v10 + 64)) != 0 ) /*0xae04*/
{
LOBYTE(v21) = 1; /*0xadf5*/
(**v25)(v25, v21); /*0xadf7*/
return 0; /*0xadfb*/
}
return 1; /*0xacb2*/
}
}
}
}
}
return 15; /*0xae20*/
}
// Function: RstDeviceCheckAllReady @ 0xae2c (0x91 bytes)
// Index: 296/906
bool RstDeviceCheckAllReady()
{
unsigned __int16 *v0; // rsi
char v1; // bp
char v2; // bl
unsigned __int16 i; // di
__int64 v4; // rax
int v5; // ecx
v0 = *(unsigned __int16 **)(Source_16 + 216); /*0xae4e*/
v1 = 0; /*0xae55*/
v2 = 0; /*0xae58*/
for ( i = 0; i < *v0; ++i ) /*0xae5f*/
{
v4 = RstLinkedListGetNth(v0 + 8, i); /*0xae6c*/
if ( v4 ) /*0xae74*/
{
v5 = *(_DWORD *)(*(_QWORD *)(v4 + 48) + 136LL); /*0xae7a*/
if ( (v5 & 0x10) != 0 ) /*0xae87*/
{
++v1; /*0xae8c*/
if ( (v5 & 0x40) != 0 ) /*0xae92*/
++v2; /*0xae94*/
}
}
}
return v2 == v1; /*0xaeb3*/
}
// Function: RstDeviceClear @ 0xaec0 (0x82 bytes)
// Index: 297/906
__int64 __fastcall RstDeviceClear(__int16 a1)
{
_QWORD *v2; // rbx
__int64 v3; // rcx
int n132; // edx
__int64 v5; // rcx
__int64 v6; // rdx
void (__fastcall ***v7)(_QWORD, __int64); // rcx
if ( !Source_16 ) /*0xaece*/
return 15; /*0xaece*/
v2 = RstLinkedListGetNth((_QWORD **)&word_10, a1); /*0xaee4*/
if ( !v2 || !*(_QWORD *)(Source_16 + 216) ) /*0xaef3*/
return 15; /*0xaed0*/
v3 = v2[6]; /*0xaefd*/
n132 = 132; /*0xaf01*/
if ( (*(_DWORD *)(v3 + 136) & 0x80) == 0 ) /*0xaf11*/
n132 = 4; /*0xaf13*/
RstDeviceClearFlags(v3, n132); /*0xaf18*/
v5 = v2[5]; /*0xaf1d*/
LOBYTE(v6) = 1; /*0xaf21*/
if ( v5 ) /*0xaf26*/
v7 = *(void (__fastcall ****)(_QWORD, __int64))(v5 + 248); /*0xaf28*/
else
v7 = (void (__fastcall ***)(_QWORD, __int64))v2[8]; /*0xaf31*/
(**v7)(v7, v6); /*0xaf38*/
return 0; /*0xaf3c*/
}
// Function: RstDeviceClearAndRelease @ 0xaf44 (0x26 bytes)
// Index: 298/906
__int64 __fastcall RstDeviceClearAndRelease(unsigned __int16 a1)
{
__int64 v1; // rax
v1 = RstDeviceGetByIndex(a1); /*0xaf48*/
if ( !v1 ) /*0xaf50*/
return 14; /*0xaf52*/
RstDeviceSetNotificationFlag(v1, 0); /*0xaf5e*/
return 0; /*0xaf65*/
}
// Function: RstRaidOpFindFailedDisk @ 0xaf6c (0x4a bytes)
// Index: 299/906
__int64 __fastcall RstRaidOpFindFailedDisk(__int64 a1, char *a2)
{
__int64 v4; // rax
__int64 v5; // rax
__int64 v6; // rcx
if ( !a2 ) /*0xaf78*/
return 1; /*0xaf78*/
v4 = RstDeviceGetByIndex(); /*0xaf81*/
if ( !v4 ) /*0xaf89*/
return 14; /*0xaf89*/
v5 = *(_QWORD *)(v4 + 160); /*0xaf92*/
if ( !v5 ) /*0xaf9c*/
return 14; /*0xaf8b*/
v6 = *(_QWORD *)(v5 + 16); /*0xaf9e*/
if ( !v6 ) /*0xafa5*/
return 1; /*0xaf7f*/
*a2 = RstRaidOpFindFailedDisk(v6); /*0xafac*/
return 0; /*0xafb0*/
}
// Function: Assert_129 @ 0xafb8 (0x5c bytes)
// Index: 300/906
__int64 __fastcall Assert_129(__int16 j)
{
__int64 v1; // rbx
unsigned __int8 j_1; // al
__int64 v3; // rax
if ( !Source_16 ) /*0xafcb*/
return 1; /*0xafcb*/
v1 = *(_QWORD *)(Source_16 + 216); /*0xafcd*/
if ( !v1 ) /*0xafd7*/
return 1; /*0xb009*/
j_1 = *(_BYTE *)(v1 + 48); /*0xafd9*/
if ( j_1 && j < j_1 && (v3 = RstArrayEntryLookup(v1, j)) != 0 ) /*0xaff3*/
return Assert_87(v1, v3); /*0xaffb*/
else
return 14; /*0xb002*/
}
// Function: RstDeviceStartOp @ 0xb014 (0xad bytes)
// Index: 301/906
__int64 __fastcall RstDeviceStartOp(__int64 n2)
{
unsigned __int8 n2_1; // dl
__int64 v2; // rcx
_QWORD *v3; // rax
_QWORD *v4; // rbx
__int64 v5; // rax
__int64 v6; // rdx
n2_1 = n2; /*0xb021*/
if ( !Source_16 ) /*0xb026*/
return 1; /*0xb026*/
v2 = *(_QWORD *)(Source_16 + 216); /*0xb02c*/
if ( !v2 ) /*0xb036*/
return 1; /*0xb0b6*/
v3 = RstLinkedListGetNth((_QWORD **)(v2 + 16), n2_1); /*0xb03f*/
v4 = v3; /*0xb044*/
if ( !v3 ) /*0xb04a*/
return 18; /*0xb04a*/
if ( !v3[8] ) /*0xb04c*/
return 18; /*0xb04c*/
if ( (*(_DWORD *)(v3[6] + 136LL) & 0x40) == 0 ) /*0xb063*/
return 18; /*0xb063*/
if ( RstDeviceCheckReservedSuffix((__int64)v3) ) /*0xb068*/
return 18; /*0xb068*/
v5 = v4[6]; /*0xb071*/
if ( (*(_BYTE *)(v5 + 139) & 1) != 0 ) /*0xb07c*/
return 18; /*0xb0af*/
RstDeviceSetFlags(v4[6], *(_DWORD *)(v5 + 136) | 0x121); /*0xb08d*/
RstDeviceClearFlags(v4[6], 64); /*0xb09b*/
LOBYTE(v6) = 1; /*0xb0a4*/
(**(void (__fastcall ***)(_QWORD, __int64))v4[8])(v4[8], v6); /*0xb0a9*/
return 0; /*0xb0bb*/
}
// Function: RstDeviceGetStatusByte @ 0xb0c4 (0x12 bytes)
// Index: 302/906
char RstDeviceGetStatusByte()
{
return *(_BYTE *)(*(_QWORD *)(Source_16 + 216) + 48LL); /*0xb0d5*/
}
// Function: RstDeviceGetRaidLevelFromIndex @ 0xb0d8 (0x48 bytes)
// Index: 303/906
__int16 __fastcall RstDeviceGetRaidLevelFromIndex(unsigned __int16 a1)
{
__int64 v3; // rcx
__int64 v4; // rax
if ( Source_16 && (v3 = *(_QWORD *)(Source_16 + 216)) != 0 && (v4 = RstLinkedListSkipN(v3, a1)) != 0 ) /*0xb10d*/
return (unsigned __int8)RstVolGetStripeSize(v4); /*0xb117*/
else
return 0; /*0xb0f0*/
}
// Function: RstVolGetOnlineMemberMask @ 0xb120 (0xa3 bytes)
// Index: 304/906
__int64 RstVolGetOnlineMemberMask()
{
__int64 v0; // rcx
__int64 v1; // rdi
unsigned __int16 v2; // bx
unsigned __int16 v3; // si
__int64 v4; // rax
v0 = Source_16; /*0xb139*/
v1 = 0; /*0xb14a*/
v2 = 0; /*0xb14d*/
v3 = **(_WORD **)(Source_16 + 216); /*0xb151*/
if ( v3 ) /*0xb158*/
{
while ( 1 ) /*0xb16d*/
{
v4 = RstLinkedListGetNth(*(_QWORD *)(v0 + 216) + 16LL, v2); /*0xb16d*/
if ( v4 && (*(_DWORD *)(*(_QWORD *)(v4 + 48) + 136LL) & 0x10) != 0 ) /*0xb187*/
v1 |= 1LL << v2; /*0xb191*/
if ( ++v2 >= v3 ) /*0xb19a*/
break; /*0xb19a*/
v0 = Source_16; /*0xb19c*/
}
}
return v1; /*0xb1bc*/
}
// Function: RstVolFindDevicesByProperty @ 0xb1c4 (0xb7 bytes)
// Index: 305/906
__int64 __fastcall RstVolFindDevicesByProperty(unsigned int a1)
{
__int64 v2; // rcx
__int64 v3; // rdi
unsigned __int16 v4; // bx
unsigned __int16 v5; // si
__int64 v6; // rax
__int64 v7; // rcx
v2 = Source_16; /*0xb1e1*/
v3 = 0; /*0xb1ef*/
v4 = 0; /*0xb1f2*/
v5 = **(_WORD **)(Source_16 + 216); /*0xb1f6*/
if ( v5 ) /*0xb1fd*/
{
while ( 1 ) /*0xb211*/
{
v6 = RstLinkedListGetNth(*(_QWORD *)(v2 + 216) + 16LL, v4); /*0xb211*/
if ( v6 ) /*0xb21c*/
{
v7 = *(_QWORD *)(v6 + 48); /*0xb21e*/
if ( (*(_DWORD *)(v7 + 136) & 0x10) != 0 && !*(_QWORD *)(v6 + 40) && (unsigned __int8)RstHelper_02b4(v7, a1) ) /*0xb238*/
v3 |= 1LL << v4; /*0xb24a*/
}
if ( ++v4 >= v5 ) /*0xb254*/
break; /*0xb254*/
v2 = Source_16; /*0xb256*/
}
}
return v3; /*0xb271*/
}
// Function: RstVolFindDevicesByLevel @ 0xb27c (0xb8 bytes)
// Index: 306/906
__int64 __fastcall RstVolFindDevicesByLevel(__int16 a1)
{
__int64 Source; // rcx
unsigned int v4; // edi
__int16 v5; // bx
unsigned __int16 v6; // si
_QWORD *v7; // rax
_QWORD *v8; // rcx
__int64 i_; // [rsp+20h] [rbp-38h] BYREF
if ( (unsigned int)Assert_121(a1, (__int64)&i_) ) /*0xb29e*/
return 0; /*0xb2ab*/
Source = Source_16; /*0xb2af*/
v4 = 0; /*0xb2b6*/
v5 = 0; /*0xb2b9*/
v6 = **(_WORD **)(Source_16 + 216); /*0xb2c4*/
if ( v6 ) /*0xb2cb*/
{
while ( 1 ) /*0xb2e1*/
{
v7 = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source + 216) + 16LL), v5); /*0xb2e1*/
if ( v7 ) /*0xb2e9*/
{
v8 = (_QWORD *)v7[5]; /*0xb2eb*/
if ( v8 ) /*0xb2f2*/
{
if ( RstLinkedListCountToNode(v8) == a1 ) /*0xb2fc*/
v4 |= 1 << v5; /*0xb305*/
}
}
if ( (unsigned __int16)++v5 >= v6 ) /*0xb30e*/
break; /*0xb30e*/
Source = Source_16; /*0xb310*/
}
}
return v4; /*0xb32a*/
}
// Function: RstDeviceBuildAllBitmap @ 0xb334 (0x6b bytes)
// Index: 307/906
__int64 RstDeviceBuildAllBitmap()
{
__int64 v0; // rcx
unsigned int v1; // edi
unsigned __int8 v2; // bl
unsigned __int8 v3; // si
v0 = Source_16; /*0xb343*/
v1 = 0; /*0xb34a*/
v2 = 0; /*0xb34c*/
v3 = *(_BYTE *)(*(_QWORD *)(Source_16 + 216) + 48LL); /*0xb355*/
if ( v3 ) /*0xb35c*/
{
while ( 1 ) /*0xb35e*/
{
if ( RstArrayEntryLookup(*(_QWORD *)(v0 + 216), v2) ) /*0xb368*/
v1 |= 1 << v2; /*0xb37b*/
if ( ++v2 >= v3 ) /*0xb382*/
break; /*0xb382*/
v0 = Source_16; /*0xb384*/
}
}
return v1; /*0xb399*/
}
// Function: RstRaidMemberOnlineBitmask @ 0xb3a0 (0x11d bytes)
// Index: 308/906
__int64 __fastcall RstRaidMemberOnlineBitmask(unsigned __int16 j)
{
__int64 v1; // rsi
__int64 v2; // rbp
unsigned __int8 n24_2; // r12
unsigned __int8 n24_1; // bl
unsigned __int16 i; // r13
int n24; // ecx
__int64 v8; // r14
unsigned __int16 k; // di
v1 = 0; /*0xb3d0*/
v2 = *(_QWORD *)(RstArrayEntryLookup(*(_QWORD *)(Source_16 + 216), j) + 8); /*0xb3d8*/
if ( !v2 ) /*0xb3df*/
return 0; /*0xb3e1*/
n24_2 = *(_BYTE *)(v2 + 20); /*0xb3ef*/
n24_1 = 0; /*0xb3f3*/
for ( i = **(_WORD **)(Source_16 + 216); n24_1 < n24_2; ++n24_1 ) /*0xb404*/
{
n24 = 24; /*0xb415*/
if ( n24_1 < 0x19u ) /*0xb41a*/
n24 = n24_1; /*0xb41a*/
v8 = *(_QWORD *)(v2 + 8LL * n24 + 24); /*0xb420*/
if ( v8 ) /*0xb428*/
{
if ( (*(_DWORD *)(*(_QWORD *)(v8 + 48) + 136LL) & 0x10) != 0 ) /*0xb439*/
{
for ( k = 0; k < i; ++k ) /*0xb443*/
{
if ( *(_DWORD *)(RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source_16 + 216) + 16LL), k)[6] + 96LL) == *(_DWORD *)(*(_QWORD *)(v8 + 48) + 96LL) ) /*0xb473*/
v1 |= 1LL << k; /*0xb47e*/
}
}
}
}
return v1; /*0xb4af*/
}
// Function: RstDeviceSetNotDegraded @ 0xb4c0 (0x23 bytes)
// Index: 309/906
void __fastcall RstDeviceSetNotDegraded(__int64 i)
{
bool v1; // zf
v1 = *(_DWORD *)(i + 88) == 3; /*0xb4c0*/
*(_BYTE *)(i + 136) = 1; /*0xb4c4*/
if ( v1 ) /*0xb4cb*/
*(_BYTE *)(i + 136) = 0; /*0xb4cd*/
if ( _bittest((const signed __int32 *)(i + 116), 0xDu) ) /*0xb4d4*/
*(_BYTE *)(i + 136) = 0; /*0xb4db*/
}
// Function: RstDeviceGetFeatureFlagBit @ 0xb4e4 (0xdc bytes)
// Index: 310/906
char __fastcall RstDeviceGetFeatureFlagBit(int n7)
{
char *v2; // rax
int v3; // ebx
int v4; // ebx
int v5; // ebx
int v6; // ebx
int v7; // ebx
int v8; // eax
int v10; // eax
int v11; // ebx
char v12; // cl
int v13; // ebx
int v14; // ebx
int v15; // ebx
int v16; // ebx
int v17; // edx
v2 = (char *)RstGetGlobalContext(); /*0xb4ec*/
if ( n7 <= 7 ) /*0xb4f4*/
{
if ( n7 == 7 ) /*0xb4f6*/
{
v10 = *(_DWORD *)(v2 + 26) >> 25; /*0xb554*/
}
else
{
if ( n7 ) /*0xb4fc*/
{
v3 = n7 - 1; /*0xb503*/
if ( !v3 ) /*0xb505*/
{
v8 = *(_DWORD *)(v2 + 26) >> 1; /*0xb546*/
return v8 & 1; /*0xb546*/
}
v4 = v3 - 1; /*0xb507*/
if ( !v4 ) /*0xb509*/
{
v8 = *(_DWORD *)(v2 + 26) >> 2; /*0xb53e*/
return v8 & 1; /*0xb541*/
}
v5 = v4 - 1; /*0xb50b*/
if ( !v5 ) /*0xb50d*/
{
v8 = *(_DWORD *)(v2 + 26) >> 3; /*0xb536*/
return v8 & 1; /*0xb539*/
}
v6 = v5 - 1; /*0xb50f*/
if ( v6 ) /*0xb511*/
{
v7 = v6 - 1; /*0xb513*/
if ( !v7 ) /*0xb515*/
{
v8 = *(_DWORD *)(v2 + 26) >> 5; /*0xb526*/
return v8 & 1; /*0xb529*/
}
if ( v7 == 1 ) /*0xb519*/
{
v8 = *(_DWORD *)(v2 + 26) >> 27; /*0xb51e*/
return v8 & 1; /*0xb54a*/
}
return 0; /*0xb519*/
}
goto LABEL_12; /*0xb511*/
}
v10 = *(_DWORD *)(v2 + 26); /*0xb54c*/
}
return v10 & 1; /*0xb54f*/
}
v11 = n7 - 8; /*0xb559*/
if ( !v11 ) /*0xb55c*/
{
v10 = *(_DWORD *)(v2 + 26) >> 29; /*0xb5b4*/
return v10 & 1; /*0xb5b7*/
}
v12 = 1; /*0xb55e*/
v13 = v11 - 1; /*0xb563*/
if ( !v13 ) /*0xb565*/
{
v8 = *(_DWORD *)(v2 + 26) >> 26; /*0xb5ac*/
return v8 & 1; /*0xb5af*/
}
v14 = v13 - 1; /*0xb567*/
if ( !v14 ) /*0xb569*/
{
v8 = *(_DWORD *)(v2 + 30); /*0xb5a4*/
return v8 & 1; /*0xb5a7*/
}
v15 = v14 - 1; /*0xb56b*/
if ( v15 ) /*0xb56d*/
{
v16 = v15 - 1; /*0xb56f*/
if ( v16 ) /*0xb571*/
{
if ( v16 == 1 ) /*0xb575*/
{
v8 = *(_DWORD *)(v2 + 34) >> 10; /*0xb57e*/
return v8 & 1; /*0xb581*/
}
return 0; /*0xb579*/
}
LABEL_12:
v8 = *(_DWORD *)(v2 + 26) >> 4; /*0xb52b*/
return v8 & 1; /*0xb531*/
}
v17 = *(_DWORD *)(v2 + 26); /*0xb583*/
if ( (v17 & 2) == 0 && (v17 & 0x10) == 0 ) /*0xb595*/
return (v17 & 4) != 0; /*0xb59e*/
return v12; /*0xb5ba*/
}
// Function: RstGetGlobalMode @ 0xb5c0 (0x17 bytes)
// Index: 311/906
__int64 RstGetGlobalMode()
{
return (*(_DWORD *)((char *)RstGetGlobalContext() + 34) >> 8) & 3; /*0xb5d2*/
}
// Function: RstGetGlobalContextPtr @ 0xb5d8 (0x5 bytes)
// Index: 312/906
// attributes: thunk
void *RstGetGlobalContextPtr()
{
return RstGetGlobalContext();
}
// Function: RstDeviceGetName @ 0xb5e0 (0x68 bytes)
// Index: 313/906
__int64 __fastcall RstDeviceGetName(__int16 a1, CHAR16 *Destination)
{
__int64 v5; // rcx
_QWORD *v6; // rax
__int64 v7; // rdx
if ( !Destination ) /*0xb5ef*/
return 1; /*0xb5ef*/
if ( !Source_16 ) /*0xb602*/
return 1; /*0xb602*/
v5 = *(_QWORD *)(Source_16 + 216); /*0xb604*/
if ( !v5 ) /*0xb60e*/
return 1; /*0xb60e*/
v6 = RstLinkedListGetNth((_QWORD **)(v5 + 16), a1); /*0xb614*/
if ( !v6 ) /*0xb61c*/
return 15; /*0xb623*/
v7 = v6[6]; /*0xb625*/
if ( !v7 ) /*0xb62c*/
return 1; /*0xb5f6*/
StrnCpy(Destination, (const CHAR16 *)(v7 + 45), 0x29u); /*0xb63b*/
return 0; /*0xb642*/
}
// Function: RstDeviceGetStatusStringId @ 0xb648 (0xca bytes)
// Index: 314/906
__int64 __fastcall RstDeviceGetStatusStringId(__int64 a1)
{
int v1; // edx
int v2; // r8d
__int64 result; // rax
int v4; // edx
int v5; // edx
v1 = *(_DWORD *)(a1 + 88); /*0xb64d*/
v2 = *(_DWORD *)(a1 + 96); /*0xb650*/
result = *(unsigned int *)(a1 + 132); /*0xb654*/
if ( _bittest((const signed __int32 *)(a1 + 116), 0xDu) ) /*0xb648*/
{
*(_DWORD *)(a1 + 140) = 31; /*0xb65c*/
return result; /*0xb666*/
}
if ( !v1 ) /*0xb669*/
{
if ( !v2 ) /*0xb66e*/
{
if ( !(_DWORD)result ) /*0xb672*/
{
LABEL_6:
*(_DWORD *)(a1 + 140) = 21; /*0xb674*/
return result; /*0xb67e*/
}
goto LABEL_8; /*0xb672*/
}
LABEL_16:
if ( (_DWORD)result ) /*0xb6c5*/
{
result = (unsigned int)(result - 1); /*0xb6c7*/
if ( (_DWORD)result ) /*0xb6ca*/
{
result = (unsigned int)(result - 1); /*0xb6cc*/
if ( (_DWORD)result ) /*0xb6cf*/
{
result = (unsigned int)(result - 1); /*0xb6d1*/
if ( (_DWORD)result ) /*0xb6d4*/
{
if ( (_DWORD)result == 1 ) /*0xb6d9*/
*(_DWORD *)(a1 + 140) = 37; /*0xb6db*/
}
else
{
*(_DWORD *)(a1 + 140) = 36; /*0xb6e6*/
}
}
else
{
*(_DWORD *)(a1 + 140) = 35; /*0xb6f1*/
}
}
else
{
*(_DWORD *)(a1 + 140) = 24; /*0xb6fc*/
}
}
else
{
*(_DWORD *)(a1 + 140) = 34; /*0xb707*/
}
return result; /*0xb6e5*/
}
if ( v2 ) /*0xb682*/
goto LABEL_16; /*0xb682*/
LABEL_8:
if ( !v1 ) /*0xb686*/
goto LABEL_6; /*0xb686*/
v4 = v1 - 1; /*0xb688*/
if ( v4 ) /*0xb68b*/
{
v5 = v4 - 1; /*0xb68d*/
if ( v5 ) /*0xb690*/
{
if ( v5 == 1 ) /*0xb695*/
*(_DWORD *)(a1 + 140) = 22; /*0xb6a2*/
else
*(_DWORD *)(a1 + 140) = 38; /*0xb697*/
}
else
{
*(_DWORD *)(a1 + 140) = 23; /*0xb6ad*/
}
}
else
{
*(_DWORD *)(a1 + 140) = 25; /*0xb6b8*/
}
return result; /*0xb666*/
}
// Function: RstDeviceStatusCodeMap @ 0xb714 (0x60 bytes)
// Index: 315/906
__int64 __fastcall RstDeviceStatusCodeMap(unsigned int *a1)
{
__int64 n5; // rax
int v2; // eax
n5 = a1[8]; /*0xb714*/
if ( (_DWORD)n5 ) /*0xb719*/
{
v2 = n5 - 1; /*0xb71b*/
if ( v2 ) /*0xb71e*/
{
n5 = (unsigned int)(v2 - 4); /*0xb720*/
if ( (_DWORD)n5 ) /*0xb723*/
{
if ( (_DWORD)n5 == 5 ) /*0xb728*/
a1[36] = 44; /*0xb72a*/
}
else
{
a1[36] = 43; /*0xb735*/
}
}
else
{
n5 = a1[29]; /*0xb740*/
if ( (n5 & 0x400) != 0 ) /*0xb747*/
{
n5 = (unsigned int)((a1[29] & 0x800) != 0) + 39; /*0xb754*/
a1[36] = n5; /*0xb757*/
}
else
{
a1[36] = 42; /*0xb75e*/
}
}
}
else
{
a1[36] = 41; /*0xb769*/
}
return n5; /*0xb734*/
}
// Function: RstBlockSizeToStatusCode @ 0xb774 (0x13a bytes)
// Index: 316/906
void __fastcall RstBlockSizeToStatusCode(_DWORD *a1)
{
unsigned int n512; // eax
unsigned int v2; // eax
unsigned int v3; // eax
unsigned int v4; // eax
unsigned int v5; // eax
unsigned int v6; // eax
unsigned int v7; // eax
unsigned int n128; // eax
if ( a1[8] == 1 ) /*0xb778*/
goto LABEL_28; /*0xb778*/
n512 = a1[12]; /*0xb77e*/
if ( n512 <= 0x200 ) /*0xb788*/
{
if ( n512 == 512 ) /*0xb78e*/
{
a1[37] = 55; /*0xb81a*/
return; /*0xb824*/
}
v2 = n512 - 2; /*0xb794*/
if ( !v2 ) /*0xb797*/
{
a1[37] = 47; /*0xb80f*/
return; /*0xb819*/
}
v3 = v2 - 2; /*0xb799*/
if ( !v3 ) /*0xb79c*/
{
a1[37] = 48; /*0xb804*/
return; /*0xb80e*/
}
v4 = v3 - 4; /*0xb79e*/
if ( !v4 ) /*0xb7a1*/
{
a1[37] = 49; /*0xb7f9*/
return; /*0xb803*/
}
v5 = v4 - 8; /*0xb7a3*/
if ( !v5 ) /*0xb7a6*/
{
a1[37] = 50; /*0xb7ee*/
return; /*0xb7f8*/
}
v6 = v5 - 16; /*0xb7a8*/
if ( !v6 ) /*0xb7ab*/
{
a1[37] = 51; /*0xb7e3*/
return; /*0xb7ed*/
}
v7 = v6 - 32; /*0xb7ad*/
if ( !v7 ) /*0xb7b0*/
{
a1[37] = 52; /*0xb7d8*/
return; /*0xb7e2*/
}
n128 = v7 - 64; /*0xb7b2*/
if ( !n128 ) /*0xb7b5*/
{
a1[37] = 53; /*0xb7cd*/
return; /*0xb7d7*/
}
if ( n128 == 128 ) /*0xb7bc*/
{
a1[37] = 54; /*0xb7c2*/
return; /*0xb7cc*/
}
goto LABEL_28; /*0xb7bc*/
}
switch ( n512 ) /*0xb82a*/
{
case 0x400u: /*0xb82a*/
a1[37] = 56; /*0xb8a3*/
break;
case 0x800u: /*0xb82a*/
a1[37] = 57; /*0xb898*/
break;
case 0x1000u: /*0xb82a*/
a1[37] = 58; /*0xb88d*/
break;
case 0x2000u: /*0xb82a*/
a1[37] = 59; /*0xb882*/
break;
case 0x4000u: /*0xb82a*/
a1[37] = 60; /*0xb877*/
break;
case 0x8000u: /*0xb82a*/
a1[37] = 61; /*0xb86c*/
break;
default:
if ( n512 != (_DWORD)&loc_FFFE + 2 ) /*0xb854*/
{
LABEL_28:
a1[37] = 46; /*0xb856*/
return; /*0xb860*/
}
a1[37] = 62; /*0xb861*/
break;
}
}
// Function: RstDeviceCapFilterByType @ 0xb8b0 (0x32 bytes)
// Index: 317/906
__int16 __fastcall RstDeviceCapFilterByType(__int64 n5)
{
int n5_1; // ebx
__int16 v2; // ax
n5_1 = (unsigned __int16)n5; /*0xb8b6*/
v2 = *((_WORD *)RstGetGlobalContext() + 9); /*0xb8be*/
if ( n5_1 == 5 ) /*0xb8c5*/
return v2 & 0x7E; /*0xb8d8*/
if ( n5_1 == 10 ) /*0xb8ca*/
return v2 & 0x3F; /*0xb8d2*/
return v2 & 0x7F; /*0xb8dc*/
}
// Function: Assert_102 @ 0xb8e4 (0x58 bytes)
// Index: 318/906
char __fastcall Assert_102(__int16 a1, unsigned __int16 n5, char a3)
{
_QWORD *v5; // rax
__int64 v6; // r8
char v7; // bl
v5 = RstLinkedListSkipN(*(_QWORD *)(Source_16 + 216), a1); /*0xb90a*/
v7 = 0; /*0xb90f*/
if ( v5 ) /*0xb914*/
{
LOBYTE(v6) = a3; /*0xb916*/
return Assert_31((__int64)v5, n5, v6) != 0; /*0xb928*/
}
return v7; /*0xb936*/
}
// Function: RstDeviceCountConfigured @ 0xb93c (0x93 bytes)
// Index: 319/906
__int64 __fastcall RstDeviceCountConfigured()
{
unsigned int v0; // edi
__int64 v2; // rsi
unsigned __int8 i_1; // bp
unsigned __int8 i; // bl
__int64 v5; // rax
v0 = 0; /*0xb95c*/
if ( !Source_16 ) /*0xb964*/
return 0; /*0xb964*/
v2 = *(_QWORD *)(Source_16 + 216); /*0xb96a*/
if ( !v2 ) /*0xb974*/
return 0; /*0xb966*/
i_1 = *(_BYTE *)(v2 + 48); /*0xb976*/
for ( i = 0; i < i_1; ++i ) /*0xb97f*/
{
v5 = RstArrayEntryLookup(v2, i); /*0xb987*/
if ( v5 ) /*0xb98f*/
{
if ( RstDeviceMemberIsNvme(v5) ) /*0xb997*/
v0 |= 1 << i; /*0xb9a9*/
}
}
return v0; /*0xb9c8*/
}
// Function: RstDeviceFindMemberSlot @ 0xb9d0 (0x42 bytes)
// Index: 320/906
_QWORD *__fastcall RstDeviceFindMemberSlot(__int64 a1, __int64 a2)
{
unsigned __int8 n23_1; // r8
int n23; // ecx
_QWORD *result; // rax
n23_1 = 0; /*0xb9d0*/
if ( !a2 || !*(_BYTE *)(a2 + 42) ) /*0xb9db*/
return 0; /*0xba0f*/
while ( 1 ) /*0xb9e9*/
{
n23 = 23; /*0xb9e9*/
if ( n23_1 < 0x18u ) /*0xb9ee*/
n23 = n23_1; /*0xb9ee*/
result = (_QWORD *)(a2 + 16 * (n23 + 7LL)); /*0xb9fc*/
if ( result ) /*0xb9ff*/
{
if ( *result == a1 ) /*0xba04*/
break; /*0xba04*/
}
if ( ++n23_1 >= *(_BYTE *)(a2 + 42) ) /*0xba0d*/
return 0; /*0xba0d*/
}
return result; /*0xba11*/
}
// Function: RstDeviceIsMemberOrActive @ 0xba14 (0x55 bytes)
// Index: 321/906
char __fastcall RstDeviceIsMemberOrActive(__int64 a1, __int64 a2)
{
__int64 v4; // rax
if ( a2 ) /*0xba27*/
{
if ( RstDeviceGetNthActive(a2) == a1 || RstRaidMemberFindLastActive(a2) == a1 ) /*0xba41*/
return 1; /*0xba5a*/
v4 = RstDeviceFindMemberSlot(a1, a2); /*0xba49*/
if ( v4 ) /*0xba51*/
return *(_BYTE *)(v4 + 8); /*0xba56*/
}
return 0; /*0xba63*/
}
// Function: RstRaidMemberFindCompatible @ 0xba6c (0x12c bytes)
// Index: 322/906
char __fastcall RstRaidMemberFindCompatible(__int64 a1)
{
__int16 v2; // bp
__int64 v4; // rax
char v5; // di
unsigned __int16 v6; // bx
__int64 v7; // r12
__int64 v8; // rax
__int64 v9; // rsi
char v10; // di
char v11; // di
__int64 v12; // r10
__int64 v13; // rax
int v14; // r11d
v2 = *(_WORD *)(Source_16 + 192); /*0xba9d*/
if ( !RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), a1) ) /*0xbaa4*/
return 0; /*0xbab1*/
v4 = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), a1); /*0xbac9*/
v5 = 0; /*0xbace*/
v6 = 0; /*0xbad1*/
v7 = *(_QWORD *)(v4 + 48); /*0xbad5*/
do /*0xbb70*/
{
if ( (__int16)v6 >= v2 ) /*0xbae2*/
break; /*0xbae2*/
v8 = RstDeviceContextGetNth(Source_16, v6); /*0xbaf2*/
v9 = v8; /*0xbaf7*/
if ( v8 ) /*0xbafd*/
{
v10 = RstDeviceIsMemberOrActive(v7, *(_QWORD *)(*(_QWORD *)(v8 + 160) + 16LL)) | v5; /*0xbb20*/
v11 = RstDeviceIsMemberOrActive(v7, *(_QWORD *)(*(_QWORD *)(v9 + 160) + 24LL)) | v10; /*0xbb36*/
RstDeviceFindMemberSlot(v7, *(_QWORD *)(*(_QWORD *)(v9 + 160) + 24LL)); /*0xbb39*/
v13 = RstDeviceFindMemberSlot(v7, *(_QWORD *)(v12 + 16)); /*0xbb4f*/
v5 = ((v13 != 0) + v14 == 1) | v11; /*0xbb66*/
}
++v6; /*0xbb69*/
}
while ( !v5 ); /*0xbb70*/
return v5; /*0xbb8d*/
}
// Function: RstDeviceFindByIndexAndKey @ 0xbb98 (0x3a bytes)
// Index: 323/906
_QWORD *__fastcall RstDeviceFindByIndexAndKey(__int16 n24, const char *en)
{
_QWORD *result; // rax
result = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source_16 + 216) + 16LL), n24); /*0xbbb6*/
if ( result ) /*0xbbbe*/
return (_QWORD *)RstProtocolReadVariable(result[6], en); /*0xbbc7*/
return result; /*0xbbcc*/
}
// Function: RstDeviceGetProperty @ 0xbbd4 (0x83 bytes)
// Index: 324/906
__int64 __fastcall RstDeviceGetProperty(__int64 a1, __int64 n24, char *en)
{
__int64 v6; // rcx
__int64 v7; // rax
__int64 v8; // rcx
if ( !a1 || !en ) /*0xbbec*/
return 0x8000000000000002uLL; /*0xbc42*/
if ( !Source_16 ) /*0xbbf8*/
return 0x8000000000000007uLL; /*0xbbf8*/
v6 = *(_QWORD *)(Source_16 + 216); /*0xbc06*/
if ( !v6 ) /*0xbc10*/
return 0x8000000000000007uLL; /*0xbbfa*/
v7 = RstLinkedListGetNth(v6 + 16, n24); /*0xbc16*/
if ( v7 && (v8 = *(_QWORD *)(v7 + 48)) != 0 ) /*0xbc33*/
return RstHiiGetString(v8, a1, en); /*0xbc3b*/
else
return 0x800000000000000EuLL; /*0xbc20*/
}
// Function: Assert_107 @ 0xbc58 (0x3a bytes)
// Index: 325/906
__int64 Assert_107unsigned __int8 a1, unsigned int n4)
{
__int64 *v3; // rax
v3 = (__int64 *)RstArrayEntryLookup(*(_QWORD *)(Source_16 + 216), a1); /*0xbc71*/
if ( v3 ) /*0xbc79*/
return Assert_6(v3, n4); /*0xbc87*/
else
return 14; /*0xbc7b*/
}
// Function: RstDeviceGetFieldCount @ 0xbc94 (0x67 bytes)
// Index: 326/906
char __fastcall RstDeviceGetFieldCount(unsigned __int8 a1)
{
__int64 v2; // rcx
__int64 v3; // rbx
_QWORD *v4; // rax
__int64 v5; // rdx
__int64 Destination; // rax
if ( Source_16 /*0xbce5*/
&& (v2 = *(_QWORD *)(Source_16 + 216), v3 = Source_16 + 224, Source_16 != -224)
&& v2
&& (v4 = RstLinkedListGetNth((_QWORD **)(v2 + 16), a1)) != 0
&& (v5 = v4[6]) != 0
&& (Destination = RstBufferPoolFindEntry(v3, v5)) != 0 )
{
return RstGetFieldCount(Destination, 1); /*0xbcec*/
}
else
{
return 0; /*0xbcf3*/
}
}
// Function: j_j_HiiBlockCompare @ 0xbcfc (0x5 bytes)
// Index: 327/906
// attributes: thunk
__int64 __fastcall j_j_HiiBlockCompare()
{
return j_HiiBlockCompare();
}
// Function: j_j_HiiBlockCompareConst @ 0xbd04 (0x5 bytes)
// Index: 328/906
// attributes: thunk
__int64 j_j_HiiBlockCompareConst()
{
return j_HiiBlockCompareConst();
}
// Function: j_j_HiiLibGuidIsZero @ 0xbd0c (0x5 bytes)
// Index: 329/906
// attributes: thunk
__int64 __fastcall j_j_HiiLibGuidIsZero(unsigned int a1)
{
return j_HiiLibGuidIsZero(a1);
}
// Function: j_j_HiiLibGuidToStr @ 0xbd14 (0x5 bytes)
// Index: 330/906
// attributes: thunk
__int64 __fastcall j_j_HiiLibGuidToStr(unsigned int a1, const char *en)
{
return j_HiiLibGuidToStr(a1, en);
}
// Function: RstHelper_bd1c @ 0xbd1c (0x4a bytes)
// Index: 331/906
__int64 RstHelper_bd1c_int16 n24, const char *en)
{
_QWORD *v3; // rax
unsigned int v4; // eax
v3 = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source_16 + 216) + 16LL), n24); /*0xbd3a*/
if ( !v3 ) /*0xbd42*/
return 0; /*0xbd42*/
v4 = RstHelper_02c0(v3[6]); /*0xbd48*/
if ( v4 == -1 ) /*0xbd50*/
return 0; /*0xbd5e*/
else
return j_HiiLibGuidToStr(v4, en); /*0xbd57*/
}
// Function: RstDeviceGetRaidLevelByIndex @ 0xbd68 (0x45 bytes)
// Index: 332/906
__int64 __fastcall RstDeviceGetRaidLevelByIndex(unsigned __int16 a1)
{
__int64 v1; // rdx
__int64 v3; // rcx
__int64 v4; // rax
__int64 v5; // rcx
v1 = a1; /*0xbd73*/
if ( Source_16 /*0xbda1*/
&& (v3 = *(_QWORD *)(Source_16 + 216)) != 0
&& (v4 = RstLinkedListGetNth(v3 + 16, v1)) != 0
&& (v5 = *(_QWORD *)(v4 + 48)) != 0 )
{
return RstHelper_02c0(v5); /*0xbda3*/
}
else
{
return 0xFFFFFFFFLL; /*0xbd7b*/
}
}
// Function: RstDeviceBlockSizeToStripe @ 0xbdb0 (0x51 bytes)
// Index: 333/906
__int16 __fastcall RstDeviceBlockSizeToStripe(__int16 n3)
{
__int16 n8; // ax
if ( n3 != 3 && (n3 & 1) != 0 ) /*0xbdc1*/
return 128; /*0xbdc3*/
n8 = 8; /*0xbdce*/
if ( n3 != 16 ) /*0xbdd4*/
{
if ( n3 == 8 || n3 == 24 ) /*0xbddf*/
{
return 16; /*0xbdfd*/
}
else if ( n3 == 4 || n3 == 12 || n3 == 20 ) /*0xbdf1*/
{
return 32; /*0xbdf7*/
}
else
{
return 64; /*0xbdf3*/
}
}
return n8; /*0xbdc8*/
}
// Function: RstHelper_be04 @ 0xbe04 (0x34f bytes)
// Index: 334/906
__int64 __fastcall RstHelper_be04(unsigned __int8 j, unsigned __int8 n24, char a3)
{
unsigned int n20; // r13d
__int64 v5; // rbx
_QWORD *v7; // rax
__int64 v8; // r12
__int64 v9; // rax
__int64 v10; // rax
__int64 *v11; // rbp
__int64 v12; // rax
__int64 v13; // rsi
__int64 v14; // rdx
int v15; // ebx
__int64 v16; // rdx
__int64 v17; // rsi
unsigned __int64 v18; // rbx
__int64 v19; // rax
unsigned __int8 n24_2; // bl
bool v21; // r14
int n24_1; // ecx
__int64 v23; // r15
int v24; // ecx
unsigned __int8 i; // r14
unsigned __int8 n2; // cl
int i_1; // ecx
__int64 *v28; // rax
__int64 v29; // rax
__int64 v30; // r15
__int64 v31; // rbx
__int64 v32; // rbx
int v33; // eax
__int64 v34; // rdx
n20 = 0; /*0xbe2a*/
if ( !Source_16 ) /*0xbe30*/
return 1; /*0xbe30*/
v5 = *(_QWORD *)(Source_16 + 216); /*0xbe36*/
if ( !v5 ) /*0xbe40*/
return 1; /*0xc139*/
if ( j >= *(_BYTE *)(v5 + 48) ) /*0xbe49*/
return 14; /*0xbe50*/
v7 = RstLinkedListGetNth((_QWORD **)(v5 + 16), n24); /*0xbe5c*/
v8 = (__int64)v7; /*0xbe61*/
if ( !v7 ) /*0xbe67*/
return 15; /*0xbe67*/
v9 = v7[6]; /*0xbe6d*/
if ( !v9 ) /*0xbe74*/
return 15; /*0xc132*/
if ( (*(_BYTE *)(v9 + 136) & 0x41) == 0 /*0xbed5*/
|| RstDeviceCheckReservedSuffix(v8)
|| (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 34) & 0x400) == 0 && *(_WORD *)(*(_QWORD *)(v8 + 48) + 172LL) != 0x8086
|| (*(_DWORD *)(*(_QWORD *)(v8 + 48) + 136LL) & 0x200) != 0 )
{
return 16; /*0xc12b*/
}
v10 = RstArrayEntryLookup(v5, j); /*0xbee2*/
v11 = (__int64 *)v10; /*0xbee7*/
if ( !v10 ) /*0xbeed*/
return 14; /*0xbeed*/
v12 = *(_QWORD *)(v10 + 56); /*0xbef3*/
if ( !v12 ) /*0xbefa*/
return 14; /*0xbefa*/
v13 = *v11; /*0xbf00*/
if ( !*v11 ) /*0xbf00*/
return 14; /*0xbf07*/
v14 = *(_QWORD *)(v12 + 40); /*0xbf0d*/
if ( !v14 || !*(_WORD *)(v14 + 4) ) /*0xbf1a*/
return 20; /*0xc124*/
v15 = HiiLibReturnZero(*(_QWORD *)(v8 + 48)); /*0xbf32*/
if ( (unsigned int)HiiLibReturnZero(v13) != v15 ) /*0xbf3b*/
return 43; /*0xbf3d*/
v17 = v11[1]; /*0xbf47*/
if ( !v17 || !*(_QWORD *)(v17 + 248) ) /*0xbf54*/
return 14; /*0xbf5b*/
v18 = *(_QWORD *)(*(_QWORD *)(v8 + 48) + 88LL); /*0xbf69*/
if ( v18 < Assert_35(v11[1], v16) ) /*0xbf75*/
return 13; /*0xbf77*/
v19 = *(_QWORD *)(*(_QWORD *)(*v11 + 160) + 16LL); /*0xbf91*/
if ( v19 && *(_DWORD *)(v19 + 8) == 2 && (unsigned int)RstCfgCheckVolumeType(v17) == 2 ) /*0xbfab*/
n20 = 20; /*0xbfab*/
n24_2 = 0; /*0xbfb4*/
v21 = (*(_DWORD *)(*(_QWORD *)(v8 + 48) + 100LL) & 8) == 8; /*0xbfc0*/
if ( *(_BYTE *)(v17 + 20) ) /*0xbfc4*/
{
while ( 1 ) /*0xbfcd*/
{
n24_1 = 24; /*0xbfcd*/
if ( n24_2 < 0x19u ) /*0xbfd5*/
n24_1 = n24_2; /*0xbfd5*/
v23 = *(_QWORD *)(v17 + 8LL * n24_1 + 24); /*0xbfdb*/
if ( !RstStringLastColonIndex((CHAR16 *)(v23 + 18)) ) /*0xbfe4*/
{
v24 = (*(_DWORD *)(*(_QWORD *)(v23 + 48) + 100LL) >> 3) & 1; /*0xbff9*/
if ( v24 ) /*0xbffb*/
{
if ( !v21 ) /*0xc000*/
return 21; /*0xc08c*/
}
if ( v24 != 1 && v21 ) /*0xc00d*/
return 21; /*0xc08c*/
}
if ( ++n24_2 >= *(_BYTE *)(v17 + 20) ) /*0xc015*/
goto LABEL_36; /*0xc015*/
}
}
else
{
LABEL_36:
for ( i = 0; ; ++i ) /*0xc01a*/
{
n2 = *(_BYTE *)(v17 + 224); /*0xc023*/
if ( n2 >= 2u ) /*0xc028*/
n2 = 2; /*0xc02a*/
if ( i >= n2 ) /*0xc032*/
break; /*0xc032*/
i_1 = 1; /*0xc040*/
if ( i < 2u ) /*0xc042*/
i_1 = i; /*0xc042*/
v28 = *(__int64 **)(v17 + 8LL * i_1 + 232); /*0xc048*/
if ( !v28 ) /*0xc053*/
return 1; /*0xc053*/
v29 = *v28; /*0xc059*/
if ( !v29 ) /*0xc05f*/
return 1; /*0xc05f*/
v30 = *(_QWORD *)(v29 + 160); /*0xc065*/
v31 = *(_QWORD *)(v30 + 16); /*0xc06e*/
if ( !v31 ) /*0xc075*/
return 1; /*0xc122*/
if ( *(_DWORD *)(v31 + 8) == 2 || !*(_WORD *)(v31 + 40) ) /*0xc081*/
{
if ( !RstRaidMemberFindLastActive(*(_QWORD *)(v30 + 16)) && !RstDeviceGetNthActive(v31) ) /*0xc0ae*/
{
n20 = 20; /*0xc0ea*/
break; /*0xc0ea*/
}
if ( !a3 ) /*0xc0b5*/
{
RstDeviceClearFlags(*(_QWORD *)(v8 + 48), 64); /*0xc0c1*/
RstDeviceSetFlags(*(_QWORD *)(v8 + 48), 1u); /*0xc0cd*/
Assert_79(v30, *(_QWORD *)(v8 + 48)); /*0xc0da*/
}
}
else
{
n20 = 20; /*0xc087*/
}
}
if ( !a3 && !n20 ) /*0xc0fa*/
{
v32 = *(_QWORD *)(v17 + 248); /*0xc0fc*/
v33 = RstGetUefiTime(); /*0xc103*/
LOBYTE(v34) = 1; /*0xc108*/
*(_DWORD *)(v32 + 24) += v33; /*0xc10b*/
(***(void (__fastcall ****)(_QWORD, __int64))(v17 + 248))(*(_QWORD *)(v17 + 248), v34); /*0xc118*/
}
return n20; /*0xc11b*/
}
}
// Function: RstDeviceSetDegraded @ 0xc154 (0x87 bytes)
// Index: 335/906
__int64 __fastcall RstDeviceSetDegraded(__int64 a1, unsigned __int8 n0x18)
{
__int64 Source; // rax
unsigned __int8 n24; // di
*(_DWORD *)(a1 + 152) = 1; /*0xc168*/
Source = Source_16; /*0xc172*/
n24 = 0; /*0xc188*/
if ( **(_WORD **)(Source_16 + 216) ) /*0xc18b*/
{
while ( 1 ) /*0xc19a*/
{
Source = RstHelper_be04(n0x18, n24, 1); /*0xc19a*/
if ( !(_DWORD)Source ) /*0xc1a1*/
break; /*0xc1a1*/
Source = ++n24; /*0xc1b4*/
if ( n24 >= (unsigned int)**(_WORD **)(Source_16 + 216) ) /*0xc1bb*/
return Source; /*0xc1bb*/
}
*(_DWORD *)(a1 + 152) |= 0x20u; /*0xc1bf*/
}
return Source; /*0xc1d5*/
}
// Function: RstDeviceGetCapability @ 0xc1dc (0x71 bytes)
// Index: 336/906
__int64 __fastcall RstDeviceGetCapability(unsigned __int16 n5, __int64 a2)
{
int v2; // ecx
__int64 n4; // rax
int v4; // ecx
switch ( n5 ) /*0xc1e3*/
{
case 0u: /*0xc1e3*/
LOBYTE(v2) = *((_BYTE *)RstGetGlobalContext() + 26); /*0xc1ea*/
goto LABEL_5; /*0xc1ed*/
case 1u: /*0xc1e3*/
v2 = *(_DWORD *)((char *)RstGetGlobalContext() + 26) >> 1; /*0xc1fd*/
LABEL_5:
if ( (v2 & 1) != 0 ) /*0xc202*/
return 2; /*0xc209*/
return 0xFFFF; /*0xc202*/
case 5u: /*0xc1e3*/
if ( (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 26) & 0x10) != 0 ) /*0xc21f*/
return 3; /*0xc226*/
return 0xFFFF; /*0xc21f*/
}
if ( n5 != 10 ) /*0xc22c*/
return 0xFFFF; /*0xc22c*/
v4 = *(_DWORD *)((char *)RstGetGlobalContext() + 26); /*0xc233*/
n4 = 4; /*0xc236*/
if ( (v4 & 4) == 0 ) /*0xc241*/
return 0xFFFF; /*0xc243*/
return n4; /*0xc248*/
}
// Function: RstRaidGetStripeWidth @ 0xc250 (0xad bytes)
// Index: 337/906
__int16 __fastcall RstRaidGetStripeWidth(unsigned __int16 n5, char a2)
{
switch ( n5 ) /*0xc267*/
{
case 0u: /*0xc267*/
if ( (*((_BYTE *)RstGetGlobalContext() + 26) & 1) != 0 ) /*0xc276*/
return *((_WORD *)RstGetGlobalContext() + 10); /*0xc281*/
return a2 && (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 26) & 0x2000000) != 0; /*0xc295*/
case 1u: /*0xc267*/
if ( (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 26) & 2) != 0 ) /*0xc2b2*/
return 2; /*0xc2b7*/
return 0; /*0xc2b2*/
case 5u: /*0xc267*/
if ( (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 26) & 0x10) != 0 ) /*0xc2cc*/
return *((_WORD *)RstGetGlobalContext() + 10); /*0xc2cc*/
return 0; /*0xc2cc*/
}
if ( n5 != 10 || (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 26) & 4) == 0 ) /*0xc2f4*/
return 0; /*0xc2ce*/
return 4; /*0xc2db*/
}
// Function: RstRaidCheckDiskCountValid @ 0xc300 (0xc2 bytes)
// Index: 338/906
__int64 __fastcall RstRaidCheckDiskCountValid(unsigned __int16 n2, __int64 n5, char a3)
{
unsigned __int16 n5_1; // di
unsigned __int16 n2_1; // si
unsigned __int16 n2_2; // ax
unsigned __int16 n4; // r11
__int64 n35; // rax
n5_1 = n5; /*0xc314*/
LOBYTE(n5) = a3; /*0xc31a*/
n2_1 = RstDeviceGetCapability(n5_1, n5); /*0xc32d*/
n2_2 = RstRaidGetStripeWidth(n5_1, a3); /*0xc330*/
n4 = n2_2; /*0xc335*/
if ( n2 >= n2_1 && n2 <= n2_2 ) /*0xc341*/
return 0; /*0xc345*/
if ( n2_1 == n2_2 ) /*0xc350*/
{
if ( n2_1 == 2 ) /*0xc358*/
return 36; /*0xc368*/
if ( n2_1 == 4 ) /*0xc35c*/
return 37; /*0xc361*/
}
if ( n2 <= n2_2 ) /*0xc36e*/
{
switch ( n2_1 ) /*0xc387*/
{
case 1u: /*0xc387*/
return 32; /*0xc3a8*/
case 2u: /*0xc387*/
return 33; /*0xc3a1*/
case 3u: /*0xc387*/
return 34; /*0xc39a*/
default:
return 9; /*0xc393*/
}
}
else
{
n35 = 35; /*0xc370*/
if ( n4 != 4 ) /*0xc37c*/
return 10; /*0xc37c*/
}
return n35; /*0xc3bc*/
}
// Function: RstDeviceSetMode @ 0xc3c4 (0x2fe bytes)
// Index: 339/906
void *__fastcall RstDeviceSetMode(__int64 i)
{
int v1; // edi
void *result; // rax
v1 = *(_DWORD *)(i + 60); /*0xc3d3*/
result = (void *)RstDeviceGetFeatureFlagBit(11); /*0xc3de*/
if ( !(_BYTE)result && (v1 & 1) != 0 /*0xc40e*/
|| (result = RstGetGlobalContext(), (*(_DWORD *)((_BYTE *)result + 26) & 0x10) == 0)
&& *(_BYTE *)(i + 162) == 1
&& (v1 & 0x2000000) != 0 )
{
*(_DWORD *)(i + 148) = 0; /*0xc410*/
*(_DWORD *)(i + 152) = 5; /*0xc417*/
*(_DWORD *)(i + 144) = 12; /*0xc421*/
*(_DWORD *)(i + 60) = (_DWORD)&loc_1000F + 1; /*0xc42b*/
}
else if ( (v1 & 0x1000000) != 0 ) /*0xc43b*/
{
*(_QWORD *)(i + 148) = 1; /*0xc444*/
*(_DWORD *)(i + 144) = 3; /*0xc44a*/
}
else if ( (v1 & 0x10000) != 0 ) /*0xc45d*/
{
*(_DWORD *)(i + 148) = 0; /*0xc45f*/
*(_DWORD *)(i + 152) = 5; /*0xc466*/
result = RstGetGlobalContext(); /*0xc470*/
if ( (*(_DWORD *)((_BYTE *)result + 34) & 0x400) != 0 /*0xc492*/
|| (result = &loc_8086, *(_WORD *)(i + 170) == 0x8086)
|| (v1 & 0x40) == 0 )
{
*(_DWORD *)(i + 144) = 12; /*0xc4a3*/
}
else
{
*(_DWORD *)(i + 144) = 19; /*0xc494*/
}
}
else if ( (v1 & 0x40) != 0 ) /*0xc4b6*/
{
*(_DWORD *)(i + 148) = 1; /*0xc4bc*/
if ( (v1 & 0x200) != 0 ) /*0xc4c2*/
{
*(_DWORD *)(i + 152) = 6; /*0xc4c4*/
*(_DWORD *)(i + 144) = 1; /*0xc4ce*/
}
else
{
*(_DWORD *)(i + 152) = 0; /*0xc4d9*/
*(_DWORD *)(i + 144) = 0; /*0xc4e0*/
}
}
else
{
result = &word_2; /*0xc4ec*/
if ( (v1 & 2) != 0 ) /*0xc4f4*/
{
if ( (v1 & 0x8000) != 0 ) /*0xc4fe*/
{
*(_DWORD *)(i + 148) = 7; /*0xc500*/
*(_DWORD *)(i + 152) = 3; /*0xc50a*/
*(_DWORD *)(i + 144) = 11; /*0xc514*/
}
else
{
*(_DWORD *)(i + 148) = 2; /*0xc523*/
*(_DWORD *)(i + 144) = 5; /*0xc529*/
if ( (v1 & 0x80u) == 0 ) /*0xc536*/
{
if ( (v1 & 0x10) != 0 ) /*0xc555*/
{
if ( (v1 & 0x800) != 0 ) /*0xc574*/
{
if ( (v1 & 0x1000) != 0 ) /*0xc57a*/
{
*(_DWORD *)(i + 152) = 7; /*0xc57c*/
*(_DWORD *)(i + 144) = 15; /*0xc586*/
}
else if ( (v1 & 0x2000) != 0 ) /*0xc599*/
{
if ( (v1 & 0x40000) != 0 ) /*0xc59f*/
{
*(_DWORD *)(i + 152) = 11; /*0xc5a1*/
*(_DWORD *)(i + 144) = 20; /*0xc5ab*/
}
else
{
*(_DWORD *)(i + 152) = 8; /*0xc5b7*/
*(_DWORD *)(i + 144) = 16; /*0xc5c1*/
}
}
else
{
*(_DWORD *)(i + 152) = 9; /*0xc5cd*/
*(_DWORD *)(i + 144) = 17; /*0xc5d7*/
}
}
else if ( (v1 & 4) != 0 ) /*0xc5e7*/
{
*(_DWORD *)(i + 152) = 2; /*0xc5e9*/
*(_DWORD *)(i + 144) = 2; /*0xc5ef*/
}
else if ( (v1 & 0x200) != 0 ) /*0xc5fb*/
{
*(_DWORD *)(i + 152) = 6; /*0xc5fd*/
*(_DWORD *)(i + 144) = 1; /*0xc607*/
}
else
{
*(_DWORD *)(i + 152) = 0; /*0xc60f*/
*(_DWORD *)(i + 144) = 5; /*0xc616*/
}
}
else
{
*(_DWORD *)(i + 152) = 4; /*0xc557*/
*(_DWORD *)(i + 144) = 14; /*0xc561*/
}
}
else
{
*(_DWORD *)(i + 152) = 3; /*0xc538*/
*(_DWORD *)(i + 144) = 10; /*0xc542*/
}
if ( *(_DWORD *)(i + 144) == 5 ) /*0xc627*/
{
result = (void *)RstRaidMemberFindCompatible(i + 4); /*0xc631*/
if ( (_BYTE)result ) /*0xc638*/
*(_DWORD *)(i + 144) = 6; /*0xc63a*/
}
}
}
else if ( *(_BYTE *)(i + 162) == 1 && (v1 & 0x2000000) != 0 ) /*0xc653*/
{
*(_DWORD *)(i + 152) = 0; /*0xc655*/
*(_DWORD *)(i + 148) = 5; /*0xc65c*/
*(_DWORD *)(i + 144) = 18; /*0xc666*/
}
else if ( (v1 & 1) != 0 ) /*0xc675*/
{
*(_DWORD *)(i + 152) = 0; /*0xc677*/
*(_DWORD *)(i + 148) = 3; /*0xc67e*/
*(_DWORD *)(i + 144) = 9; /*0xc688*/
}
else
{
*(_DWORD *)(i + 148) = 6; /*0xc694*/
*(_DWORD *)(i + 152) = 11; /*0xc69e*/
*(_DWORD *)(i + 144) = 20; /*0xc6a8*/
}
}
return result; /*0xc6bc*/
}
// Function: Assert_116 @ 0xc6c4 (0x1e1 bytes)
// Index: 340/906
__int64 __fastcall Assert_116(__int64 a1, unsigned __int16 a2, char a3, char a4)
{
char v4; // r14
unsigned __int16 n2; // r12
__int64 result; // rax
_BYTE *v10; // rcx
__int64 v11; // rsi
__int64 v12; // r13
__int16 v13; // bx
_QWORD *v14; // rax
__int16 n10; // ax
unsigned int v16; // eax
unsigned int v17; // ebx
v4 = a4; /*0xc6e6*/
n2 = 0; /*0xc6f2*/
if ( !a1 ) /*0xc6f9*/
return 1; /*0xc700*/
v10 = *(_BYTE **)a1; /*0xc705*/
if ( !v10 || !StrLenA(v10) ) /*0xc711*/
return 4; /*0xc883*/
if ( RstStringFindChar(*(_BYTE **)a1, 92) || **(_BYTE **)a1 == 32 ) /*0xc740*/
return 7; /*0xc72f*/
if ( !Source_16 ) /*0xc74c*/
return 1; /*0xc74c*/
v11 = *(_QWORD *)(Source_16 + 216); /*0xc74e*/
if ( !v11 || a2 != 0xFFFF && a2 >= *(_WORD *)(v11 + 256) ) /*0xc767*/
return 1; /*0xc767*/
v12 = RstArrayEntryLookup(v11, *(unsigned __int8 *)(v11 + 48)); /*0xc775*/
if ( !v12 ) /*0xc77b*/
return 1; /*0xc77b*/
*(_WORD *)(v11 + 342) = a2; /*0xc781*/
v13 = 0; /*0xc78c*/
*(_WORD *)(v11 + 348) = *(_WORD *)(a1 + 16); /*0xc78f*/
*(_DWORD *)(v11 + 352) = *(_DWORD *)(a1 + 8); /*0xc79e*/
*(_BYTE *)(v11 + 340) = *(_BYTE *)(a1 + 20); /*0xc7a7*/
*(_DWORD *)(v11 + 356) = *(_DWORD *)(a1 + 12); /*0xc7b0*/
*(_WORD *)(v11 + 346) = *(_WORD *)(a1 + 18); /*0xc7ba*/
*(_DWORD *)(v11 + 336) = *(_DWORD *)(a1 + 24); /*0xc7c4*/
if ( *(_WORD *)v11 ) /*0xc7cc*/
{
while ( 1 ) /*0xc7db*/
{
v14 = RstLinkedListGetNth((_QWORD **)(v11 + 16), v13); /*0xc7db*/
if ( !v14 ) /*0xc7e5*/
return 1; /*0xc832*/
if ( *((_WORD *)v14 + 28) && *((_BYTE *)v14 + 58) != 3 ) /*0xc7f1*/
++n2; /*0xc7f3*/
if ( (unsigned __int16)++v13 >= *(_WORD *)v11 ) /*0xc7fd*/
{
v4 = a4; /*0xc7ff*/
goto LABEL_20; /*0xc7ff*/
}
}
}
else
{
LABEL_20:
result = RstRaidCheckDiskCountValid(n2, *(unsigned __int16 *)(v11 + 346), 0); /*0xc804*/
if ( !(_DWORD)result ) /*0xc81d*/
{
n10 = *(_WORD *)(a1 + 18); /*0xc81f*/
if ( n10 == 10 ) /*0xc827*/
*(_WORD *)(v11 + 346) = 1; /*0xc829*/
else
*(_WORD *)(v11 + 346) = n10; /*0xc836*/
StrnCpy((CHAR16 *)(v12 + 16), *(const CHAR16 **)a1, 0x10u); /*0xc84b*/
*(_BYTE *)(v12 + 32) = 0; /*0xc856*/
v16 = RstDeviceGetProperty(v11, a3); /*0xc85a*/
*(_DWORD *)(a1 + 8) = *(_DWORD *)(v11 + 352); /*0xc865*/
v17 = v16; /*0xc868*/
if ( !v16 && a3 == 1 ) /*0xc872*/
Assert_76(v11, v4); /*0xc87a*/
return v17; /*0xc87f*/
}
}
return result; /*0xc897*/
}
// Function: RstHelper_c8a8 @ 0xc8a8 (0x201 bytes)
// Index: 341/906
__int64 __fastcall RstHelper_c8a8(unsigned __int8 n0x18, __int64 i)
{
__int64 v5; // rcx
__int64 *v6; // rax
__int64 v7; // rsi
const CHAR16 *Source; // rbx
__int64 v9; // rbp
__int64 v10; // r14
__int64 v11; // r13
__int64 v12; // r15
int v13; // eax
int v14; // ebx
unsigned __int8 n24; // al
int n3; // eax
int v17; // eax
bool v18; // zf
__int64 v19; // rcx
unsigned int *v20; // rcx
_DWORD *v21; // rcx
__int64 v22; // rcx
int n2; // eax
__int64 v24; // [rsp+60h] [rbp+18h]
if ( !Source_16 || !i ) /*0xc8dd*/
return 1; /*0xc8dd*/
if ( n0x18 >= *(__int16 *)(Source_16 + 192) ) /*0xc8ed*/
return 14; /*0xc8f4*/
v5 = *(_QWORD *)(Source_16 + 216); /*0xc8f9*/
if ( !v5 ) /*0xc903*/
return 1; /*0xc903*/
v6 = (__int64 *)RstArrayEntryLookup(v5, n0x18); /*0xc90d*/
v7 = (__int64)v6; /*0xc912*/
if ( !v6 ) /*0xc918*/
return 1; /*0xc918*/
Source = (const CHAR16 *)(v6 + 2); /*0xc91e*/
if ( v6 == (__int64 *)-16LL ) /*0xc925*/
return 1; /*0xca87*/
v9 = *v6; /*0xc92b*/
if ( !*v6 ) /*0xc92b*/
return 14; /*0xc92b*/
v10 = v6[1]; /*0xc933*/
if ( !v10 ) /*0xc93a*/
return 14; /*0xc93a*/
v11 = v6[7]; /*0xc93c*/
if ( !v11 ) /*0xc943*/
return 14; /*0xc943*/
v12 = *(_QWORD *)(v11 + 40); /*0xc945*/
if ( !v12 ) /*0xc94c*/
return 14; /*0xc94c*/
v24 = *(_QWORD *)(v9 + 160); /*0xc955*/
if ( !v24 ) /*0xc95d*/
return 14; /*0xc95d*/
MemZero((_BYTE *)i, 0, 168); /*0xc96a*/
StrnCpy((CHAR16 *)(i + 4), Source, 0x10u); /*0xc97c*/
v13 = RstCallGetUint108(v9); /*0xc984*/
*(_DWORD *)i = 168; /*0xc989*/
*(_DWORD *)(i + 28) = v13; /*0xc992*/
*(_QWORD *)(i + 40) = *(_QWORD *)(v7 + 40); /*0xc999*/
*(_DWORD *)(i + 96) = *(_DWORD *)(v24 + 12); /*0xc9a5*/
*(_DWORD *)(i + 32) = *(unsigned __int16 *)(v12 + 4); /*0xc9ad*/
*(_DWORD *)(i + 108) = RstLinkedListCountToNode((_QWORD *)v10); /*0xc9b8*/
v14 = *(unsigned __int16 *)(v12 + 16); /*0xc9bb*/
*(_DWORD *)(i + 48) = (v14 * (unsigned int)HiiLibReturnZero(v9)) >> 10; /*0xc9ce*/
n24 = 24; /*0xc9d1*/
if ( *(_BYTE *)(v12 + 6) <= 0x18u ) /*0xc9da*/
n24 = *(_BYTE *)(v12 + 6); /*0xc9dc*/
*(_DWORD *)(i + 52) = n24; /*0xc9e7*/
n3 = RstConfigArrayGetMaxBlockSize(v7); /*0xc9ea*/
*(_DWORD *)(i + 88) = n3; /*0xc9ef*/
*(_DWORD *)(i + 24) = *(__int16 *)(v9 + 130); /*0xc9f9*/
if ( n3 == 3 ) /*0xc9ff*/
*(_DWORD *)(i + 96) = 0; /*0xca01*/
*(_DWORD *)(i + 132) = *(_DWORD *)(v11 + 12); /*0xca0c*/
*(_DWORD *)(i + 92) = *(unsigned __int8 *)(v12 + 40); /*0xca17*/
*(_DWORD *)(i + 116) = *(_DWORD *)(v7 + 48); /*0xca1d*/
v17 = HiiLibReturnZero(v9); /*0xca20*/
v18 = *(_DWORD *)(i + 32) == 1; /*0xca25*/
*(_DWORD *)(i + 36) = v17; /*0xca29*/
if ( v18 && *(_BYTE *)(v10 + 20) > 3u ) /*0xca33*/
*(_DWORD *)(i + 32) = 10; /*0xca35*/
RstDeviceSetNotDegraded(i); /*0xca3f*/
RstDeviceGetStatusStringId(v19); /*0xca44*/
RstDeviceStatusCodeMap(v20); /*0xca49*/
RstBlockSizeToStatusCode(v21); /*0xca4e*/
RstDeviceSetDegraded(v22, n0x18); /*0xca56*/
n2 = *(_DWORD *)(v7 + 80); /*0xca5b*/
*(_BYTE *)(i + 160) = -1; /*0xca5e*/
*(_DWORD *)(i + 156) = n2; /*0xca65*/
if ( n2 == 2 || n2 == 4 ) /*0xca73*/
*(_BYTE *)(i + 160) = RstCfgRaidDevLookup(v7); /*0xca7d*/
return 0; /*0xca9b*/
}
// Function: RstDeviceIsRaidLevel @ 0xcaac (0x88 bytes)
// Index: 342/906
char __fastcall RstDeviceIsRaidLevel(__int16 a1)
{
unsigned __int8 n0x18; // di
unsigned int v3; // ebx
bool j; // zf
__int64 i[4]; // [rsp+20h] [rbp-B8h] BYREF
int n5; // [rsp+40h] [rbp-98h]
int n2; // [rsp+BCh] [rbp-1Ch]
unsigned __int8 v9; // [rsp+C0h] [rbp-18h]
n0x18 = 0; /*0xcac3*/
v3 = RstDeviceCountConfigured(); /*0xcacb*/
for ( j = v3 == 0; !j; j = v3 == 0 ) /*0xcacd*/
{
if ( (v3 & 1) != 0 /*0xcb10*/
&& !(unsigned int)RstHelper_c8a8(n0x18, (__int64)i)
&& n5 == 5
&& (n2 == 2 || n2 == 4)
&& v9 == a1 )
{
return 1; /*0xcb1b*/
}
++n0x18; /*0xcb12*/
v3 >>= 1; /*0xcb15*/
}
return 0; /*0xcb2f*/
}
// Function: RstDeviceComputeCapabilityFlags @ 0xcb34 (0x11d bytes)
// Index: 343/906
__int64 __fastcall RstDeviceComputeCapabilityFlags(__int64 i, unsigned __int16 a2)
{
__int64 result; // rax
*(_DWORD *)(i + 156) = 0; /*0xcb43*/
result = (__int64)RstGetGlobalContext(); /*0xcb50*/
if ( (*(_DWORD *)(result + 34) & 0x400) != 0 || *(_WORD *)(i + 170) == 0x8086 || (*(_BYTE *)(i + 60) & 0x40) == 0 ) /*0xcb75*/
{
result = (__int64)RstGetGlobalContext(); /*0xcb84*/
if ( (*(_DWORD *)(result + 34) & 0x400) != 0 || *(_WORD *)(i + 170) == 0x8086 ) /*0xcb9b*/
{
result = *(unsigned int *)(i + 148); /*0xcba9*/
switch ( (_DWORD)result ) /*0xcbb2*/
{
case 3: /*0xcbb2*/
*(_DWORD *)(i + 156) |= 4u; /*0xcbb4*/
break;
case 5: /*0xcbb2*/
*(_DWORD *)(i + 156) |= 8u; /*0xcbc2*/
result = RstDeviceIsRaidLevel(a2); /*0xcbcc*/
if ( (_BYTE)result ) /*0xcbd3*/
*(_DWORD *)(i + 156) |= 0x20u; /*0xcbd5*/
break;
case 1: /*0xcbb2*/
*(_DWORD *)(i + 156) |= 1u; /*0xcbe3*/
result = (__int64)RstGetGlobalContext(); /*0xcbe9*/
if ( (*(_DWORD *)(result + 26) & 0x10) != 0 ) /*0xcbf7*/
*(_DWORD *)(i + 156) |= 0x40u; /*0xcbf9*/
if ( !*(_BYTE *)(i + 168) ) /*0xcc00*/
{
result = RstDeviceGetFeatureFlagBit(11); /*0xcc0e*/
if ( (_BYTE)result ) /*0xcc15*/
*(_DWORD *)(i + 156) |= 0x10u; /*0xcc17*/
}
break;
default:
if ( *(_DWORD *)(i + 152) != 4 ) /*0xcc27*/
*(_DWORD *)(i + 156) |= 2u; /*0xcc29*/
break;
}
if ( !*(_BYTE *)(i + 208) ) /*0xcc30*/
*(_DWORD *)(i + 156) |= 0x100u; /*0xcc39*/
}
else
{
*(_DWORD *)(i + 156) |= 2u; /*0xcb9d*/
}
}
else
{
*(_DWORD *)(i + 156) |= 0x80u; /*0xcb77*/
}
return result; /*0xcc4b*/
}
// Function: RstHelper_cc54 @ 0xcc54 (0xda bytes)
// Index: 344/906
__int64 __fastcall RstHelper_cc54(_BYTE *i, unsigned __int16 n16)
{
__int16 v2; // di
__int64 v3; // r8
__int16 n0x18_1; // si
__int16 n0x18; // bx
__int16 v8; // ax
__int64 ia; // [rsp+30h] [rbp-C8h] BYREF
unsigned __int8 v11[166]; // [rsp+3Ah] [rbp-BEh] BYREF
v2 = -1; /*0xcc7b*/
v3 = *(_QWORD *)(Source_16 + 216); /*0xcc81*/
n0x18_1 = *(unsigned __int8 *)(v3 + 48); /*0xcc8e*/
n0x18 = 0; /*0xcc93*/
if ( *(_BYTE *)(v3 + 48) ) /*0xcc8e*/
{
do /*0xcce7*/
{
RstHelper_c8a8(n0x18, (__int64)&ia); /*0xcca8*/
if ( !StrnCpy16( /*0xccbf*/
(_BYTE *)&ia + 4,
aVolume, // "Volume"
6) )
{
v8 = RstStringToUnsignedInt(v11, 0, 0); /*0xccd4*/
if ( v8 > v2 ) /*0xccdc*/
v2 = v8; /*0xccdc*/
}
++n0x18; /*0xcce0*/
}
while ( n0x18 < n0x18_1 ); /*0xcce7*/
}
return RstHelper_8da8( /*0xcd24*/
(__int64)i,
n16,
"%s%d",
aVolume, // "Volume"
v2 + 1);
}
// Function: Assert_29 @ 0xcd30 (0x13a bytes)
// Index: 345/906
__int64 __fastcall Assert_29(unsigned __int8 n24, unsigned __int8 a2, _BYTE *i, unsigned __int8 n0x11)
{
__int64 v8; // rcx
_QWORD *v9; // rax
_QWORD *v10; // rbx
__int64 v11; // rdx
__int64 v12; // rbx
__int64 v13; // rdx
__int64 v14; // rcx
__int64 result; // rax
unsigned __int8 v16[16]; // [rsp+20h] [rbp-C8h] BYREF
__int64 ia[22]; // [rsp+30h] [rbp-B8h] BYREF
if ( !Source_16 ) /*0xcd5c*/
return 2; /*0xcd5c*/
v8 = *(_QWORD *)(Source_16 + 216); /*0xcd62*/
if ( !v8 ) /*0xcd6c*/
return 2; /*0xcd6c*/
v9 = RstLinkedListGetNth((_QWORD **)(v8 + 16), n24); /*0xcd79*/
v10 = v9; /*0xcd7e*/
if ( !v9 ) /*0xcd84*/
return 2; /*0xcd84*/
if ( !RstDeviceIsActive((__int64)v9) ) /*0xcd8d*/
return 2; /*0xcd8d*/
v11 = v10[6]; /*0xcd9a*/
if ( (*(_BYTE *)(v11 + 139) & 1) != 0 || Source_16 == -224 ) /*0xcdb9*/
return 2; /*0xce4c*/
v12 = RstBufferPoolFindEntry(Source_16 + 224, v11); /*0xcdc4*/
if ( (unsigned __int8)RstDebugEnabled(v14, v13) && !v12 ) /*0xcdd3*/
DebugAssert("IsmApi.cpp", 0x1223u, "pJd"); /*0xcde8*/
v16[0] = -1; /*0xcdf8*/
result = RstRaidGetPhysicalDiskIndex(v12, a2, v16); /*0xcdfd*/
if ( !(_DWORD)result && v16[0] != 0xFF ) /*0xce0b*/
{
if ( i && n0x11 ) /*0xce15*/
{
MemZero(i, 0, n0x11); /*0xce20*/
if ( !(unsigned int)RstHelper_c8a8(v16[0], (__int64)ia) ) /*0xce2e*/
RstStringCopyN((__int64)i, (__int64)ia + 4, n0x11); /*0xce43*/
}
return 0; /*0xce48*/
}
return result; /*0xce65*/
}
// Function: RstHelper_ce6c @ 0xce6c (0x239 bytes)
// Index: 346/906
__int64 RstHelper_ce6cunsigned __int16 a1, __int64 i)
{
__int64 v5; // rcx
__int64 v6; // rax
__int64 v7; // rsi
__int64 v8; // rdi
__int64 v9; // rcx
unsigned int v10; // eax
__int64 IsEqual; // rax
if ( !i ) /*0xce89*/
return 15; /*0xce89*/
if ( !Source_16 ) /*0xce9f*/
return 15; /*0xce9f*/
v5 = *(_QWORD *)(Source_16 + 216); /*0xcea1*/
if ( !v5 ) /*0xceab*/
return 15; /*0xceab*/
v6 = RstLinkedListGetNth(v5 + 16, a1); /*0xceb4*/
v7 = v6; /*0xceb9*/
if ( !v6 ) /*0xcebf*/
return 15; /*0xcebf*/
v8 = *(_QWORD *)(v6 + 48); /*0xcec1*/
if ( !v8 ) /*0xcec8*/
return 15; /*0xce8b*/
MemZero((_BYTE *)i, 0, 240); /*0xced5*/
*(_DWORD *)i = 240; /*0xcee8*/
StrnCpy((CHAR16 *)(i + 4), (const CHAR16 *)(v7 + 18), 0x10u); /*0xceee*/
*(_QWORD *)(i + 24) = *(_QWORD *)(*(_QWORD *)(v7 + 48) + 88LL); /*0xcefe*/
*(_DWORD *)(i + 172) = HiiLibReturnZero(v8); /*0xcf07*/
*(_DWORD *)(i + 60) = *(_DWORD *)(*(_QWORD *)(v7 + 48) + 136LL); /*0xcf17*/
*(_DWORD *)(i + 132) = *(unsigned __int8 *)(v7 + 58); /*0xcf21*/
*(_DWORD *)(i + 136) = *(_DWORD *)(v8 + 100); /*0xcf2a*/
*(_DWORD *)(i + 64) = *(_DWORD *)(v8 + 96); /*0xcf33*/
*(_DWORD *)(i + 68) = *(_DWORD *)(v8 + 164); /*0xcf3c*/
*(_WORD *)(i + 72) = *(_WORD *)(v8 + 168); /*0xcf46*/
*(_DWORD *)(i + 76) = RstGetUint108(v8); /*0xcf53*/
*(_BYTE *)(i + 208) = *(_BYTE *)(v8 + 201); /*0xcf66*/
StrnCpy((CHAR16 *)(i + 80), (const CHAR16 *)(v8 + 45), 0x29u); /*0xcf6c*/
*(_BYTE *)(i + 140) = (*(_DWORD *)(v8 + 100) & 0x10) == 16; /*0xcf80*/
v9 = *(_QWORD *)(v7 + 40); /*0xcf86*/
if ( v9 ) /*0xcf8d*/
*(_DWORD *)(i + 128) = (__int16)RstLinkedListCountToNode(v9); /*0xcfa0*/
else
*(_DWORD *)(i + 128) = -1; /*0xcf8f*/
*(_WORD *)(i + 160) = *(_WORD *)(v8 + 170); /*0xcfb0*/
*(_BYTE *)(i + 162) = RstDeviceGetCount(v7); /*0xcfbf*/
*(_WORD *)(i + 170) = *(_WORD *)(v8 + 172); /*0xcfcc*/
RstDeviceSetMode(i); /*0xcfd3*/
v10 = RstHelper_02c0(v8); /*0xcfdb*/
*(_DWORD *)(i + 164) = j_HiiLibGuidIsZero(v10); /*0xcfea*/
*(_BYTE *)(i + 168) = RstDeviceCheckReservedSuffix(v7); /*0xcff5*/
IsEqual = HiiLibGuidIsEqual(*(_QWORD *)(v8 + 128)); /*0xd002*/
if ( IsEqual ) /*0xd00d*/
{
*(_DWORD *)(i + 176) = *(_DWORD *)(IsEqual + 28); /*0xd012*/
*(_DWORD *)(i + 180) = *(_DWORD *)(IsEqual + 36); /*0xd01b*/
*(_DWORD *)(i + 184) = *(_DWORD *)(IsEqual + 44); /*0xd024*/
*(_DWORD *)(i + 188) = *(_DWORD *)(IsEqual + 24); /*0xd02d*/
*(_DWORD *)(i + 192) = *(_DWORD *)(IsEqual + 16); /*0xd036*/
*(_DWORD *)(i + 196) = *(_DWORD *)IsEqual; /*0xd03e*/
*(_WORD *)(i + 200) = *(_WORD *)(IsEqual + 83); /*0xd048*/
*(_DWORD *)(i + 204) = *(_DWORD *)(IsEqual + 8); /*0xd053*/
}
*(_QWORD *)(i + 216) = *(_QWORD *)(v8 + 176); /*0xd066*/
*(_QWORD *)(i + 224) = *(_QWORD *)(v8 + 184); /*0xd074*/
*(_QWORD *)(i + 232) = *(_QWORD *)(v8 + 192); /*0xd082*/
RstDeviceComputeCapabilityFlags(i, a1); /*0xd089*/
return 0; /*0xd09f*/
}
// Function: Assert_115 @ 0xd0a8 (0x216 bytes)
// Index: 347/906
__int64 __fastcall Assert_115(int n5, unsigned __int16 n5_2, char a3, char a4)
{
__int64 n5_1; // rdx
__int64 Source; // rcx
__int64 v7; // rbx
__int64 v8; // rsi
__int64 v9; // r12
__int64 v10; // r14
unsigned __int16 v11; // r15
unsigned __int16 v12; // r13
__int16 v13; // di
_QWORD *v14; // rax
__int64 v15; // rax
unsigned __int16 v16; // di
unsigned __int16 v18; // [rsp+20h] [rbp-158h]
unsigned __int16 v19; // [rsp+22h] [rbp-156h]
__int64 i[7]; // [rsp+30h] [rbp-148h] BYREF
signed __int32 v21[17]; // [rsp+6Ch] [rbp-10Ch] BYREF
__int16 v22; // [rsp+B0h] [rbp-C8h]
char v23; // [rsp+B8h] [rbp-C0h]
int n2; // [rsp+C4h] [rbp-B4h]
char v25; // [rsp+D8h] [rbp-A0h]
__int64 i_1[11]; // [rsp+120h] [rbp-58h] BYREF
n5_1 = (unsigned int)n5; /*0xd0d2*/
Source = Source_16; /*0xd0d4*/
v7 = 0; /*0xd0db*/
v8 = 0; /*0xd0de*/
v18 = 0; /*0xd0e8*/
v9 = 0; /*0xd0ee*/
v10 = 0; /*0xd0f4*/
v11 = 0; /*0xd0f7*/
v12 = 0; /*0xd0fb*/
v13 = 0; /*0xd0ff*/
v19 = **(_WORD **)(Source_16 + 216); /*0xd103*/
if ( v19 ) /*0xd10c*/
{
while ( 1 ) /*0xd112*/
{
if ( !(_DWORD)n5_1 /*0xd135*/
|| (v14 = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source + 216) + 16LL), v13), RstHelper_02b4(v14[6], n5)) )
{
if ( (unsigned int)RstHelper_ce6c(v13, (__int64)i) != 15 /*0xd192*/
&& v21[1] != -1
&& (!n5_2 || !v25)
&& (v23 & 4) == 0
&& !_bittest(v21, 9u) )
{
if ( n2 == 2 ) /*0xd1a0*/
{
if ( !a3 ) /*0xd1aa*/
{
Assert_121(v22, (__int64)i_1); /*0xd1c3*/
if ( Assert_102(v22, n5_2, a4) ) /*0xd1db*/
v7 |= 1LL << v13; /*0xd1f5*/
}
}
else if ( n2 == 1 ) /*0xd208*/
{
++v18; /*0xd20a*/
v15 = 1LL << v13; /*0xd216*/
v8 |= 1LL << v13; /*0xd219*/
if ( (v23 & 8) != 0 ) /*0xd224*/
{
v10 |= v15; /*0xd226*/
++v11; /*0xd229*/
}
else
{
v9 |= v15; /*0xd22f*/
++v12; /*0xd232*/
}
}
}
}
if ( (unsigned __int16)++v13 >= v19 ) /*0xd247*/
break; /*0xd247*/
Source = Source_16; /*0xd249*/
LODWORD(n5_1) = n5; /*0xd250*/
}
}
LOBYTE(n5_1) = a4; /*0xd25c*/
v16 = RstDeviceGetCapability(n5_2, n5_1); /*0xd26b*/
if ( v18 >= v16 ) /*0xd273*/
{
if ( (*((_BYTE *)RstGetGlobalContext() + 30) & 1) == 0 || n5_2 == 1 ) /*0xd287*/
{
return v8 | v7; /*0xd29d*/
}
else
{
if ( v11 >= v16 ) /*0xd28d*/
v7 |= v10; /*0xd28f*/
if ( v12 >= v16 ) /*0xd296*/
return v9 | v7; /*0xd298*/
}
}
return v7; /*0xd2ab*/
}
// Function: RstRaidCheckLevelSupport @ 0xd2c0 (0x8c bytes)
// Index: 348/906
__int16 __fastcall RstRaidCheckLevelSupport(int n5)
{
__int16 v2; // bx
v2 = Assert_115(n5, 0, 0, 0) != 0; /*0xd2eb*/
if ( Assert_115(n5, 1u, 0, 0) ) /*0xd2f5*/
v2 |= 2u; /*0xd2ff*/
if ( Assert_115(n5, 5u, 0, 0) ) /*0xd310*/
v2 |= 4u; /*0xd31a*/
if ( Assert_115(n5, 0xAu, 0, 0) ) /*0xd32b*/
return v2 | 8; /*0xd335*/
return v2; /*0xd346*/
}
// Function: RstRaidLevelToBitmap @ 0xd34c (0x42 bytes)
// Index: 349/906
__int16 __fastcall RstRaidLevelToBitmap(int n5)
{
char v1; // al
__int16 n2; // cx
v1 = RstRaidCheckLevelSupport(n5); /*0xd350*/
n2 = 1; /*0xd355*/
if ( (v1 & 1) != 0 ) /*0xd35c*/
return n2; /*0xd35c*/
n2 = 2; /*0xd363*/
if ( (v1 & 2) != 0 ) /*0xd36a*/
return n2; /*0xd36a*/
n2 = 4; /*0xd36c*/
if ( (v1 & 4) != 0 ) /*0xd373*/
return n2; /*0xd373*/
n2 = 8; /*0xd375*/
if ( (v1 & 8) != 0 ) /*0xd37c*/
return n2; /*0xd37c*/
n2 = 16; /*0xd37e*/
if ( (v1 & 0x10) != 0 ) /*0xd385*/
return n2; /*0xd35e*/
else
return 0; /*0xd387*/
}
// Function: Assert_23 @ 0xd390 (0x172 bytes)
// Index: 350/906
__int64 __fastcall Assert_23(int n5, __int64 a2)
{
__int64 Source; // rcx
unsigned __int8 v4; // r13
unsigned int v5; // edi
unsigned __int16 v6; // bp
__int16 v7; // bx
_QWORD *v8; // rax
__int64 v9; // rsi
__int64 v10; // rax
__int64 i[7]; // [rsp+20h] [rbp-118h] BYREF
signed __int32 v13[19]; // [rsp+5Ch] [rbp-DCh] BYREF
char v14; // [rsp+A8h] [rbp-90h]
int n5_1; // [rsp+B4h] [rbp-84h]
Source = Source_16; /*0xd3b5*/
v4 = a2; /*0xd3c3*/
v5 = 0; /*0xd3c6*/
v6 = **(_WORD **)(Source_16 + 216); /*0xd3c9*/
v7 = 0; /*0xd3cc*/
if ( v6 ) /*0xd3d4*/
{
while ( 1 ) /*0xd3de*/
{
if ( !n5 || (v8 = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source + 216) + 16LL), v7), RstHelper_02b4(v8[6], n5)) ) /*0xd3fd*/
{
if ( (unsigned int)RstHelper_ce6c(v7, (__int64)i) != 15 /*0xd44e*/
&& v13[1] != -1
&& (v14 & 4) == 0
&& !_bittest(v13, 9u)
&& n5_1 == 5 )
{
v9 = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source_16 + 216) + 16LL), v7)[6]; /*0xd46a*/
if ( RstDebugEnabled() && !v9 ) /*0xd47b*/
DebugAssert("IsmApi.cpp", 0x1186u, "pDisk"); /*0xd490*/
v10 = RstBufferPoolFindEntry(Source_16 + 224, v9); /*0xd4a6*/
if ( RstConfigBufferSlotIsEmpty(v10) || v7 == v4 ) /*0xd4bf*/
v5 |= 1 << v7; /*0xd4c8*/
}
}
if ( (unsigned __int16)++v7 >= v6 ) /*0xd4d1*/
break; /*0xd4d1*/
Source = Source_16; /*0xd4d3*/
}
}
return v5; /*0xd4f5*/
}
// Function: RstVolumeCheckMixedRaidType @ 0xd504 (0xfa bytes)
// Index: 351/906
__int64 RstVolumeCheckMixedRaidType()
{
unsigned int v0; // ebx
unsigned __int8 j; // di
int v2; // r13d
unsigned int v3; // r12d
unsigned __int16 v4; // si
unsigned int v5; // ebp
bool k; // zf
__int64 i_1[3]; // [rsp+20h] [rbp-1B8h] BYREF
unsigned int v9; // [rsp+3Ch] [rbp-19Ch]
__int64 i[30]; // [rsp+D0h] [rbp-108h] BYREF
v0 = 0; /*0xd535*/
for ( j = 0; j < *(_BYTE *)(*(_QWORD *)(Source_16 + 216) + 48LL); ++j ) /*0xd53b*/
{
v2 = -1; /*0xd54d*/
RstHelper_c8a8(j, (__int64)i_1); /*0xd551*/
if ( (unsigned int)RstHelper_c8a8(j, (__int64)i_1) ) /*0xd55e*/
break; /*0xd566*/
v3 = v9; /*0xd568*/
v4 = 0; /*0xd56d*/
v5 = v9; /*0xd571*/
for ( k = v9 == 0; !k; k = v5 == 0 ) /*0xd574*/
{
if ( (v5 & 1) != 0 && !(unsigned int)RstHelper_ce6c(v4, (__int64)i) ) /*0xd58a*/
{
if ( v2 != -1 && v2 != (unsigned int)RstDeviceGetRaidLevelByIndex(v4) ) /*0xd5a5*/
{
v0 |= v3; /*0xd5bc*/
break; /*0xd5bc*/
}
v2 = RstDeviceGetRaidLevelByIndex(v4); /*0xd5af*/
}
v5 >>= 1; /*0xd5b2*/
++v4; /*0xd5b4*/
}
}
return v0; /*0xd5f4*/
}
// Function: RstVolCheckMemberSameLevel @ 0xd600 (0xc9 bytes)
// Index: 352/906
char __fastcall RstVolCheckMemberSameLevel(unsigned __int8 j)
{
char v2; // bl
char v3; // di
unsigned __int8 v4; // si
unsigned __int16 v5; // r8
__int64 i[7]; // [rsp+20h] [rbp-1A8h] BYREF
char v7; // [rsp+5Ch] [rbp-16Ch]
int v8; // [rsp+A0h] [rbp-128h]
char v9; // [rsp+ACh] [rbp-11Ch]
_DWORD i_1[44]; // [rsp+110h] [rbp-B8h] BYREF
if ( (unsigned int)RstHelper_c8a8(j, (__int64)i_1) ) /*0xd61e*/
return 0; /*0xd629*/
v2 = 0; /*0xd637*/
v3 = 0; /*0xd63a*/
v4 = 0; /*0xd644*/
if ( **(_WORD **)(Source_16 + 216) ) /*0xd647*/
{
v5 = 0; /*0xd64c*/
do /*0xd6ac*/
{
if ( !(unsigned int)RstHelper_ce6c(v5, (__int64)i) && (v7 & 0x10) != 0 && v8 == i_1[27] ) /*0xd676*/
{
if ( v2 ) /*0xd67b*/
{
if ( v3 != v9 ) /*0xd691*/
return 0; /*0xd691*/
}
else
{
v3 = v9; /*0xd67d*/
v2 = 1; /*0xd685*/
}
}
v5 = ++v4; /*0xd6a4*/
}
while ( v4 < (unsigned int)**(_WORD **)(Source_16 + 216) ); /*0xd6ac*/
}
return 1; /*0xd6c4*/
}
// Function: RstVolFindFirstMember @ 0xd6cc (0x98 bytes)
// Index: 353/906
char __fastcall RstVolFindFirstMember(unsigned __int8 j)
{
unsigned __int8 v1; // bl
unsigned __int16 v2; // r8
__int64 i[7]; // [rsp+20h] [rbp-1A8h] BYREF
char v5; // [rsp+5Ch] [rbp-16Ch]
int v6; // [rsp+A0h] [rbp-128h]
char v7; // [rsp+ACh] [rbp-11Ch]
__int64 i_1[13]; // [rsp+110h] [rbp-B8h] BYREF
int v9; // [rsp+17Ch] [rbp-4Ch]
if ( (unsigned int)RstHelper_c8a8(j, (__int64)i_1) ) /*0xd6e1*/
return 0; /*0xd6e1*/
v1 = 0; /*0xd6f3*/
if ( !**(_WORD **)(Source_16 + 216) ) /*0xd6fd*/
return 0; /*0xd748*/
v2 = 0; /*0xd702*/
while ( (unsigned int)RstHelper_ce6c(v2, (__int64)i) || (v5 & 0x10) == 0 || v6 != v9 ) /*0xd72c*/
{
v2 = ++v1; /*0xd73e*/
if ( v1 >= (unsigned int)**(_WORD **)(Source_16 + 216) ) /*0xd746*/
return 0; /*0xd746*/
}
return v7; /*0xd752*/
}
// Function: RstVolFindSmallestCapacity @ 0xd764 (0xaf bytes)
// Index: 354/906
unsigned __int64 __fastcall RstVolFindSmallestCapacity(unsigned __int8 j)
{
unsigned __int64 v1; // rbx
unsigned __int8 v3; // di
unsigned __int16 v4; // ax
__int64 i[3]; // [rsp+20h] [rbp-1A8h] BYREF
unsigned __int64 v6; // [rsp+38h] [rbp-190h]
char v7; // [rsp+5Ch] [rbp-16Ch]
int v8; // [rsp+A0h] [rbp-128h]
__int64 i_1[13]; // [rsp+110h] [rbp-B8h] BYREF
int v10; // [rsp+17Ch] [rbp-4Ch]
v1 = 0; /*0xd780*/
if ( (unsigned int)RstHelper_c8a8(j, (__int64)i_1) ) /*0xd783*/
return 0; /*0xd78c*/
v3 = 0; /*0xd797*/
if ( **(_WORD **)(Source_16 + 216) ) /*0xd7a1*/
{
v4 = 0; /*0xd7a6*/
do /*0xd7f9*/
{
if ( !(unsigned int)RstHelper_ce6c(v4, (__int64)i) && (v7 & 0x10) != 0 && v8 == v10 && (!v1 || v1 > v6) ) /*0xd7da*/
v1 = v6; /*0xd7dc*/
v4 = ++v3; /*0xd7f2*/
}
while ( v3 < (unsigned int)**(_WORD **)(Source_16 + 216) ); /*0xd7f9*/
}
return v1; /*0xd80e*/
}
// Function: DxeInstall_3 @ 0xd814 (0xc4 bytes)
// Index: 355/906
__int64 DxeInstall_3unsigned __int8 a1, char a2)
{
unsigned __int64 v4; // rbx
bool v5; // zf
unsigned __int16 j; // si
__int64 v7; // rdx
__int64 v8; // rcx
__int64 i[8]; // [rsp+20h] [rbp-F8h] BYREF
int v11; // [rsp+64h] [rbp-B4h]
v4 = RstVolGetOnlineMemberMask(); /*0xd83e*/
v5 = v4 == 0; /*0xd841*/
for ( j = 0; ; ++j ) /*0xd844*/
{
if ( v5 ) /*0xd848*/
return 15; /*0xd848*/
if ( !(unsigned int)RstHelper_ce6c(j, (__int64)i) && v11 == a1 ) /*0xd864*/
break; /*0xd864*/
v4 >>= 1; /*0xd866*/
v5 = v4 == 0; /*0xd86c*/
}
v8 = *(_QWORD *)(RstLinkedListGetNth(*(_QWORD *)(Source_16 + 216) + 16LL, j) + 48); /*0xd88b*/
if ( !v8 ) /*0xd892*/
return 15; /*0xd8b5*/
*(_BYTE *)(v8 + 201) = a2; /*0xd894*/
LOBYTE(v8) = a1; /*0xd89b*/
if ( a2 ) /*0xd8a1*/
{
LOBYTE(v7) = 1; /*0xd8a3*/
DxeInstall_2(v8, v7); /*0xd8a5*/
}
else
{
DxeInstall_1(v8); /*0xd8ac*/
}
return 0; /*0xd8d2*/
}
// Function: Assert_19 @ 0xd8d8 (0x1a5 bytes)
// Index: 356/906
__int64 __fastcall Assert_19(unsigned __int8 n24)
{
__int64 v2; // rcx
unsigned __int16 n24_1; // bx
_QWORD *v4; // rax
__int64 v5; // rdi
int v6; // eax
unsigned __int64 v8; // rbx
unsigned int n0x96; // eax
_BYTE *Source; // rbx
__int64 v11; // rdx
__int64 i[21]; // [rsp+30h] [rbp-F8h] BYREF
unsigned int v13; // [rsp+DCh] [rbp-4Ch]
if ( !Source_16 ) /*0xd8f1*/
return 1; /*0xd8f1*/
v2 = *(_QWORD *)(Source_16 + 216); /*0xd8f7*/
if ( !v2 || Source_16 == -224 ) /*0xd90d*/
return 1; /*0xd90d*/
n24_1 = n24; /*0xd913*/
v4 = RstLinkedListGetNth((_QWORD **)(v2 + 16), n24); /*0xd91d*/
v5 = (__int64)v4; /*0xd922*/
if ( !v4 ) /*0xd928*/
return 18; /*0xd928*/
if ( !v4[8] ) /*0xd92a*/
return 18; /*0xd92a*/
v6 = *(_DWORD *)(v4[6] + 136LL); /*0xd935*/
if ( (v6 & 0x40) == 0 || (v6 & 0x1000000) != 0 || (unsigned int)RstHelper_ce6c(n24_1, (__int64)i) ) /*0xd954*/
return 18; /*0xd95b*/
v8 = 3 * (0x1000 / v13 + 384 * (0x100000 / v13)) + ((unsigned int)&loc_1FFFA + 6) / v13 + 161; /*0xd9a0*/
n0x96 = RstFormatDiskSize(0, *(_QWORD *)(*(_QWORD *)(v5 + 48) + 88LL), v13, 0, 0); /*0xd9b1*/
if ( *(_QWORD *)(*(_QWORD *)(v5 + 48) + 88LL) < v8 || n0x96 < 0x96 ) /*0xd9c9*/
return 12; /*0xda76*/
RstJournalDeviceSetMode(v5, 1); /*0xd9d4*/
Source = Assert_51((_BYTE *)(Source_16 + 224), *(_QWORD *)(v5 + 48), 1); /*0xd9f3*/
if ( !RstDebugEnabled() ) /*0xd9fd*/
goto LABEL_15; /*0xd9fd*/
if ( !Source ) /*0xda02*/
{
DebugAssert("IsmApi.cpp", 0x543u, "pJd"); /*0xda17*/
LABEL_15:
if ( !Source ) /*0xda1f*/
return 18; /*0xd962*/
}
if ( !Assert_48((__int64)Source) ) /*0xda28*/
{
Assert_130((_BYTE *)(Source_16 + 224), Source); /*0xda42*/
RstJournalDeviceSetMode(v5, 0); /*0xda4c*/
return 1; /*0xda51*/
}
LOBYTE(v11) = 1; /*0xda6b*/
(***(void (__fastcall ****)(_QWORD, __int64))(v5 + 64))(*(_QWORD *)(v5 + 64), v11); /*0xda70*/
return 0; /*0xda5e*/
}
// Function: RstRaidCheckLevelConfigurable @ 0xda80 (0x2c bytes)
// Index: 357/906
bool __fastcall RstRaidCheckLevelConfigurable(unsigned int n5)
{
return *(_BYTE *)(*(_QWORD *)(Source_16 + 216) + 48LL) < 0x18u && RstRaidCheckLevelSupport(n5) != 0; /*0xdaa7*/
}
// Function: RstRaidMemberRemove @ 0xdaac (0xdb bytes)
// Index: 358/906
__int64 __fastcall RstRaidMemberRemove(unsigned __int8 n0x18, unsigned __int8 n24)
{
__int64 v4; // rcx
__int64 v5; // rax
__int64 v7; // rbx
int n24_1; // ecx
__int64 v9; // rdi
__int64 v10; // rcx
int v11; // r8d
if ( !Source_16 ) /*0xdac5*/
return 1; /*0xdac5*/
v4 = *(_QWORD *)(Source_16 + 216); /*0xdacb*/
if ( !v4 ) /*0xdad5*/
return 1; /*0xdb77*/
v5 = RstArrayEntryLookup(v4, n0x18); /*0xdade*/
if ( !v5 ) /*0xdae6*/
return 14; /*0xdae6*/
v7 = *(_QWORD *)(v5 + 8); /*0xdaf2*/
if ( !v7 ) /*0xdaf9*/
return 14; /*0xdae8*/
n24_1 = 24; /*0xdb03*/
if ( n24 < 0x19u ) /*0xdb08*/
n24_1 = n24; /*0xdb08*/
v9 = *(_QWORD *)(v7 + 8LL * n24_1 + 24); /*0xdb0e*/
if ( !v9 ) /*0xdb16*/
return 15; /*0xdb16*/
v10 = *(_QWORD *)(v9 + 48); /*0xdb18*/
if ( !v10 ) /*0xdb1f*/
return 15; /*0xdb70*/
v11 = *(_DWORD *)(v10 + 136); /*0xdb21*/
if ( (v11 & 0x10) == 0 || (v11 & 0x40) != 0 || (v11 & 0x84) != 0 ) /*0xdb44*/
return 16; /*0xdb69*/
RstDeviceSetFlags(v10, 0x84u); /*0xdb46*/
RstDeviceClearFlags(*(_QWORD *)(v9 + 48), 1); /*0xdb54*/
RstConfigArrayNotifyRemove(v7, *(_QWORD *)(v9 + 48)); /*0xdb60*/
return 0; /*0xdb81*/
}
// Function: RstRaidMemberAdd @ 0xdb88 (0xdd bytes)
// Index: 359/906
__int64 __fastcall RstRaidMemberAdd(unsigned __int8 n0x18, unsigned __int8 n24)
{
__int64 v4; // rcx
__int64 v5; // rax
__int64 v7; // rbx
int n24_1; // ecx
__int64 v9; // rbx
int v10; // ecx
int n132; // edx
__int64 v12; // rdx
if ( !Source_16 ) /*0xdba1*/
return 1; /*0xdba1*/
v4 = *(_QWORD *)(Source_16 + 216); /*0xdba7*/
if ( !v4 ) /*0xdbb1*/
return 1; /*0xdc55*/
v5 = RstArrayEntryLookup(v4, n0x18); /*0xdbba*/
if ( !v5 ) /*0xdbc2*/
return 14; /*0xdbc2*/
v7 = *(_QWORD *)(v5 + 8); /*0xdbce*/
if ( !v7 ) /*0xdbd5*/
return 14; /*0xdbc9*/
n24_1 = 24; /*0xdbdf*/
if ( n24 < 0x19u ) /*0xdbe4*/
n24_1 = n24; /*0xdbe4*/
v9 = *(_QWORD *)(v7 + 8LL * n24_1 + 24); /*0xdbea*/
if ( !v9 || !*(_QWORD *)(v9 + 64) ) /*0xdbf4*/
return 15; /*0xdc4e*/
v10 = *(_DWORD *)(*(_QWORD *)(v9 + 48) + 136LL); /*0xdbff*/
if ( (v10 & 4) != 0 && (v10 & 0x80) == 0 ) /*0xdc16*/
return 16; /*0xdc16*/
n132 = 132; /*0xdc1f*/
if ( (v10 & 0x84) == 0 ) /*0xdc26*/
{
if ( (v10 & 0x10) != 0 ) /*0xdc45*/
return 16; /*0xdc1d*/
n132 = 128; /*0xdc47*/
}
RstDeviceClearFlags(*(_QWORD *)(v9 + 48), n132); /*0xdc2b*/
LOBYTE(v12) = 1; /*0xdc34*/
(***(void (__fastcall ****)(_QWORD, __int64))(v9 + 64))(*(_QWORD *)(v9 + 64), v12); /*0xdc39*/
return 0; /*0xdc5f*/
}
// Function: RstRaidMemberSetActiveOrRemove @ 0xdc68 (0x36 bytes)
// Index: 360/906
__int64 __fastcall RstRaidMemberSetActiveOrRemove(__int64 a1, unsigned __int8 n0x18)
{
__int64 Source; // rax
Source = Source_16; /*0xdc6e*/
if ( *(_WORD *)(Source_16 + 2720) ) /*0xdc78*/
{
Source = RstRaidSetMemberActive(a1, n0x18); /*0xdc82*/
if ( !*(_WORD *)(a1 + 40) ) /*0xdc87*/
return RstRaidMemberMarkRemoving(a1, 0xFFu); /*0xdc93*/
}
return Source; /*0xdc98*/
}
// Function: RstStringLastColonIndex @ 0xdca0 (0x43 bytes)
// Index: 361/906
char __fastcall RstStringLastColonIndex(CHAR16 *Destination)
{
CHAR16 *Destination_1; // rax
unsigned __int8 n0x30; // dl
Destination_1 = (CHAR16 *)((char *)Destination + (unsigned __int16)StrLenA(Destination) - 1); /*0xdcb2*/
n0x30 = *(_BYTE *)Destination_1; /*0xdcb7*/
if ( *(_BYTE *)Destination_1 == 58 ) /*0xdcbc*/
return 0; /*0xdcbc*/
while ( n0x30 >= 0x30u && n0x30 <= 0x39u && Destination_1 > Destination ) /*0xdcce*/
{
Destination_1 = (CHAR16 *)((char *)Destination_1 - 1); /*0xdcd0*/
n0x30 = *(_BYTE *)Destination_1; /*0xdcd3*/
}
if ( *(_BYTE *)Destination_1 != 58 ) /*0xdcdd*/
return 0; /*0xdcbe*/
else
return (_BYTE)Destination_1 - (_BYTE)Destination; /*0xdcdf*/
}
// Function: RstFormatStringCopy @ 0xdce4 (0x15f bytes)
// Index: 362/906
CHAR16 *__fastcall RstFormatStringCopy(__int64 a1, const CHAR16 *Source, unsigned __int8 n0x11, unsigned __int8 Length, char a5)
{
UINTN Length_1; // rsi
__int64 Length_2; // r13
CHAR16 *Destination; // rax
unsigned __int8 v11; // bp
CHAR16 *i; // rdi
CHAR16 *i_1; // rdx
__int64 v14; // r8
char v15; // cl
CHAR16 *i_2; // rbx
CHAR16 *i_3; // rax
__int64 Length_3; // rdx
char v19; // si
Length_1 = Length; /*0xdd01*/
Length_2 = Length; /*0xdd11*/
Destination = (CHAR16 *)MemAllocPages(Length); /*0xdd14*/
v11 = 0; /*0xdd19*/
i = Destination; /*0xdd1c*/
if ( (_BYTE)Length_1 && n0x11 && Source && Destination ) /*0xdd3d*/
{
StrnCpy(Destination, Source, Length_1); /*0xdd4c*/
if ( a5 ) /*0xdd5c*/
{
i_1 = i; /*0xdd66*/
v14 = (unsigned __int8)(((unsigned __int8)(Length_1 - 1) >> 1) + 1); /*0xdd71*/
do /*0xdd86*/
{
v15 = *(_BYTE *)i_1; /*0xdd75*/
*(_BYTE *)i_1 = *((_BYTE *)i_1 + 1); /*0xdd7a*/
*((_BYTE *)i_1++ + 1) = v15; /*0xdd7c*/
--v14; /*0xdd83*/
}
while ( v14 ); /*0xdd86*/
}
i_2 = i; /*0xdd88*/
i_3 = i; /*0xdd8b*/
Length_3 = (unsigned __int8)Length_1; /*0xdd93*/
do /*0xddb6*/
{
if ( *(_BYTE *)i_3 > 0x20u ) /*0xdd9c*/
{
*(_BYTE *)i_2 = *(_BYTE *)i_3; /*0xdd9e*/
i_2 = (CHAR16 *)((char *)i_2 + 1); /*0xdda0*/
++v11; /*0xdda3*/
}
if ( *((_BYTE *)i_2 - 1) == 58 ) /*0xddaa*/
*((_BYTE *)i_2 - 1) = 59; /*0xddac*/
i_3 = (CHAR16 *)((char *)i_3 + 1); /*0xddb0*/
--Length_3; /*0xddb3*/
}
while ( Length_3 ); /*0xddb6*/
v19 = *(_BYTE *)i_2; /*0xddb8*/
*(_BYTE *)i_2 = 0; /*0xddc6*/
if ( v11 <= n0x11 - 1 ) /*0xddcb*/
{
RstStringCopyN(a1, (__int64)i, v11); /*0xddfe*/
*(_BYTE *)(v11 + a1) = 0; /*0xde07*/
}
else
{
RstStringCopyN(a1, (__int64)i + v11 - n0x11 + 1, n0x11 - 1); /*0xdde3*/
*(_BYTE *)(n0x11 + a1 - 1) = 0; /*0xddec*/
}
*(_BYTE *)i_2 = v19; /*0xde14*/
MemZero(i, 0, Length_2); /*0xde17*/
return (CHAR16 *)MemFree(); /*0xde1f*/
}
return Destination; /*0xde38*/
}
// Function: RstLinkedListPopFront @ 0xde44 (0x24 bytes)
// Index: 363/906
__int64 *__fastcall RstLinkedListPopFront(__int64 a1)
{
__int64 *result; // rax
__int64 v2; // r8
result = *(__int64 **)a1; /*0xde44*/
if ( *(_QWORD *)a1 ) /*0xde44*/
{
if ( result == *(__int64 **)(a1 + 8) ) /*0xde50*/
*(_QWORD *)(a1 + 8) = 0; /*0xde52*/
v2 = *result; /*0xde57*/
*(_QWORD *)a1 = *result; /*0xde5a*/
if ( v2 ) /*0xde60*/
*(_QWORD *)(v2 + 8) = 0; /*0xde62*/
}
return result; /*0xde67*/
}
// Function: RstLinkedListGetNth @ 0xde68 (0x24 bytes)
// Index: 364/906
_QWORD *__fastcall RstLinkedListGetNth(_QWORD **a1, __int16 a2)
{
_QWORD *result; // rax
if ( a2 < 0 ) /*0xde6f*/
return 0; /*0xde71*/
result = *a1; /*0xde74*/
while ( result && a2 > 0 ) /*0xde7d*/
{
result = (_QWORD *)*result; /*0xde7f*/
--a2; /*0xde82*/
}
return result; /*0xde73*/
}
// Function: RstLinkedListPrepend @ 0xde8c (0x2a bytes)
// Index: 365/906
_QWORD *__fastcall RstLinkedListPrepend(_QWORD *a1, _QWORD *a2)
{
_QWORD *v2; // rax
v2 = (_QWORD *)a1[1]; /*0xde8c*/
if ( v2 ) /*0xde93*/
{
*v2 = a2; /*0xde95*/
a2[1] = a1[1]; /*0xde9c*/
}
else
{
*a1 = a2; /*0xdea2*/
a2[1] = 0; /*0xdea5*/
}
*a2 = 0; /*0xdeaa*/
a1[1] = a2; /*0xdeb1*/
return a1; /*0xdeb5*/
}
// Function: RstLinkedListInsertAfter @ 0xdeb8 (0x2e bytes)
// Index: 366/906
_QWORD *__fastcall RstLinkedListInsertAfter(_QWORD *a1, _QWORD *a2, _QWORD *j)
{
if ( (_QWORD *)*a1 == j ) /*0xdebb*/
*a1 = a2; /*0xdebd*/
else
*(_QWORD *)j[1] = a2; /*0xdec6*/
*a2 = j; /*0xdec9*/
a2[1] = j[1]; /*0xded0*/
j[1] = a2; /*0xded4*/
if ( a2 == (_QWORD *)a1[1] ) /*0xdedc*/
*a2 = 0; /*0xdede*/
return a1; /*0xdee5*/
}
// Function: RstLinkedListRemove @ 0xdee8 (0x42 bytes)
// Index: 367/906
__int64 __fastcall RstLinkedListRemove(__int64 a1, _QWORD *a2)
{
_QWORD *v2; // rax
_QWORD *v3; // r8
if ( a2 == *(_QWORD **)a1 ) /*0xdeee*/
*(_QWORD *)a1 = **(_QWORD **)a1; /*0xdef3*/
v2 = *(_QWORD **)(a1 + 8); /*0xdef6*/
if ( a2 == v2 ) /*0xdefd*/
*(_QWORD *)(a1 + 8) = v2[1]; /*0xdf03*/
if ( *a2 ) /*0xdf07*/
*(_QWORD *)(*a2 + 8LL) = a2[1]; /*0xdf13*/
v3 = (_QWORD *)a2[1]; /*0xdf17*/
if ( v3 ) /*0xdf1e*/
*v3 = *a2; /*0xdf23*/
return a1; /*0xdf29*/
}
// Function: RstLinkedListInsert @ 0xdf2c (0xa bytes)
// Index: 368/906
__int64 __fastcall RstLinkedListInsert(__int64 *a1, __int64 *a2)
{
__int64 result; // rax
result = *a1; /*0xdf2c*/
*a2 = *a1; /*0xdf2f*/
*a1 = (__int64)a2; /*0xdf32*/
return result; /*0xdf35*/
}
// Function: RstLinkedListPop @ 0xdf38 (0xf bytes)
// Index: 369/906
_QWORD *__fastcall RstLinkedListPop(_QWORD **a1)
{
_QWORD *result; // rax
result = *a1; /*0xdf38*/
if ( *a1 ) /*0xdf38*/
*a1 = (_QWORD *)*result; /*0xdf43*/
return result; /*0xdf46*/
}
// Function: Assert_82 @ 0xdf48 (0xec bytes)
// Index: 370/906
char __fastcall Assert_82(__int64 Source, _QWORD *NewContext, _BYTE *i)
{
char result; // al
int v7; // edi
__int64 v8; // rbx
int n132; // edx
result = RstArrayAllSlotsEmpty(Source + 2984); /*0xdf75*/
if ( !result && *(__int16 *)(Source + 32936) < 48 ) /*0xdf8a*/
{
v7 = ((*((_DWORD *)i + 5) & 2) << 9) | 0x8038; /*0xdf99*/
if ( (i[20] & 4) != 0 ) /*0xdfa3*/
v7 = ((*((_DWORD *)i + 5) & 2) << 9) | 0x1008038; /*0xdfa5*/
v8 = RstDeviceArrayFindByName(Source + 2984, i + 69); /*0xdfb9*/
if ( !v8 ) /*0xdfbf*/
v8 = RstConfigArrayAddEntry(Source + 2984, i + 69, v7, *(_QWORD *)i); /*0xdfd8*/
Assert_21(v8, NewContext, i, v7); /*0xdfe7*/
n132 = 132; /*0xdfec*/
if ( (*(_BYTE *)(v8 + 136) & 0x84) == 0 ) /*0xdffa*/
n132 = 128; /*0xdffc*/
RstDeviceClearFlags(v8, n132); /*0xe001*/
return RstJournalAddDevice(*(_QWORD *)(Source + 216), v8); /*0xe010*/
}
return result; /*0xe029*/
}
// Function: Assert_136 @ 0xe034 (0x43 bytes)
// Index: 371/906
__int64 Assert_136__int64 Source)
{
__int64 v2; // rcx
__int64 result; // rax
if ( !*(_BYTE *)(Source + 32944) ) /*0xe03a*/
{
Assert_74(*(_QWORD *)(Source + 208)); /*0xe04d*/
v2 = *(_QWORD *)(Source + 208); /*0xe052*/
*(_BYTE *)(Source + 32944) = 1; /*0xe059*/
Assert_128(v2); /*0xe060*/
return RstConfigBlockFlushAll(*(_QWORD *)(Source + 216)); /*0xe06c*/
}
return result; /*0xe071*/
}
// Function: Assert_86 @ 0xe078 (0xd0 bytes)
// Index: 372/906
__int64 __fastcall Assert_86(__int64 Source, __int64 a2)
{
__int64 v2; // rsi
__int16 n24_1; // cx
__int16 n24; // bx
__int64 v8; // rax
v2 = 0; /*0xe08c*/
n24_1 = *(_WORD *)(Source + 192); /*0xe091*/
n24 = 0; /*0xe09e*/
if ( n24_1 > 0 ) /*0xe0a5*/
{
do /*0xe0c1*/
{
if ( *(_QWORD *)(Source + 8LL * n24) == 4294871467LL ) /*0xe0b4*/
break; /*0xe0b4*/
++n24; /*0xe0b6*/
}
while ( n24 < *(__int16 *)(Source + 192) ); /*0xe0c1*/
}
if ( n24 == n24_1 ) /*0xe0c6*/
{
if ( n24 >= 24 ) /*0xe0cc*/
return 0; /*0xe0d0*/
*(_WORD *)(Source + 192) = n24_1 + 1; /*0xe0d6*/
}
++*(_BYTE *)(*(_QWORD *)(Source + 216) + 48LL); /*0xe0e7*/
if ( !RstBufferPoolGetBuffer(*(_QWORD **)(Source + 200), 1) ) /*0xe0fa*/
return 0; /*0xe0fa*/
v8 = RstMemPoolAlloc(192); /*0xe101*/
if ( v8 ) /*0xe109*/
v2 = Assert_49(v8, n24, a2); /*0xe119*/
*(_QWORD *)(Source + 8LL * n24) = v2; /*0xe120*/
RstConfigBlockResetCount(); /*0xe12b*/
return v2; /*0xe142*/
}
// Function: Assert_119 @ 0xe148 (0x148 bytes)
// Index: 373/906
__int64 __fastcall Assert_119(__int64 Source, __int64 a2)
{
__int64 v2; // r13
__int16 n0x19_1; // bp
bool v6; // zf
unsigned __int8 n0x19; // r12
int n24_1; // ecx
int n24; // eax
unsigned __int8 n0x19_2; // si
int n24_3; // ecx
int n24_2; // eax
__int64 v13; // rcx
__int64 result; // rax
v2 = *(_QWORD *)(a2 + 144); /*0xe167*/
n0x19_1 = *(unsigned __int8 *)(v2 + 20); /*0xe175*/
*(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a2 + 160) + 16LL) + 8LL) = 3; /*0xe17d*/
Assert_104(a2); /*0xe188*/
v6 = *(_BYTE *)(a2 + 188) == 0; /*0xe18d*/
*(_BYTE *)(a2 + 185) = 1; /*0xe194*/
if ( !v6 ) /*0xe19b*/
{
n0x19 = 0; /*0xe1a0*/
if ( n0x19_1 > 0 ) /*0xe1a5*/
{
n24_1 = 0; /*0xe1a7*/
do /*0xe1d3*/
{
n24 = 24; /*0xe1a9*/
if ( n0x19 < 0x19u ) /*0xe1b7*/
n24 = n24_1; /*0xe1b7*/
RstDeviceClearFlags(*(_QWORD *)(*(_QWORD *)(v2 + 8LL * n24 + 24) + 48LL), 12714663); /*0xe1c5*/
n24_1 = ++n0x19; /*0xe1cd*/
}
while ( n0x19 < n0x19_1 ); /*0xe1d3*/
}
}
RstConfigArrayRemoveEntryByIndex(*(_QWORD *)(Source + 216), *(_QWORD *)(a2 + 136)); /*0xe1e3*/
if ( *(_BYTE *)(a2 + 188) ) /*0xe1e8*/
{
n0x19_2 = 0; /*0xe1f4*/
if ( n0x19_1 > 0 ) /*0xe1f9*/
{
n24_3 = 0; /*0xe1fb*/
do /*0xe234*/
{
n24_2 = 24; /*0xe1fd*/
if ( n0x19_2 < 0x19u ) /*0xe206*/
n24_2 = n24_3; /*0xe206*/
v13 = *(_QWORD *)(*(_QWORD *)(v2 + 8LL * n24_2 + 24) + 48LL); /*0xe210*/
if ( (*(_DWORD *)(v13 + 136) & 0x10) != 0 ) /*0xe21f*/
RstDeviceSetFlags(v13, 0x40u); /*0xe226*/
n24_3 = ++n0x19_2; /*0xe22e*/
}
while ( n0x19_2 < n0x19_1 ); /*0xe234*/
}
}
RstLinkedListInsertAt(*(__int64 ***)(Source + 200), 1, a2); /*0xe245*/
result = 4294871467LL; /*0xe252*/
*(_QWORD *)(Source + 8LL * *(__int16 *)(a2 + 130)) = 4294871467LL; /*0xe257*/
if ( *(_BYTE *)(a2 + 188) ) /*0xe25b*/
return RstConfigBlockRemoveAndFree(*(_QWORD *)(Source + 216), *(_QWORD **)(a2 + 144)); /*0xe272*/
return result; /*0xe286*/
}
// Function: Assert_89 @ 0xe290 (0xa3 bytes)
// Index: 374/906
__int64 __fastcall Assert_89(__int64 a1, __int64 a2, char a3, __int64 a4, int a5, unsigned int a6)
{
_BYTE Source[80]; // [rsp+30h] [rbp-58h] BYREF
if ( (*(_DWORD *)(a2 + 136) & 8) != 0 ) /*0xe2b6*/
{
RstConfigBlockZero((__int64)Source); /*0xe2d7*/
RstConfigBlockInit((__int64)Source, a2, a3, a4, a5, a6); /*0xe302*/
j_Assert_18(a2, (__int64)Source); /*0xe30f*/
return RstConfigBufferSetSize(Source); /*0xe319*/
}
else
{
*(_WORD *)(a1 + 2720) = 5; /*0xe2bd*/
*(_WORD *)(a1 + 2722) = 4; /*0xe2c9*/
return 4; /*0xe2c4*/
}
}
// Function: RstDeviceContextGetNth @ 0xe334 (0x47 bytes)
// Index: 375/906
__int64 __fastcall RstDeviceContextGetNth(__int64 Source, __int16 n0x18)
{
__int16 v2; // r10
__int64 v3; // r9
bool v4; // cc
__int16 v5; // r8
v2 = *(_WORD *)(Source + 192); /*0xe334*/
v3 = 0; /*0xe33c*/
v4 = v2 > 0; /*0xe33f*/
v5 = 0; /*0xe343*/
while ( v4 ) /*0xe347*/
{
if ( *(_QWORD *)(Source + 8LL * v5) != 4294871467LL && !n0x18-- ) /*0xe359*/
return *(_QWORD *)(Source + 8LL * v5); /*0xe373*/
v4 = ++v5 < v2; /*0xe369*/
}
return v3; /*0xe37a*/
}
// Function: Assert_56 @ 0xe37c (0xa0 bytes)
// Index: 376/906
__int64 __fastcall Assert_56(__int64 Source, _WORD *a2)
{
bool i; // cc
__int16 n0x18; // dx
__int64 v6; // rbx
__int64 v7; // rax
for ( i = *a2 < *(_WORD *)(Source + 192); i; i = *a2 < *(_WORD *)(Source + 192) ) /*0xe398*/
{
n0x18 = (*a2)++; /*0xe39d*/
v6 = RstDeviceContextGetNth(Source, n0x18); /*0xe3ae*/
if ( v6 ) /*0xe3b4*/
{
if ( RstDebugEnabled() && !*(_QWORD *)(v6 + 136) ) /*0xe3bf*/
DebugAssert("RaidIsm.cpp", 0x16Du, "rDev->getCfgRaidDev()"); /*0xe3dc*/
v7 = *(_QWORD *)(v6 + 136); /*0xe3e1*/
if ( v7 ) /*0xe3eb*/
{
if ( *(_DWORD *)(v7 + 80) == 2 || *(_DWORD *)(v7 + 80) == 4 ) /*0xe3f7*/
return v6; /*0xe408*/
}
}
}
return 0; /*0xe416*/
}
// Function: RstDeviceListFindByDevice @ 0xe41c (0x48 bytes)
// Index: 377/906
char __fastcall RstDeviceListFindByDevice(__int64 Source, __int64 a2)
{
__int64 v2; // rax
__int64 v4; // r8
__int64 v5; // rcx
__int64 *v6; // rax
v2 = *(_QWORD *)(Source + 216); /*0xe41c*/
v4 = *(_QWORD *)(v2 + 16); /*0xe426*/
*(_QWORD *)(v2 + 8) = v4; /*0xe42a*/
while ( v4 ) /*0xe431*/
{
if ( *(_QWORD *)(v4 + 48) == a2 && *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(v4 + 40) + 248LL) + 36LL) ) /*0xe444*/
return 1; /*0xe460*/
v5 = *(_QWORD *)(Source + 216); /*0xe44a*/
v6 = *(__int64 **)(v5 + 8); /*0xe451*/
v4 = *v6; /*0xe455*/
*(_QWORD *)(v5 + 8) = *v6; /*0xe458*/
}
return 0; /*0xe460*/
}
// Function: RstConfigBlockInitFrom @ 0xe464 (0x28 bytes)
// Index: 378/906
__int64 __fastcall RstConfigBlockInitFrom(__int64 Source, char n42, __int64 a3, int a4, _BYTE *i, _BYTE *Sourcea)
{
return RstConfigBlockInit((__int64)Sourcea, 0, n42, a3, a4, (unsigned int)i); /*0xe487*/
}
// Function: RstLinkedListFindByKey @ 0xe48c (0x7e bytes)
// Index: 379/906
__int64 __fastcall RstLinkedListFindByKey(__int64 Source, _BYTE *a2)
{
bool v4; // cc
__int16 v5; // bx
__int64 v6; // rcx
v4 = *(_WORD *)(Source + 192) > 0; /*0xe4a8*/
v5 = 0; /*0xe4af*/
while ( v4 ) /*0xe4b2*/
{
v6 = *(_QWORD *)(Source + 8LL * v5); /*0xe4b8*/
if ( v6 != 4294871467LL && !StrnCpy16((_BYTE *)(v6 + 112), a2, 0xFFFF) ) /*0xe4db*/
return *(_QWORD *)(Source + 8LL * v5); /*0xe4f1*/
v4 = ++v5 < *(_WORD *)(Source + 192); /*0xe4e0*/
}
return 0; /*0xe504*/
}
// Function: RstDriverContextInit @ 0xe50c (0xa5 bytes)
// Index: 380/906
__int64 __fastcall RstDriverContextInit(__int64 Source)
{
__int64 v1; // rbx
__int64 v3; // rax
__int64 v4; // rax
__int64 v5; // rax
__int64 result; // rax
v1 = 0; /*0xe516*/
*(_WORD *)(Source + 192) = 0; /*0xe520*/
*(_QWORD *)Source = 4294871467LL; /*0xe527*/
*(_BYTE *)(Source + 32944) = 0; /*0xe52a*/
RstBufferPoolInit(); /*0xe530*/
*(_BYTE *)(Source + 34256) = 0; /*0xe538*/
v3 = RstMemPoolAlloc(80); /*0xe53e*/
if ( v3 ) /*0xe546*/
v4 = RstPplRecoveryLogInitEx(v3); /*0xe54b*/
else
v4 = 0; /*0xe552*/
*(_QWORD *)(Source + 208) = v4; /*0xe55a*/
v5 = RstMemPoolAlloc(368); /*0xe561*/
if ( v5 ) /*0xe569*/
v1 = RstDevicePoolInit(v5); /*0xe573*/
*(_QWORD *)(Source + 216) = v1; /*0xe580*/
RstBufferPoolInitEntries((_BYTE *)(Source + 224)); /*0xe587*/
result = RstArrayInitAllSlots(Source + 2984); /*0xe593*/
i_2 = i_1; /*0xe5a4*/
return result; /*0xe5ab*/
}
// Function: RstGetData88 @ 0xe5b4 (0x5 bytes)
// Index: 381/906
__int64 __fastcall RstGetData88(__int64 a1)
{
return *(_QWORD *)(a1 + 88); /*0xe5b8*/
}
// Function: RstGetOffset45 @ 0xe5bc (0x5 bytes)
// Index: 382/906
__int64 __fastcall RstGetOffset45(__int64 a1)
{
return a1 + 45; /*0xe5c0*/
}
// Function: RstGetUint108 @ 0xe5c4 (0x4 bytes)
// Index: 383/906
__int64 __fastcall RstGetUint108(__int64 a1)
{
return *(unsigned int *)(a1 + 108); /*0xe5c7*/
}
// Function: RstSetUint108 @ 0xe5c8 (0x4 bytes)
// Index: 384/906
void __fastcall RstSetUint108(__int64 a1, int a2)
{
*(_DWORD *)(a1 + 108) = a2; /*0xe5c8*/
}
// Function: RstDevicePoolInit @ 0xe5cc (0x14d bytes)
// Index: 385/906
__int64 __fastcall RstDevicePoolInit(__int64 a1)
{
__int64 n144; // rdi
_QWORD *v3; // rax
_QWORD *v4; // rax
__int64 *v5; // rdi
__int64 n25; // rsi
__int64 v7; // rax
__int64 v8; // rax
__int64 n12; // rdi
__int64 v10; // rax
__int64 *v11; // rax
n144 = 144; /*0xe5eb*/
*(_QWORD *)(a1 + 24) = 0; /*0xe5f0*/
*(_QWORD *)(a1 + 16) = 0; /*0xe5f4*/
*(_QWORD *)(a1 + 40) = 0; /*0xe5f8*/
*(_QWORD *)(a1 + 32) = 0; /*0xe5fc*/
*(_QWORD *)(a1 + 272) = 0; /*0xe600*/
*(_QWORD *)(a1 + 264) = 0; /*0xe607*/
*(_QWORD *)(a1 + 280) = 0; /*0xe60e*/
*(_QWORD *)(a1 + 296) = 0; /*0xe615*/
*(_QWORD *)(a1 + 288) = 0; /*0xe61c*/
*(_WORD *)a1 = 0; /*0xe623*/
do /*0xe653*/
{
v3 = (_QWORD *)RstMemPoolAlloc(80); /*0xe62c*/
if ( v3 ) /*0xe634*/
v4 = RstIoCompletionNodeInit(v3); /*0xe639*/
else
v4 = 0; /*0xe640*/
RstLinkedListPrepend((_QWORD *)(a1 + 32), v4); /*0xe64a*/
--n144; /*0xe64f*/
}
while ( n144 ); /*0xe653*/
*(_BYTE *)(a1 + 48) = 0; /*0xe655*/
v5 = (__int64 *)(a1 + 56); /*0xe659*/
n25 = 25; /*0xe65d*/
do /*0xe689*/
{
v7 = RstMemPoolAlloc(104); /*0xe667*/
if ( v7 ) /*0xe66f*/
v8 = RstNvCacheRaidConfigInit(v7); /*0xe674*/
else
v8 = 0; /*0xe67b*/
*v5++ = v8; /*0xe67e*/
--n25; /*0xe685*/
}
while ( n25 ); /*0xe689*/
*(_WORD *)(a1 + 256) = 0; /*0xe68b*/
n12 = 12; /*0xe693*/
do /*0xe6c5*/
{
v10 = RstMemPoolAlloc(512); /*0xe69b*/
if ( v10 ) /*0xe6a3*/
v11 = (__int64 *)RstJournalInit(v10); /*0xe6a8*/
else
v11 = 0; /*0xe6af*/
RstLinkedListInsert((__int64 *)(a1 + 280), v11); /*0xe6bc*/
--n12; /*0xe6c1*/
}
while ( n12 ); /*0xe6c5*/
*(_BYTE *)(a1 + 340) = 1; /*0xe6d6*/
*(_QWORD *)(a1 + 312) = 0; /*0xe6dd*/
*(_DWORD *)(a1 + 320) = 0; /*0xe6e4*/
*(_DWORD *)(a1 + 336) = 5; /*0xe6eb*/
*(_QWORD *)(a1 + 328) = 0; /*0xe6f5*/
*(_QWORD *)(a1 + 296) = 0; /*0xe6ff*/
*(_QWORD *)(a1 + 288) = 0; /*0xe706*/
return a1; /*0xe712*/
}
// Function: RstLinkedListInsertSorted @ 0xe71c (0x74 bytes)
// Index: 386/906
__int64 *__fastcall RstLinkedListInsertSorted(__int64 i, unsigned int a2)
{
__int64 *v4; // rax
__int64 *v5; // rbx
_QWORD *j; // r8
v4 = RstLinkedListPopFront(i + 32); /*0xe734*/
v5 = v4; /*0xe739*/
if ( v4 ) /*0xe73f*/
{
RstDeviceClearCounts(v4); /*0xe744*/
for ( j = *(_QWORD **)(i + 16); ; j = (_QWORD *)*j ) /*0xe749*/
{
if ( !j ) /*0xe75e*/
{
RstLinkedListPrepend((_QWORD *)(i + 16), v5); /*0xe767*/
goto LABEL_7; /*0xe767*/
}
if ( a2 < *(_DWORD *)(j[6] + 96LL) ) /*0xe756*/
break; /*0xe756*/
}
RstLinkedListInsertAfter((_QWORD *)(i + 16), v5, (__int64)j); /*0xe789*/
LABEL_7:
++*(_WORD *)i; /*0xe76c*/
}
return v5; /*0xe77c*/
}
// Function: RstLinkedListContains @ 0xe790 (0x1b bytes)
// Index: 387/906
char __fastcall RstLinkedListContains(__int64 a1, _QWORD *i)
{
_QWORD *j; // rax
for ( j = *(_QWORD **)(a1 + 264); j; j = (_QWORD *)*j ) /*0xe790*/
{
if ( j == i ) /*0xe79c*/
{
LOBYTE(j) = 1; /*0xe7a8*/
return (char)j; /*0xe7a8*/
}
}
return (char)j; /*0xe7a6*/
}
// Function: RstEntryBufferAllocSorted @ 0xe7ac (0x6e bytes)
// Index: 388/906
__int64 __fastcall RstEntryBufferAllocSorted(__int64 a1, __int64 a2)
{
__int64 v2; // r9
__int64 v4; // rdx
__int64 v5; // r8
__int64 v6; // r8
__int64 v7; // r8
v2 = a1 + 288; /*0xe7b0*/
v4 = 0; /*0xe7ba*/
v5 = *(_QWORD *)(a1 + 288); /*0xe7bc*/
if ( v5 ) /*0xe7c2*/
v6 = v5 - 8; /*0xe7c4*/
else
v6 = 0; /*0xe7ca*/
if ( v6 ) /*0xe7d0*/
{
while ( *(_DWORD *)(a2 + 24) >= *(_DWORD *)(v6 + 24) ) /*0xe7d9*/
{
v7 = *(_QWORD *)(v6 + 8); /*0xe7db*/
if ( v7 ) /*0xe7e2*/
v6 = v7 - 8; /*0xe7e4*/
else
v6 = 0; /*0xe7ea*/
if ( !v6 ) /*0xe7f0*/
goto LABEL_10; /*0xe7f0*/
}
return RstLinkedListInsertAfter(v2, a2 + 8); /*0xe813*/
}
else
{
LABEL_10:
if ( a2 ) /*0xe7f5*/
v4 = a2 + 8; /*0xe7f7*/
return RstLinkedListPrepend(v2, v4); /*0xe7fe*/
}
}
// Function: RstConfigBlockFlushAll @ 0xe81c (0x48 bytes)
// Index: 389/906
__int64 __fastcall RstConfigBlockFlushAll(__int64 a1)
{
__int64 i; // rbx
__int64 result; // rax
__int64 v3; // rbx
for ( i = *(_QWORD *)(a1 + 288); ; i = *(_QWORD *)(v3 + 8) )
{
v3 = i ? i - 8 : 0LL;
if ( !v3 ) /*0xe85c*/
break; /*0xe85c*/
if ( (*(_BYTE *)(v3 + 100) & 4) == 0 ) /*0xe82f*/
{
result = RstProtocolEfiDispatch(v3); /*0xe834*/
*(_BYTE *)(Source_16 + 34256) = 1; /*0xe840*/
}
}
return result; /*0xe85e*/
}
// Function: RstConfigBlockRemoveEntry @ 0xe864 (0x48 bytes)
// Index: 390/906
char __fastcall RstConfigBlockRemoveEntry(_WORD *a1, __int64 a2)
{
RstDeviceClearFlags(*(_QWORD *)(a2 + 48)); /*0xe878*/
RstLinkedListRemove(a1 + 8, a2); /*0xe884*/
RstLinkedListPrepend(a1 + 16, a2); /*0xe890*/
--*a1; /*0xe8a0*/
return 1; /*0xe8a6*/
}
// Function: RstConfigBlockClone @ 0xe8ac (0x48 bytes)
// Index: 391/906
__int64 __fastcall RstConfigBlockClone(__int64 a1)
{
__int64 v2; // rbx
v2 = RstLinkedListPop(a1 + 280); /*0xe8c8*/
RstConfigBlockReset(v2); /*0xe8cb*/
++*(_WORD *)(a1 + 256); /*0xe8d0*/
RstLinkedListPrepend(a1 + 264, v2); /*0xe8e1*/
return v2; /*0xe8ee*/
}
// Function: RstLinkedListSkipN @ 0xe8f4 (0x1d bytes)
// Index: 392/906
_QWORD *__fastcall RstLinkedListSkipN(__int64 a1, __int16 a2)
{
_QWORD *result; // rax
result = *(_QWORD **)(a1 + 264); /*0xe8f4*/
while ( result && a2 ) /*0xe902*/
{
result = (_QWORD *)*result; /*0xe904*/
--a2; /*0xe907*/
}
return result; /*0xe90f*/
}
// Function: RstLinkedListFindFirstUnused @ 0xe914 (0x77 bytes)
// Index: 393/906
__int64 __fastcall RstLinkedListFindFirstUnused(__int64 a1, _BYTE *a2)
{
__int16 v4; // bx
v4 = 0; /*0xe930*/
if ( !*(_BYTE *)(a1 + 48) ) /*0xe933*/
return 0; /*0xe969*/
while ( !a2 || StrnCpy16(a2, (_BYTE *)(*(_QWORD *)(a1 + 8LL * v4 + 56) + 16LL), 16) ) /*0xe95b*/
{
if ( ++v4 >= *(unsigned __int8 *)(a1 + 48) ) /*0xe967*/
return 0; /*0xe967*/
}
return *(_QWORD *)(a1 + 8LL * v4 + 56); /*0xe97a*/
}
// Function: Assert_10 @ 0xe98c (0x1e2 bytes)
// Index: 394/906
__int64 __fastcall Assert_10(__int64 a1)
{
__int64 v2; // rsi
__int64 v3; // rbx
__int64 v5; // r11
char n2; // al
int n3; // eax
__int64 Destination; // rax
__int64 v9; // rbp
__int64 v10; // rdi
v2 = *(_QWORD *)(a1 + 8LL * *(unsigned __int8 *)(a1 + 48) + 56); /*0xe9a7*/
v3 = Assert_86(Source_16, v2); /*0xe9bb*/
if ( !v3 ) /*0xe9c1*/
return 2; /*0xe9c6*/
Assert_132((__int64 *)v2); /*0xe9ce*/
v5 = *(_QWORD *)(v3 + 144); /*0xe9d3*/
n2 = *(_BYTE *)(v5 + 224); /*0xe9da*/
if ( (unsigned __int8)n2 >= 2u ) /*0xe9e6*/
n2 = 2; /*0xe9e8*/
if ( n2 == 1 ) /*0xe9f4*/
*(_BYTE *)(*(_QWORD *)(*(_QWORD *)(v5 + 248) + 8LL) + 58LL) = 0; /*0xea01*/
*(_WORD *)(v2 + 64) = ++*(_WORD *)(*(_QWORD *)(v5 + 248) + 32LL); /*0xea1b*/
if ( *(_WORD *)(a1 + 346) != 5 ) /*0xea2b*/
return 0; /*0xea2b*/
n3 = *(_DWORD *)(a1 + 336); /*0xea2d*/
if ( n3 < 0 ) /*0xea35*/
goto LABEL_14; /*0xea35*/
if ( n3 <= 1 ) /*0xea39*/
return 0; /*0xea72*/
if ( n3 != 2 ) /*0xea3e*/
{
if ( n3 == 3 ) /*0xea43*/
return 0; /*0xea43*/
if ( n3 != 4 ) /*0xea48*/
{
if ( n3 != 5 ) /*0xea4c*/
{
LABEL_14:
if ( RstDebugEnabled() ) /*0xea4e*/
DebugAssert("RaidCfgMgr.cpp", 0x337u, "((BOOLEAN)(0==1))"); /*0xea6a*/
*(_DWORD *)(v2 + 80) = 1; /*0xea6f*/
return 0; /*0xea6f*/
}
return 0; /*0xea4c*/
}
}
if ( RstDebugEnabled() && !*(_QWORD *)(a1 + 328) ) /*0xea92*/
DebugAssert("RaidCfgMgr.cpp", 0x312u, "m_pRwhJd"); /*0xeaaf*/
Destination = RstBufferPoolFindEntry(Source_16 + 224, *(_QWORD *)(*(_QWORD *)(a1 + 328) + 48LL)); /*0xeacd*/
if ( Destination ) /*0xead5*/
{
v9 = RstRaidEntryLookup(Destination); /*0xeadf*/
if ( v9 ) /*0xeae5*/
{
v10 = *(_QWORD *)(a1 + 328); /*0xeae7*/
MemZero((_BYTE *)(v2 + 84), 0, 16); /*0xeaf8*/
RstStringCopyN(v2 + 84, v10 + 18, 16); /*0xeb0b*/
*(_QWORD *)(v2 + 72) = v9; /*0xeb10*/
}
else if ( RstDebugEnabled() ) /*0xeb19*/
{
DebugAssert("RaidCfgMgr.cpp", 0x32Au, "((BOOLEAN)(0==1))"); /*0xeb39*/
}
return 0; /*0xeb14*/
}
if ( RstDebugEnabled() ) /*0xeb43*/
DebugAssert("RaidCfgMgr.cpp", 0x31Du, "((BOOLEAN)(0==1))"); /*0xeb5f*/
return 39; /*0xea83*/
}
// Function: RstConfigArrayRemoveEntryByIndex @ 0xeb70 (0x94 bytes)
// Index: 395/906
__int64 __fastcall RstConfigArrayRemoveEntryByIndex(__int64 a1, __int64 a2)
{
__int64 v2; // rsi
__int64 v5; // rdx
__int64 v6; // r8
__int64 v7; // rax
__int64 v8; // rax
__int64 v9; // r9
v2 = *(_QWORD *)(a2 + 8); /*0xeb7f*/
RstConfigArrayRemoveEntry(v2, a2); /*0xeb8c*/
v7 = (unsigned __int8)--*(_BYTE *)(a1 + 48); /*0xeb94*/
if ( a2 != *(_QWORD *)(a1 + 8 * v7 + 56) ) /*0xeb9d*/
{
v6 = 0; /*0xeba2*/
if ( (_BYTE)v7 ) /*0xeba9*/
{
do /*0xebe4*/
{
if ( a2 == *(_QWORD *)(a1 + 8LL * (__int16)v6 + 56) ) /*0xebb4*/
{
v8 = *(unsigned __int8 *)(a1 + 48); /*0xebb6*/
v9 = *(_QWORD *)(a1 + 8 * v8 + 56); /*0xebba*/
*(_QWORD *)(a1 + 8 * v8 + 56) = a2; /*0xebbf*/
*(_QWORD *)(a1 + 8LL * (__int16)v6 + 56) = v9; /*0xebc4*/
if ( *(_QWORD *)v9 ) /*0xebc9*/
*(_QWORD *)(*(_QWORD *)v9 + 136LL) = v9; /*0xebd1*/
}
LOWORD(v6) = v6 + 1; /*0xebdc*/
}
while ( (__int16)v6 < *(unsigned __int8 *)(a1 + 48) ); /*0xebe4*/
}
}
LOBYTE(v5) = 1; /*0xebed*/
return (***(__int64 (__fastcall ****)(_QWORD, __int64, __int64))(v2 + 248))(*(_QWORD *)(v2 + 248), v5, v6);
}
// Function: RstConfigBlockRemoveAndFree @ 0xec04 (0x42 bytes)
// Index: 396/906
__int64 __fastcall RstConfigBlockRemoveAndFree(__int64 a1, _QWORD *a2)
{
RstLinkedListRemove(a1 + 264, a2); /*0xec1b*/
RstLinkedListInsert(a1 + 280, a2); /*0xec2a*/
--*(_WORD *)(a1 + 256); /*0xec39*/
return 0xFFFF; /*0xec40*/
}
// Function: Assert_1 @ 0xec48 (0x315 bytes)
// Index: 397/906
__int64 __fastcall Assert_1(__int64 a1, char a2, char a3)
{
__int16 v3; // ax
__int64 i_1; // r13
char v6; // r12
char v7; // r14
char v8; // r15
__int64 n24; // rsi
_QWORD *v10; // rcx
__int64 i; // rsi
__int64 v13; // rbp
__int64 v14; // rbx
int v15; // ebx
int v16; // ecx
__int64 v17; // rcx
int v18; // ebp
__int64 i_2; // rbx
__int64 v20; // rcx
__int64 n24_1; // rax
bool v22; // zf
__int64 *v23; // rbx
int n2; // eax
_QWORD v25[31]; // [rsp+20h] [rbp-F8h] BYREF
v3 = *(_WORD *)(a1 + 342); /*0xec68*/
i_1 = 0; /*0xec77*/
v6 = 0; /*0xec7a*/
v7 = 0; /*0xec7d*/
v8 = 0; /*0xec80*/
LOWORD(n24) = 0; /*0xec83*/
if ( v3 < 0 || (unsigned __int16)v3 >= *(_WORD *)(a1 + 256) ) /*0xec93*/
{
if ( v3 != -1 ) /*0xed6d*/
return 19; /*0xed74*/
v16 = *(unsigned __int16 *)(a1 + 256); /*0xed79*/
if ( v16 + 1 > 12 ) /*0xed86*/
return 3; /*0xed8d*/
*(_WORD *)(a1 + 342) = v16; /*0xed92*/
v17 = *(_QWORD *)(a1 + 280); /*0xed99*/
*(_QWORD *)(a1 + 304) = v17; /*0xeda0*/
RstConfigBlockReset(v17); /*0xeda7*/
v18 = 0; /*0xedac*/
i_2 = *(_QWORD *)(a1 + 16); /*0xedae*/
*(_QWORD *)(a1 + 8) = i_2; /*0xedb4*/
if ( !i_2 ) /*0xedbb*/
return 8; /*0xedbb*/
do /*0xee60*/
{
if ( *(_WORD *)(i_2 + 56) ) /*0xedc1*/
{
if ( v18 && (unsigned int)HiiLibReturnZero(*(_QWORD *)(i_2 + 48)) != v18 ) /*0xedda*/
return 43; /*0xed64*/
v18 = HiiLibReturnZero(*(_QWORD *)(i_2 + 48)); /*0xedec*/
if ( *(_BYTE *)(i_2 + 58) == 3 ) /*0xedee*/
{
if ( !RstDeviceIsActive(i_2) ) /*0xedf9*/
return 18; /*0xedf9*/
i_1 = i_2; /*0xee02*/
++v6; /*0xee05*/
}
else
{
if ( RstDeviceIsActive(i_2) ) /*0xee0a*/
return 18; /*0xee0a*/
v20 = *(_QWORD *)(i_2 + 48); /*0xee19*/
if ( (*(_BYTE *)(v20 + 136) & 3) != 0 ) /*0xee24*/
return 18; /*0xed5a*/
n24_1 = (__int16)n24; /*0xee2a*/
LOWORD(n24) = n24 + 1; /*0xee33*/
v22 = (*(_BYTE *)(v20 + 100) & 8) == 0; /*0xee36*/
v25[n24_1] = i_2; /*0xee3a*/
if ( v22 ) /*0xee3f*/
v7 = 1; /*0xee46*/
else
v8 = 1; /*0xee41*/
}
}
i_2 = **(_QWORD **)(a1 + 8); /*0xee54*/
*(_QWORD *)(a1 + 8) = i_2; /*0xee59*/
}
while ( i_2 ); /*0xee60*/
if ( !(_WORD)n24 ) /*0xee6b*/
return 8; /*0xef3d*/
if ( (_WORD)n24 == 1 ) /*0xee74*/
{
if ( !a3 ) /*0xee7d*/
return 9; /*0xee82*/
}
else if ( (__int16)n24 > 24 ) /*0xee8b*/
{
return 10; /*0xee92*/
}
if ( !_bittest((const signed __int32 *)(a1 + 356), 0xAu) && v7 && v8 && a2 ) /*0xeeb2*/
return 21; /*0xeeb9*/
if ( (__int16)n24 > 0 ) /*0xeec1*/
{
v23 = v25; /*0xeec3*/
n24 = (unsigned __int16)n24; /*0xeec8*/
do /*0xeee6*/
{
Assert_58(*(_QWORD *)(a1 + 304), *v23++); /*0xeed5*/
--n24; /*0xeee3*/
}
while ( n24 ); /*0xeee6*/
}
}
else
{
v10 = *(_QWORD **)(a1 + 264); /*0xec99*/
while ( v10 && v3 ) /*0xeca5*/
{
v10 = (_QWORD *)*v10; /*0xeca7*/
--v3; /*0xecaa*/
}
*(_QWORD *)(a1 + 304) = v10; /*0xecb2*/
if ( !RstRaidVolumeTypeValid((__int64)v10) ) /*0xecb9*/
return 11; /*0xecc7*/
for ( i = *(_QWORD *)(a1 + 16); ; i = **(_QWORD **)(a1 + 8) ) /*0xeccc*/
{
*(_QWORD *)(a1 + 8) = i; /*0xecd0*/
if ( !i ) /*0xecd7*/
break; /*0xecd7*/
if ( *(_WORD *)(i + 56) ) /*0xecdd*/
{
v13 = *(_QWORD *)(i + 48); /*0xece3*/
v14 = *(_QWORD *)(a1 + 304); /*0xece7*/
if ( RstDebugEnabled() ) /*0xecee*/
{
if ( !*(_DWORD *)(v14 + 280) ) /*0xecf9*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0xed14*/
}
v15 = *(_DWORD *)(v14 + 280); /*0xed19*/
if ( (unsigned int)HiiLibReturnZero(v13) != v15 ) /*0xed29*/
return 43; /*0xed29*/
if ( *(_BYTE *)(i + 58) == 3 ) /*0xed2f*/
{
if ( !RstDeviceIsActive(i) ) /*0xed3d*/
return 18; /*0xed3d*/
i_1 = i; /*0xed3f*/
++v6; /*0xed42*/
}
}
}
}
n2 = *(_DWORD *)(a1 + 336); /*0xeef1*/
if ( *(_WORD *)(a1 + 346) == 5 ) /*0xef03*/
{
if ( n2 == 2 || n2 == 4 ) /*0xef0d*/
{
if ( v6 == 1 && i_1 ) /*0xef25*/
return 0; /*0xef25*/
}
else if ( !v6 && !i_1 ) /*0xef17*/
{
return 0; /*0xef1b*/
}
return 42; /*0xef27*/
}
else
{
if ( !n2 || n2 == 5 ) /*0xef34*/
return 0; /*0xef34*/
return 41; /*0xef36*/
}
}
// Function: RstDeviceListClearActive @ 0xef60 (0x4d bytes)
// Index: 398/906
__int64 __fastcall RstDeviceListClearActive(__int64 a1, __int64 n2)
{
__int64 i; // rax
__int64 v4; // rcx
unsigned __int8 v5; // [rsp+30h] [rbp+8h] BYREF
i = *(unsigned __int16 *)(a1 + 342); /*0xef66*/
if ( *(_WORD *)(a1 + 344) != (_WORD)i ) /*0xef77*/
{
v4 = *(_QWORD *)(a1 + 304); /*0xef79*/
v5 = 0; /*0xef80*/
while ( 1 ) /*0xef9d*/
{
i = RstSmallArrayPop(v4, &v5); /*0xef9d*/
if ( !i ) /*0xefa5*/
break; /*0xefa5*/
RstDeviceListEntrySetActive(i, 0); /*0xef8c*/
v4 = *(_QWORD *)(a1 + 304); /*0xef91*/
}
}
return i; /*0xefa7*/
}
// Function: RstLinkedListIndexOf @ 0xefb0 (0x25 bytes)
// Index: 399/906
char __fastcall RstLinkedListIndexOf(__int64 a1, _QWORD *a2)
{
_QWORD *v2; // rax
char v3; // cl
v2 = *(_QWORD **)(a1 + 16); /*0xefb0*/
if ( !a2 || !v2 ) /*0xefbc*/
return -1; /*0xefcf*/
v3 = 0; /*0xefbe*/
while ( v2 != a2 ) /*0xefc3*/
{
v2 = (_QWORD *)*v2; /*0xefc5*/
++v3; /*0xefc8*/
if ( !v2 ) /*0xefcd*/
return -1; /*0xefcd*/
}
return v3; /*0xefd1*/
}
// Function: RstLinkedListFindData @ 0xefd8 (0x16 bytes)
// Index: 400/906
_QWORD *__fastcall RstLinkedListFindData(__int64 a1, __int64 a2)
{
_QWORD *result; // rax
for ( result = *(_QWORD **)(a1 + 16); result && result[6] != a2; result = (_QWORD *)*result ) /*0xefd8*/
; /*0xefe4*/
return result; /*0xefec*/
}
// Function: RstLinkedListFindByName @ 0xeff0 (0x51 bytes)
// Index: 401/906
__int64 *__fastcall RstLinkedListFindByName(__int64 a1, _BYTE *a2)
{
__int64 *v2; // rbx
v2 = *(__int64 **)(a1 + 16); /*0xefff*/
if ( a2 ) /*0xf00b*/
{
while ( v2 && StrnCpy16(a2, (_BYTE *)v2 + 18, 16) ) /*0xf027*/
v2 = (__int64 *)*v2; /*0xf029*/
}
return v2; /*0xf03b*/
}
// Function: RstArrayEntryLookup @ 0xf044 (0x12 bytes)
// Index: 402/906
__int64 __fastcall RstArrayEntryLookup(__int64 a1, unsigned __int16 n0x18)
{
if ( n0x18 <= 0x18u ) /*0xf048*/
return *(_QWORD *)(a1 + 8LL * n0x18 + 56); /*0xf050*/
else
return 0; /*0xf04a*/
}
// Function: RstDeviceGetProperty @ 0xf058 (0x7dd bytes)
// Index: 403/906
__int64 __fastcall RstDeviceGetProperty(__int64 a1, char a2)
{
unsigned int n0x30000000_1; // eax
__int64 n0x18; // rcx
__int64 v6; // r12
int v7; // esi
__int64 v8; // rax
__int64 v9; // rdi
__int64 result; // rax
__int64 v11; // rbx
unsigned int v12; // eax
__int64 n2_2; // rdx
unsigned int n2; // ebx
char n2_1; // cl
__int16 v16; // r13
char v17; // al
__int64 v18; // rbx
__int16 v19; // r15
unsigned __int64 v20; // rax
__int64 v21; // rbx
unsigned __int64 v22; // rdi
unsigned int v23; // r12d
__int64 v24; // rbx
unsigned int v25; // eax
__int64 v26; // rbx
unsigned __int64 v27; // rdi
__int64 v28; // rbx
unsigned __int64 v29; // r13
__int64 v30; // rbx
unsigned int v31; // r14d
__int64 v32; // rbx
unsigned __int64 v33; // rdi
__int64 v34; // rbx
unsigned int v35; // edi
__int64 v36; // rbx
__int64 v37; // rbx
__int64 n2_3; // rdx
unsigned __int64 v39; // rbx
__int64 v40; // rdi
__int64 v41; // rbx
__int64 v42; // rdi... [12091 chars total]
// Function: RstJournalAddDevice @ 0xf838 (0x80 bytes)
// Index: 404/906
__int64 __fastcall RstJournalAddDevice(__int64 i, __int64 a2)
{
__int64 *i_1; // rax
__int64 i_3; // rbx
__int64 *i_2; // rax
i_1 = RstLinkedListFindByName(i, (_BYTE *)(a2 + 28)); /*0xf856*/
i_3 = (__int64)i_1; /*0xf85b*/
if ( i_1 ) /*0xf861*/
{
RstJournalEntryInit(i_1, (const CHAR16 *)(a2 + 28), a2); /*0xf86d*/
}
else
{
i_2 = RstLinkedListInsertSorted(i, *(_DWORD *)(a2 + 96)); /*0xf87a*/
i_3 = (__int64)i_2; /*0xf87f*/
if ( i_2 ) /*0xf885*/
{
RstJournalEntryInit(i_2, (const CHAR16 *)(a2 + 28), a2); /*0xf891*/
RstDeviceListEntrySetActive(i_3, 0); /*0xf89b*/
}
}
return i_3; /*0xf8b2*/
}
// Function: RstDeviceListUpdateStatus @ 0xf8b8 (0xcd bytes)
// Index: 405/906
void __fastcall RstDeviceListUpdateStatus(__int64 a1)
{
_QWORD *v1; // rbx
_QWORD *v3; // rbp
__int64 v4; // rdx
__int64 v5; // rsi
__int64 v6; // rcx
__int64 v7; // rdx
void (__fastcall ***v8)(_QWORD, __int64); // rcx
v1 = *(_QWORD **)(a1 + 16); /*0xf8cc*/
if ( v1 ) /*0xf8d6*/
{
do /*0xf96a*/
{
v3 = (_QWORD *)*v1; /*0xf8e0*/
v4 = *(unsigned int *)(v1[6] + 136LL); /*0xf8e3*/
if ( (*(_DWORD *)(v1[6] + 136LL) & 0x10) != 0 ) /*0xf8f0*/
{
v5 = v1[6]; /*0xf916*/
if ( (*(_DWORD *)(v5 + 136) & 0x400) != 0 ) /*0xf925*/
{
LOBYTE(v4) = -38; /*0xf92e*/
if ( (unsigned int)RstProtocolCallEntry5(*(_QWORD *)(v5 + 128), v4) == 2 ) /*0xf938*/
{
RstDeviceSetFlags(v5, 512); /*0xf942*/
v6 = v1[5]; /*0xf947*/
LOBYTE(v7) = 1; /*0xf94b*/
if ( v6 ) /*0xf950*/
v8 = *(void (__fastcall ****)(_QWORD, __int64))(v6 + 248); /*0xf952*/
else
v8 = (void (__fastcall ***)(_QWORD, __int64))v1[8]; /*0xf95b*/
(**v8)(v8, v7); /*0xf962*/
}
}
}
else if ( ((v4 & 2) == 0 || !v1[5]) && (v4 & 0x40) == 0 ) /*0xf907*/
{
RstConfigBlockRemoveEntry(a1, v1); /*0xf90f*/
}
v1 = v3; /*0xf964*/
}
while ( v3 ); /*0xf96a*/
}
}
// Function: Assert_27 @ 0xf988 (0x156 bytes)
// Index: 406/906
__int64 __fastcall Assert_27(__int64 a1, _BYTE *Source, __int64 a3)
{
__int64 v6; // rax
__int64 v7; // rbx
__int64 v8; // rdi
__int64 v9; // rbp
*(_BYTE *)(a1 + 362) = 1; /*0xf9a4*/
*(_WORD *)(a1 + 360) = 0; /*0xf9ae*/
v6 = RstLinkedListFindByKey(Source_16, Source); /*0xf9c3*/
if ( v6 ) /*0xf9cb*/
v7 = *(_QWORD *)(v6 + 136); /*0xf9cd*/
else
v7 = *(_QWORD *)(a1 + 8LL * *(unsigned __int8 *)(a1 + 48) + 56); /*0xf9da*/
RstCfgRaidDevCopy(v7, (__int64)Source, a3); /*0xf9e8*/
if ( !*(_WORD *)(a1 + 360) ) /*0xf9ed*/
return 0; /*0xf9ed*/
if ( !*(_BYTE *)(a1 + 362) ) /*0xf9fb*/
return 0; /*0xf9fb*/
v8 = Assert_86(Source_16, v7); /*0xfa17*/
if ( !v8 ) /*0xfa1d*/
return 0; /*0xfac1*/
Assert_132((__int64 *)v7); /*0xfa26*/
v9 = *(_QWORD *)(v8 + 144); /*0xfa2b*/
if ( RstDebugEnabled() && !*(_DWORD *)(v9 + 280) ) /*0xfa3c*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0xfa58*/
*(_DWORD *)(v8 + 104) = *(_DWORD *)(v9 + 280); /*0xfa63*/
if ( RstDebugEnabled() && !*(_DWORD *)(v8 + 104) ) /*0xfa70*/
DebugAssert("RaidCfgMgr.cpp", 0x252u, "raidDev->logBlockSize != ( 0 )"); /*0xfa89*/
RstConfigArrayGetMinWriteSize(v8); /*0xfa91*/
if ( (*(_DWORD *)(v7 + 48) & 0x20) == 0 && (unsigned int)RstConfigArrayGetMaxBlockSize(v7) != 3 ) /*0xfaaf*/
RstEntryBufferAllocSorted(a1, v8); /*0xfab7*/
return v7; /*0xfad7*/
}
// Function: Assert_28 @ 0xfae0 (0x14f bytes)
// Index: 407/906
__int64 __fastcall Assert_28(__int64 a1, __int64 a2, __int64 a3)
{
_BYTE *i_1; // rbp
__int64 v6; // rdi
unsigned int v7; // edi
_BYTE *i_2; // [rsp+20h] [rbp-78h]
_BYTE *i; // [rsp+30h] [rbp-68h] BYREF
char v11; // [rsp+38h] [rbp-60h]
__int16 v12; // [rsp+3Ah] [rbp-5Eh]
__int64 Source[10]; // [rsp+40h] [rbp-58h] BYREF
i = 0; /*0xfaf7*/
v11 = 0; /*0xfafc*/
v12 = 1; /*0xfb0f*/
RstBufferPoolRealloc((__int64)&i, 0); /*0xfb17*/
if ( RstDebugEnabled() && !i ) /*0xfb2b*/
DebugAssert("RaidCfgMgr.cpp", 0x3A7u, "sbuf.ptr()"); /*0xfb40*/
i_1 = i; /*0xfb45*/
if ( a2 ) /*0xfb4d*/
{
v6 = *(_QWORD *)(a2 + 144); /*0xfb4f*/
if ( RstDebugEnabled() && !*(_DWORD *)(v6 + 280) ) /*0xfb5f*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0xfb7b*/
v7 = *(_DWORD *)(v6 + 280); /*0xfb80*/
}
else
{
v7 = HiiLibReturnZero(a3); /*0xfb90*/
}
if ( RstDebugEnabled() && !v7 ) /*0xfb9d*/
DebugAssert("RaidCfgMgr.cpp", 0x3AAu, "nBlkSz != ( 0 )"); /*0xfbb2*/
MemZero(i_1, 0, v7); /*0xfbbf*/
RstConfigBlockZero((__int64)Source); /*0xfbc9*/
LODWORD(i_2) = (_DWORD)i_1; /*0xfbe7*/
RstConfigBlockInitFrom(Source_16, 42, 0, v7, i_2, Source); /*0xfbeb*/
if ( a2 ) /*0xfbf8*/
(**(void (__fastcall ***)(__int64, __int64 *))a2)(a2, Source); /*0xfc00*/
else
j_Assert_18(a3, (__int64)Source); /*0xfc07*/
return RstBufferPoolLock((__int64)i); /*0xfc2a*/
}
// Function: Assert_108 @ 0xfc30 (0x3a bytes)
// Index: 408/906
__int64 Assert_108__int64 a1, __int64 *a2)
{
__int64 v2; // rbx
__int64 result; // rax
v2 = *a2; /*0xfc3a*/
result = RstDeviceSetStatusBits(*a2); /*0xfc43*/
if ( byte_2794F == 1 ) /*0xfc4f*/
return Assert_28(a1, v2, 0); /*0xfc5a*/
return result; /*0xfc64*/
}
// Function: RstDeviceListInsertUnique @ 0xfc6c (0x53 bytes)
// Index: 409/906
__int64 *__fastcall RstDeviceListInsertUnique(__int64 i, __int64 Source)
{
__int64 *i_2; // rbx
__int64 *i_1; // rax
i_2 = RstLinkedListFindByName(i, (_BYTE *)Source); /*0xfc86*/
if ( !i_2 ) /*0xfc8c*/
{
i_1 = RstLinkedListInsertSorted(i, *(_DWORD *)(Source + 20)); /*0xfc94*/
i_2 = i_1; /*0xfc99*/
if ( i_1 ) /*0xfc9f*/
RstConfigArrayAddDevice((__int64)i_1, Source); /*0xfca7*/
}
return i_2; /*0xfcb9*/
}
// Function: Assert_76 @ 0xfcc0 (0x160 bytes)
// Index: 410/906
__int64 __fastcall Assert_76(__int64 a1, char a2)
{
bool v3; // cf
__int16 v4; // si
_QWORD *v5; // rax
_QWORD *v6; // rdi
int v8; // eax
__int64 v9; // rdx
__int64 *v10; // rdi
__int64 v11; // rsi
char n24; // al
__int64 v13; // rbp
*(_QWORD *)(a1 + 328) = 0; /*0xfcdf*/
byte_2794F = a2; /*0xfce6*/
v3 = *(_WORD *)a1 != 0; /*0xfcec*/
v4 = 0; /*0xfcf0*/
while ( v3 ) /*0xfcf4*/
{
v5 = RstLinkedListGetNth((_QWORD **)(a1 + 16), v4); /*0xfcfd*/
v6 = v5; /*0xfd02*/
if ( *((_WORD *)v5 + 28) ) /*0xfd05*/
{
if ( *((_BYTE *)v5 + 58) == 3 ) /*0xfd10*/
{
*(_QWORD *)(a1 + 328) = v5; /*0xfd12*/
}
else
{
RstDeviceClearFlags(v5[6], 64); /*0xfd24*/
RstDeviceSetFlags(v6[6], 0x20u); /*0xfd32*/
if ( byte_2794F && !v6[5] && !Assert_14(v6[6]) ) /*0xfd52*/
return 18; /*0xfd61*/
}
}
v3 = (unsigned __int16)++v4 < *(_WORD *)a1; /*0xfd57*/
}
v8 = Assert_10(a1); /*0xfd69*/
*(_DWORD *)(a1 + 320) = v8; /*0xfd6e*/
if ( !v8 ) /*0xfd77*/
{
v10 = *(__int64 **)(a1 + 8LL * *(unsigned __int8 *)(a1 + 48) + 48); /*0xfd81*/
v11 = *(_QWORD *)(v10[7] + 40); /*0xfd8a*/
if ( *(_WORD *)(v11 + 4) > 1u ) /*0xfd93*/
{
n24 = 24; /*0xfd95*/
if ( *(_BYTE *)(v11 + 6) <= 0x18u ) /*0xfd9d*/
n24 = *(_BYTE *)(v11 + 6); /*0xfd9f*/
if ( (unsigned __int8)n24 > 4u ) /*0xfda5*/
RstDeviceInitOperation(*(_QWORD *)(*v10 + 160), 0); /*0xfdb3*/
}
v13 = v10[1]; /*0xfdb8*/
LOBYTE(v9) = 1; /*0xfdbc*/
(***(void (__fastcall ****)(_QWORD, __int64))(v13 + 248))(*(_QWORD *)(v13 + 248), v9); /*0xfdc8*/
Assert_108(a1, v10); /*0xfdd0*/
if ( *((_DWORD *)v10 + 20) == 2 || *((_DWORD *)v10 + 20) == 4 ) /*0xfddf*/
Assert_38(v13); /*0xfde4*/
if ( *(_WORD *)(v11 + 4) == 5 ) /*0xfdee*/
Assert_114(*(_QWORD *)(*v10 + 160)); /*0xfdfa*/
}
return *(unsigned int *)(a1 + 320); /*0xfe19*/
}
// Function: Assert_87 @ 0xfe20 (0xb2 bytes)
// Index: 411/906
__int64 __fastcall Assert_87(__int64 a1, __int64 a2)
{
__int64 v2; // rsi
__int64 v5; // rbx
_BYTE *Source; // rax
v2 = *(_QWORD *)a2; /*0xfe38*/
v5 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)a2 + 160LL) + 16LL); /*0xfe48*/
if ( (*(_DWORD *)(a2 + 80) == 2 || *(_DWORD *)(a2 + 80) == 4) && (unsigned __int8)RstCfgRaidDevLookup(a2) != -1 ) /*0xfe64*/
{
Source = (_BYTE *)RstDeviceDerefPtr(*(_QWORD *)(a2 + 72)); /*0xfe6a*/
Assert_55(Source, a2); /*0xfe75*/
}
if ( (*(_WORD *)(v5 + 40) != 1 || *(_BYTE *)(v5 + 100) != *(_BYTE *)(v5 + 42)) && !RstVolCheckAllMembersReady(*(_QWORD *)(a2 + 8)) ) /*0xfe8d*/
Assert_28(a1, v2, 0); /*0xfe9f*/
Assert_119(Source_16, v2); /*0xfeae*/
RstDeviceListUpdateStatus(a1); /*0xfeb6*/
return 0; /*0xfecc*/
}
// Function: RstCountDecrement @ 0xfed4 (0x8 bytes)
// Index: 412/906
__int64 __fastcall RstCountDecrement(__int64 a1)
{
return *(_QWORD *)(a1 + 88) - 1LL; /*0xfedb*/
}
// Function: RstLinkedListNodeInit @ 0xfedc (0x1c bytes)
// Index: 413/906
__int64 __fastcall RstLinkedListNodeInit(__int64 a1)
{
__int64 result; // rax
result = RstBufferEntryInit(a1 + 112); /*0xfee9*/
*(_BYTE *)(a1 + 45) = 0; /*0xfeee*/
return result; /*0xfef2*/
}
// Function: RstDeviceSetExtFlag @ 0xfef8 (0x33 bytes)
// Index: 414/906
__int64 __fastcall RstDeviceSetExtFlag(__int64 a1, char a2)
{
__int64 v3; // rbx
__int64 result; // rax
v3 = a1; /*0xff0c*/
if ( (*(_BYTE *)(a1 + 136) & 0x10) != 0 ) /*0xff0f*/
{
LOBYTE(a1) = *(_BYTE *)(a1 + 96); /*0xff11*/
result = RstProtocolSetFlag(a1); /*0xff14*/
*(_BYTE *)(v3 + 200) = a2; /*0xff19*/
}
return result; /*0xff25*/
}
// Function: RstDeviceCompareEntries @ 0xff2c (0x131 bytes)
// Index: 415/906
bool __fastcall RstDeviceCompareEntries(__int64 a1, __int64 a2, char a3)
{
int n17_1; // ebx
_QWORD *v7; // rax
int v8; // eax
__int16 n17; // r11
__int64 v10; // rbx
n17_1 = (unsigned __int8)RstStringLastColonIndex((CHAR16 *)(a1 + 28)); /*0xff59*/
v7 = RstLinkedListFindData(*(_QWORD *)(Source_16 + 216), a2); /*0xff6a*/
if ( (__int16)n17_1 > 0 && (*(_DWORD *)(a2 + 136) & 0x10) != 0 && !RstDeviceIsActive((__int64)v7) ) /*0xff91*/
{
v8 = *(_DWORD *)(a2 + 136); /*0xff9b*/
if ( (((unsigned int)&loc_10041 + 2) & v8) == 0 || (v8 & 0x1000000) != 0 ) /*0xffad*/
{
n17 = StrLenA((_BYTE *)(a2 + 28)); /*0xffbc*/
if ( n17 <= 17 && n17_1 <= 17 ) /*0xffc5*/
{
do /*0xffea*/
{
if ( n17 > 0 ) /*0xffcb*/
{
--n17; /*0xffcd*/
LOWORD(n17_1) = n17_1 - 1; /*0xffd1*/
if ( *(_BYTE *)((__int16)n17_1 + a1 + 28) != *(_BYTE *)(n17 + a2 + 28) ) /*0xffe4*/
return 0; /*0xffe4*/
}
}
while ( (__int16)n17_1 > 0 ); /*0xffea*/
v10 = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), (_BYTE *)(a1 + 28))[5]; /*0x10003*/
if ( !v10 ) /*0x1000a*/
return a3 != 0; /*0x1000f*/
if ( a3 /*0x10052*/
|| (*(_DWORD *)(a2 + 136) & 4) == 0
|| RstArrayHasActiveMemberWrite(v10)
|| _bittest((const signed __int32 *)(*(_QWORD *)(v10 + 232) + 48LL), 0xAu) )
{
return 1; /*0x10059*/
}
}
}
}
return 0; /*0x10022*/
}
// Function: RstDeviceCopy @ 0x10060 (0x8b bytes)
// Index: 416/906
__int64 __fastcall RstDeviceCopy(__int64 a1, __int64 a2)
{
const __m128i *v2; // rax
__m128i v5; // xmm0
const CHAR16 *Source; // rdx
CHAR16 *Destination; // rcx
v2 = 0; /*0x1006a*/
if ( a2 ) /*0x10075*/
v2 = (const __m128i *)(a2 + 8); /*0x10077*/
v5 = _mm_loadu_si128(v2); /*0x1007b*/
Source = (const CHAR16 *)(a2 + 45); /*0x10086*/
*(_QWORD *)a1 = off_23BD8; /*0x1008a*/
Destination = (CHAR16 *)(a1 + 45); /*0x1008d*/
*(__m128i *)((char *)Destination - 37) = v5; /*0x10097*/
*(_DWORD *)((char *)Destination - 21) = *(_DWORD *)((char *)Source - 21); /*0x1009f*/
*(_QWORD *)((char *)Destination - 17) = *(_QWORD *)((char *)Source - 17); /*0x100a6*/
*(_QWORD *)((char *)Destination - 9) = *(_QWORD *)((char *)Source - 9); /*0x100ae*/
*((_BYTE *)Destination - 1) = *((_BYTE *)Source - 1); /*0x100b5*/
StrnCpy(Destination, Source, 0x29u); /*0x100b8*/
*(_QWORD *)(a1 + 88) = *(_QWORD *)(a2 + 88); /*0x100c1*/
*(_DWORD *)(a1 + 96) = *(_DWORD *)(a2 + 96); /*0x100c8*/
*(_DWORD *)(a1 + 100) = *(_DWORD *)(a2 + 100); /*0x100ce*/
*(_DWORD *)(a1 + 104) = *(_DWORD *)(a2 + 104); /*0x100d4*/
*(_DWORD *)(a1 + 108) = *(_DWORD *)(a2 + 108); /*0x100df*/
return a1; /*0x100e5*/
}
// Function: RstDevKeyCtxCopy @ 0x100ec (0x78 bytes)
// Index: 417/906
__int64 __fastcall RstDevKeyCtxCopy(__int64 a1, __int64 a2)
{
const __m128i *v2; // rax
_BYTE *v3; // r8
__int64 v4; // r10
__int64 n17; // r9
_BYTE *v6; // r8
__int64 n41; // r9
v2 = 0; /*0x100ec*/
if ( a2 ) /*0x100f1*/
v2 = (const __m128i *)(a2 + 8); /*0x100f3*/
v3 = (_BYTE *)(a1 + 28); /*0x100fe*/
v4 = a2 - a1; /*0x10102*/
n17 = 17; /*0x10105*/
*(__m128i *)(a1 + 8) = _mm_loadu_si128(v2); /*0x1010b*/
*(_DWORD *)(a1 + 24) = *(_DWORD *)(a2 + 24); /*0x10113*/
do /*0x10124*/
{
*v3 = v3[v4]; /*0x1011a*/
++v3; /*0x1011d*/
--n17; /*0x10120*/
}
while ( n17 ); /*0x10124*/
v6 = (_BYTE *)(a1 + 45); /*0x10126*/
n41 = 41; /*0x1012a*/
do /*0x1013e*/
{
*v6 = v6[v4]; /*0x10134*/
++v6; /*0x10137*/
--n41; /*0x1013a*/
}
while ( n41 ); /*0x1013e*/
*(_QWORD *)(a1 + 88) = *(_QWORD *)(a2 + 88); /*0x10144*/
*(_DWORD *)(a1 + 96) = *(_DWORD *)(a2 + 96); /*0x1014b*/
*(_DWORD *)(a1 + 100) = *(_DWORD *)(a2 + 100); /*0x10151*/
*(_DWORD *)(a1 + 104) = *(_DWORD *)(a2 + 104); /*0x10157*/
*(_DWORD *)(a1 + 108) = *(_DWORD *)(a2 + 108); /*0x1015d*/
return a1; /*0x10163*/
}
// Function: RstDeviceClearFlags @ 0x10164 (0x13 bytes)
// Index: 418/906
void __fastcall RstDeviceClearFlags(__int64 a1)
{
*(_DWORD *)(a1 + 136) = 0; /*0x10164*/
*(_BYTE *)(a1 + 28) = 0; /*0x1016b*/
*(_BYTE *)(a1 + 152) = 1; /*0x1016f*/
}
// Function: RstDeviceFlagsUpdate @ 0x10178 (0x57 bytes)
// Index: 419/906
__int64 __fastcall RstDeviceFlagsUpdate(__int64 a1)
{
int v1; // edx
__int64 v2; // rdx
__int64 result; // rax
v1 = *(_DWORD *)(a1 + 136); /*0x1017c*/
if ( (v1 & 0x1008D0) == 0x10 && *(__int16 *)(a1 + 116) <= 10 ) /*0x10199*/
v2 = v1 | 8u; /*0x1019b*/
else
v2 = v1 & 0xFFFFFFF7; /*0x101a0*/
*(_DWORD *)(a1 + 136) = v2; /*0x101a7*/
result = (unsigned int)v2; /*0x101ad*/
if ( (v2 & 0x1000000) != 0 ) /*0x101af*/
{
result = (unsigned int)v2 & 0xFFFFFFF7; /*0x101b1*/
*(_DWORD *)(a1 + 136) = result; /*0x101b4*/
}
if ( (*(_BYTE *)(a1 + 136) & 4) != 0 ) /*0x101c1*/
{
LOBYTE(v2) = 2; /*0x101c3*/
return RstDeviceSetExtFlag(a1, v2); /*0x101c5*/
}
return result; /*0x101ca*/
}
// Function: RstDeviceIncrementEvent @ 0x101d0 (0x25 bytes)
// Index: 420/906
__int64 __fastcall RstDeviceIncrementEvent(__int64 a1, __int64 Source, __int16 n3)
{
__int64 result; // rax
++*(_WORD *)(a1 + 114); /*0x101d4*/
*(_WORD *)(a1 + 120) = n3; /*0x101d8*/
*(_BYTE *)(a1 + 122) = Source; /*0x101dd*/
if ( n3 == 3 ) /*0x101e5*/
{
++*(_WORD *)(a1 + 116); /*0x101e7*/
return RstDeviceFlagsUpdate(a1); /*0x101eb*/
}
return result; /*0x101f0*/
}
// Function: j_Assert_18 @ 0x101f8 (0x5 bytes)
// Index: 421/906
// attributes: thunk
__int64 __fastcall j_Assert_18(__int64 a1, __int64 Source)
{
return Assert_18(a1, Source);
}
// Function: RstCountDecrementBy2 @ 0x10200 (0x9 bytes)
// Index: 422/906
__int64 __fastcall RstCountDecrementBy2(__int64 a1)
{
return *(_QWORD *)(a1 + 88) - 2LL; /*0x10208*/
}
// Function: RstDeviceCheckOnline @ 0x1020c (0x1d bytes)
// Index: 423/906
bool __fastcall RstDeviceCheckOnline(__int64 a1)
{
int v1; // eax
v1 = *(_DWORD *)(a1 + 136); /*0x1020c*/
if ( (v1 & 0x1000000) != 0 ) /*0x10216*/
return 0; /*0x10218*/
return (v1 & 8) == 0 || (v1 & 4) != 0; /*0x1021a*/
}
// Function: RstDeviceSetFlags @ 0x1022c (0x28 bytes)
// Index: 424/906
__int64 __fastcall RstDeviceSetFlags(__int64 a1, unsigned int a2)
{
__int64 result; // rax
result = a2 & *(_DWORD *)(a1 + 136); /*0x1023a*/
if ( (_DWORD)result != a2 ) /*0x1023e*/
{
*(_DWORD *)(a1 + 136) |= a2; /*0x10243*/
return RstDeviceFlagsUpdate(a1); /*0x1024a*/
}
return result; /*0x1024f*/
}
// Function: RstDeviceClearFlags @ 0x10254 (0x22 bytes)
// Index: 425/906
__int64 __fastcall RstDeviceClearFlags(__int64 a1, int a2)
{
__int64 result; // rax
result = *(unsigned int *)(a1 + 136); /*0x10258*/
if ( ((unsigned int)result & a2) != 0 ) /*0x10260*/
{
*(_DWORD *)(a1 + 136) = result & ~a2; /*0x10266*/
return RstDeviceFlagsUpdate(a1); /*0x1026c*/
}
return result; /*0x10271*/
}
// Function: RstDeviceUpdateFlagsMask @ 0x10278 (0x1b bytes)
// Index: 426/906
__int64 __fastcall RstDeviceUpdateFlagsMask(__int64 a1, int a2, unsigned int n513)
{
*(_DWORD *)(a1 + 136) = n513 & a2 | *(_DWORD *)(a1 + 136) & ~n513; /*0x10288*/
return RstDeviceFlagsUpdate(a1);
}
// Function: RstProtocolReadVariable @ 0x10294 (0xc bytes)
// Index: 427/906
__int64 __fastcall RstProtocolReadVariable(__int64 a1, const char *en)
{
return RstProtocolVariableRead(*(__int64 **)(a1 + 128), (__int64)en);
}
// Function: RstHiiGetString @ 0x102a0 (0x12 bytes)
// Index: 428/906
__int64 __fastcall RstHiiGetString(__int64 a1, __int64 a2, char *en)
{
return RstHiiProtocolGetString(a2, *(_QWORD *)(a1 + 128), en);
}
// Function: RstHelper_02b4 @ 0x102b4 (0xc bytes)
// Index: 429/906
char __fastcall RstHelper_02b4(__int64 a1, int n5)
{
return HiiLibStrToGuid(*(_QWORD *)(a1 + 128), n5);
}
// Function: RstHelper_02c0 @ 0x102c0 (0xc bytes)
// Index: 430/906
__int64 __fastcall RstHelper_02c0(__int64 a1)
{
return HiiLibGuidCmp(*(_QWORD *)(a1 + 128));
}
// Function: RstHelper_02cc @ 0x102cc (0xc bytes)
// Index: 431/906
__int64 __fastcall RstHelper_02cc(__int64 a1, int a2, __int64 *a3)
{
__int64 v4; // rbx
__int64 result; // rax
__int64 v6; // rcx
v6 = *(_QWORD *)(a1 + 128); /*0x102cc*/
if ( v6 ) /*0x41cb*/
{
v4 = v6; /*0x41da*/
if ( a2 ) /*0x41df*/
{
if ( a2 == 1 ) /*0x41e4*/
{
RstReturnInvalid(v6, 0); /*0x41e8*/
return (*(__int64 (__fastcall **)(__int64, __int64))(*(_QWORD *)v4 + 128LL))(v4, *a3); /*0x41f6*/
}
}
else
{
RstReturnInvalid(v6, *a3); /*0x4202*/
return (*(__int64 (__fastcall **)(__int64, __int64))(*(_QWORD *)v4 + 120LL))(v4, *a3); /*0x4210*/
}
}
return result; /*0x421e*/
}
// Function: RstDiskInit @ 0x102d8 (0x35 bytes)
// Index: 432/906
__int64 __fastcall RstDiskInit(__int64 a1)
{
RstBufferEntryInitPtr(a1 + 112); /*0x102e5*/
*(_QWORD *)(a1 + 16) = 0; /*0x102f3*/
*(_QWORD *)(a1 + 8) = 0; /*0x102f7*/
*(_QWORD *)a1 = &off_23BF0; /*0x102fb*/
*(_DWORD *)(a1 + 136) = 0; /*0x10301*/
return a1; /*0x10307*/
}
// Function: Assert_21 @ 0x10310 (0x1a0 bytes)
// Index: 433/906
__int64 __fastcall Assert_21(__int64 a1, _QWORD *NewContext, _BYTE *i, int a4)
{
__int64 v7; // rdx
__int64 v8; // rcx
unsigned int v9; // eax
int v10; // ecx
__int64 result; // rax
*(_DWORD *)(a1 + 136) |= a4; /*0x1031f*/
RstDeviceFlagsUpdate(a1); /*0x1032f*/
*(_BYTE *)(a1 + 200) = 0; /*0x10334*/
*(_BYTE *)(a1 + 201) = 0; /*0x1033b*/
*(_QWORD *)(a1 + 128) = NewContext; /*0x10342*/
*(_QWORD *)(a1 + 88) = *(_QWORD *)i; /*0x1035a*/
StrnCpy((CHAR16 *)(a1 + 45), (const CHAR16 *)i + 14, 0x29u); /*0x1035e*/
StrnCpy((CHAR16 *)(a1 + 28), (const CHAR16 *)(i + 69), 0x11u); /*0x10371*/
*(_DWORD *)(a1 + 104) = *((_DWORD *)i + 6); /*0x10379*/
if ( (unsigned __int8)RstDebugEnabled(v8, v7) && !*(_DWORD *)(a1 + 104) ) /*0x10385*/
DebugAssert("Disk.cpp", 0x5Bu, "logBlockSize != ( 0 )"); /*0x1039e*/
*(_DWORD *)(a1 + 96) = *((_DWORD *)i + 2); /*0x103a9*/
*(_DWORD *)(a1 + 164) = *((_DWORD *)i + 3); /*0x103af*/
*(_WORD *)(a1 + 168) = *((_WORD *)i + 8); /*0x103b9*/
*(_QWORD *)(a1 + 153) = *(_QWORD *)(i + 86); /*0x103c4*/
*(_DWORD *)(a1 + 100) = *((_DWORD *)i + 5) & 0x7FFFFFFF; /*0x103d2*/
v9 = HiiLibReturnZero(a1); /*0x103d5*/
v10 = *(_DWORD *)(a1 + 96); /*0x103f4*/
*(_QWORD *)(a1 + 144) = *(_QWORD *)(a1 + 88) - (((unsigned int)&loc_1FFFA + 6) / v9 + 161); /*0x103f7*/
*(_DWORD *)(a1 + 108) = 1 << v10; /*0x1040a*/
*(_WORD *)(a1 + 172) = *((_WORD *)i + 51); /*0x10411*/
*(_QWORD *)(a1 + 176) = *((_QWORD *)i + 13); /*0x1041c*/
*(_QWORD *)(a1 + 184) = *((_QWORD *)i + 14); /*0x10427*/
*(_QWORD *)(a1 + 192) = *((_QWORD *)i + 15); /*0x10432*/
if ( RstDeviceGetFeatureFlagBit(13) || *(_WORD *)(a1 + 172) == 0x8086 ) /*0x1044e*/
{
if ( !RstDeviceGetFeatureFlagBit(11) && (*(_BYTE *)(a1 + 136) & 1) != 0 /*0x10481*/
|| !RstDeviceGetFeatureFlagBit(12) && _bittest((const signed __int32 *)(a1 + 136), 0x19u) )
{
*(_DWORD *)(a1 + 136) = 65552; /*0x1048b*/
}
}
else
{
*(_DWORD *)(a1 + 136) = (_DWORD)&loc_18018; /*0x10450*/
}
result = *((unsigned __int16 *)i + 50); /*0x10495*/
*(_WORD *)(a1 + 170) = result; /*0x104a3*/
return result; /*0x104aa*/
}
// Function: RstDiskStateReset @ 0x104b0 (0x102 bytes)
// Index: 434/906
__int64 __fastcall RstDiskStateReset(__int64 a1, __int64 a2)
{
__int64 v3; // rdx
v3 = 0; /*0x104bd*/
if ( a2 ) /*0x104c5*/
v3 = a2 + 112; /*0x104c7*/
*(_QWORD *)(a1 + 112) = *(_QWORD *)v3; /*0x104ce*/
*(_DWORD *)(a1 + 120) = *(_DWORD *)(v3 + 8); /*0x104d8*/
RstDeviceCopy(a1, a2); /*0x104db*/
*(_QWORD *)a1 = &off_23BF0; /*0x104e7*/
*(_QWORD *)(a1 + 128) = *(_QWORD *)(a2 + 128); /*0x104f1*/
*(_DWORD *)(a1 + 136) = *(_DWORD *)(a2 + 136); /*0x104fe*/
*(_QWORD *)(a1 + 144) = *(_QWORD *)(a2 + 144); /*0x1050b*/
*(_BYTE *)(a1 + 152) = *(_BYTE *)(a2 + 152); /*0x10518*/
*(_QWORD *)(a1 + 153) = *(_QWORD *)(a2 + 153); /*0x10525*/
*(_DWORD *)(a1 + 164) = *(_DWORD *)(a2 + 164); /*0x10532*/
*(_WORD *)(a1 + 168) = *(_WORD *)(a2 + 168); /*0x1053f*/
*(_WORD *)(a1 + 170) = *(_WORD *)(a2 + 170); /*0x1054d*/
*(_WORD *)(a1 + 172) = *(_WORD *)(a2 + 172); /*0x1055b*/
*(_QWORD *)(a1 + 176) = *(_QWORD *)(a2 + 176); /*0x10569*/
*(_QWORD *)(a1 + 184) = *(_QWORD *)(a2 + 184); /*0x10577*/
*(_QWORD *)(a1 + 192) = *(_QWORD *)(a2 + 192); /*0x10585*/
*(_BYTE *)(a1 + 200) = *(_BYTE *)(a2 + 200); /*0x10592*/
*(_BYTE *)(a1 + 201) = *(_BYTE *)(a2 + 201); /*0x105a3*/
return a1; /*0x105ac*/
}
// Function: RstDiskCopyState @ 0x105b4 (0xf8 bytes)
// Index: 435/906
__int64 __fastcall RstDiskCopyState(__int64 a1, __int64 a2)
{
__int64 v3; // rdx
v3 = 0; /*0x105c1*/
if ( a2 ) /*0x105c9*/
v3 = a2 + 112; /*0x105cb*/
*(_QWORD *)(a1 + 112) = *(_QWORD *)v3; /*0x105d2*/
*(_DWORD *)(a1 + 120) = *(_DWORD *)(v3 + 8); /*0x105dc*/
RstDevKeyCtxCopy(a1, a2); /*0x105df*/
*(_QWORD *)(a1 + 128) = *(_QWORD *)(a2 + 128); /*0x105eb*/
*(_DWORD *)(a1 + 136) = *(_DWORD *)(a2 + 136); /*0x105f8*/
*(_QWORD *)(a1 + 144) = *(_QWORD *)(a2 + 144); /*0x10605*/
*(_BYTE *)(a1 + 152) = *(_BYTE *)(a2 + 152); /*0x10612*/
*(_QWORD *)(a1 + 153) = *(_QWORD *)(a2 + 153); /*0x1061f*/
*(_DWORD *)(a1 + 164) = *(_DWORD *)(a2 + 164); /*0x1062c*/
*(_WORD *)(a1 + 168) = *(_WORD *)(a2 + 168); /*0x10639*/
*(_WORD *)(a1 + 170) = *(_WORD *)(a2 + 170); /*0x10647*/
*(_WORD *)(a1 + 172) = *(_WORD *)(a2 + 172); /*0x10655*/
*(_QWORD *)(a1 + 176) = *(_QWORD *)(a2 + 176); /*0x10663*/
*(_QWORD *)(a1 + 184) = *(_QWORD *)(a2 + 184); /*0x10671*/
*(_QWORD *)(a1 + 192) = *(_QWORD *)(a2 + 192); /*0x1067f*/
*(_BYTE *)(a1 + 200) = *(_BYTE *)(a2 + 200); /*0x1068c*/
*(_BYTE *)(a1 + 201) = *(_BYTE *)(a2 + 201); /*0x1069d*/
return a1; /*0x106a6*/
}
// Function: RstDiskSetFlagBit2 @ 0x106ac (0x1f bytes)
// Index: 436/906
__int64 __fastcall RstDiskSetFlagBit2(__int64 a1, char a2)
{
if ( a2 ) /*0x106b0*/
{
*(_DWORD *)(a1 + 136) |= 4u; /*0x106b2*/
}
else
{
*(_DWORD *)(a1 + 136) &= ~4u; /*0x106bb*/
*(_WORD *)(a1 + 116) = 0; /*0x106c2*/
}
return RstDeviceFlagsUpdate(a1);
}
// Function: Assert_14 @ 0x106cc (0x1cf bytes)
// Index: 437/906
char __fastcall Assert_14(__int64 a1)
{
char v1; // bl
_BYTE *i_1; // rbp
unsigned int v4; // eax
int v5; // eax
__int64 v6; // rsi
int v7; // eax
unsigned __int64 n0x21; // rax
__int64 v9; // rsi
int v10; // eax
_BYTE *i; // [rsp+30h] [rbp-68h] BYREF
char v13; // [rsp+38h] [rbp-60h]
__int16 v14; // [rsp+3Ah] [rbp-5Eh]
_BYTE Source[80]; // [rsp+40h] [rbp-58h] BYREF
v1 = 0; /*0x106e8*/
i = 0; /*0x106f7*/
v14 = 1; /*0x106fb*/
v13 = 0; /*0x10700*/
RstBufferPoolRealloc((__int64)&i, 0); /*0x10703*/
if ( RstDebugEnabled() && !i ) /*0x10716*/
DebugAssert("Disk.cpp", 0x166u, "sbuf.ptr()"); /*0x1072b*/
i_1 = i; /*0x10730*/
if ( RstDebugEnabled() ) /*0x10735*/
{
if ( (unsigned int)HiiLibReturnZero(a1) >= 0x2000 ) /*0x1074b*/
DebugAssert("Disk.cpp", 0x168u, "getBlockSize() < ( 8 << 10 )"); /*0x10760*/
}
v4 = HiiLibReturnZero(a1); /*0x10768*/
MemZero(i_1, 0, v4); /*0x10775*/
RstConfigBlockZero((__int64)Source); /*0x1077f*/
v5 = HiiLibReturnZero(a1); /*0x10787*/
RstConfigBlockInit((__int64)Source, a1, 42, 0, v5, (unsigned int)i_1); /*0x107a2*/
Assert_18(a1, (__int64)Source); /*0x107af*/
if ( !Source[0] ) /*0x107b8*/
{
v6 = 1; /*0x107be*/
while ( 1 ) /*0x107c6*/
{
RstConfigBlockZero((__int64)Source); /*0x107c6*/
v7 = HiiLibReturnZero(a1); /*0x107ce*/
RstConfigBlockInit((__int64)Source, a1, 42, v6, v7, (unsigned int)i_1); /*0x107e9*/
Assert_18(a1, (__int64)Source); /*0x107f6*/
if ( Source[0] ) /*0x107ff*/
break; /*0x107ff*/
if ( (unsigned __int64)++v6 >= 0x22 ) /*0x10808*/
{
n0x21 = *(_QWORD *)(a1 + 88); /*0x1080a*/
v9 = n0x21 - 33; /*0x1080e*/
if ( n0x21 < 0x21 ) /*0x10815*/
{
LABEL_14:
v1 = 1; /*0x10860*/
}
else
{
while ( 1 ) /*0x1081c*/
{
RstConfigBlockZero((__int64)Source); /*0x1081c*/
v10 = HiiLibReturnZero(a1); /*0x10824*/
RstConfigBlockInit((__int64)Source, a1, 42, v9, v10, (unsigned int)i_1); /*0x1083f*/
Assert_18(a1, (__int64)Source); /*0x1084c*/
if ( Source[0] ) /*0x10855*/
break; /*0x10855*/
if ( (unsigned __int64)++v9 >= *(_QWORD *)(a1 + 88) ) /*0x1085e*/
goto LABEL_14; /*0x1085e*/
}
}
RstBufferPoolLock((__int64)i); /*0x10868*/
return v1; /*0x1086f*/
}
}
}
RstBufferPoolLock((__int64)i); /*0x10876*/
return 0; /*0x10895*/
}
// Function: RstDiskSwapState @ 0x1089c (0x49 bytes)
// Index: 438/906
__int64 __fastcall RstDiskSwapState(__int64 a1, __int64 a2)
{
_BYTE v5[216]; // [rsp+20h] [rbp-D8h] BYREF
RstDiskStateReset((__int64)v5, a1); /*0x108b7*/
RstDiskCopyState(a1, a2); /*0x108c2*/
return RstDiskCopyState(a2, (__int64)v5); /*0x108dc*/
}
// Function: RstDeviceAddAndJournal @ 0x108e8 (0xcc bytes)
// Index: 439/906
CHAR16 *__fastcall RstDeviceAddAndJournal(__int64 a1, __int64 a2)
{
_WORD *v4; // rsi
int v5; // eax
int v6; // ecx
__int64 *v7; // r13
__int64 *v8; // r12
v4 = *(_WORD **)(Source_16 + 216); /*0x1090d*/
v5 = *(_DWORD *)(a1 + 136); /*0x10914*/
if ( (v5 & 4) != 0 ) /*0x1091c*/
{
*(_DWORD *)(a1 + 136) = v5 & 0xFFFFFFFB; /*0x10921*/
RstDeviceFlagsUpdate(a1); /*0x10927*/
}
v6 = *(_DWORD *)(a1 + 136) | 0x100; /*0x10938*/
if ( (v6 & *(_DWORD *)(a2 + 136)) != v6 ) /*0x10942*/
{
*(_DWORD *)(a2 + 136) |= v6; /*0x10949*/
RstDeviceFlagsUpdate(a2); /*0x1094f*/
}
v7 = RstLinkedListFindByName((__int64)v4, (_BYTE *)(a1 + 28)); /*0x10967*/
v8 = RstLinkedListFindByName((__int64)v4, (_BYTE *)(a2 + 28)); /*0x10975*/
RstDiskSwapState(a2, a1); /*0x10978*/
if ( v8 ) /*0x10980*/
RstConfigBlockRemoveEntry(v4, (__int64)v8); /*0x10988*/
return RstJournalEntryInit((__int64)v7, (const CHAR16 *)(a1 + 28), a1); /*0x109a6*/
}
// Function: RstBufferPoolGetBuffer @ 0x109b4 (0x46 bytes)
// Index: 440/906
__int64 __fastcall RstBufferPoolGetBuffer(_QWORD *a1, int a2)
{
__int64 v4; // rax
__int64 result; // rax
v4 = RstLinkedListPop(*a1); /*0x109c6*/
if ( v4 ) /*0x109ce*/
{
dword_35460 = a2; /*0x109d0*/
result = v4 + 16; /*0x109d6*/
a1[2] = 1360; /*0x109da*/
a1[1] = result; /*0x109e2*/
}
else
{
a1[2] = 0; /*0x109e8*/
return 0; /*0x109ed*/
}
return result; /*0x109f4*/
}
// Function: RstConfigBlockResetCount @ 0x109fc (0x8 bytes)
// Index: 441/906
void RstConfigBlockResetCount()
{
dword_35460 = 0; /*0x109fc*/
}
// Function: RstLinkedListInsertAt @ 0x10a04 (0xc bytes)
// Index: 442/906
__int64 __fastcall RstLinkedListInsertAt(__int64 **a1, __int64 a2, __int64 a3)
{
return RstLinkedListInsert(*a1, (__int64 *)(a3 - 16));
}
// Function: RstMemPoolAlloc @ 0x10a10 (0x58 bytes)
// Index: 443/906
__int64 __fastcall RstMemPoolAlloc(__int64 a1)
{
__int64 i; // r8
unsigned __int64 i_1; // rcx
__int64 v4; // rdx
i = 0; /*0x10a16*/
if ( dword_35460 == 1 ) /*0x10a1f*/
{
v4 = *(_QWORD *)(Source_16 + 200); /*0x10a4e*/
i = *(_QWORD *)(v4 + 8); /*0x10a55*/
*(_QWORD *)(v4 + 16) -= a1; /*0x10a5c*/
*(_QWORD *)(v4 + 8) = i + a1; /*0x10a60*/
}
else
{
i_1 = i_1 + a1; /*0x10a28*/
if ( i_1 < i_2 ) /*0x10a32*/
{
qword_35478 += a1; /*0x10a34*/
i = i_1; /*0x10a3b*/
i_1 = i_1; /*0x10a3e*/
}
}
return i; /*0x10a67*/
}
// Function: RstInitArray @ 0x10a68 (0x82 bytes)
// Index: 444/906
__int64 **__fastcall RstInitArray(__int64 **a1)
{
__int64 *v2; // rax
__int64 n24; // rdi
__int64 *v4; // rax
qword_35478 = 0; /*0x10a72*/
qword_35470 = 0; /*0x10a7a*/
dword_35460 = 0; /*0x10a82*/
v2 = (__int64 *)RstMemPoolAlloc(8); /*0x10a91*/
if ( v2 ) /*0x10a99*/
*v2 = 0; /*0x10a9b*/
else
v2 = 0; /*0x10aa1*/
*a1 = v2; /*0x10aa3*/
n24 = 24; /*0x10aa6*/
do /*0x10ad6*/
{
v4 = (__int64 *)RstMemPoolAlloc(1376); /*0x10ab0*/
if ( v4 ) /*0x10ab8*/
{
v4[1] = 0; /*0x10aba*/
*v4 = 0; /*0x10abf*/
}
else
{
v4 = 0; /*0x10ac5*/
}
RstLinkedListInsert(*a1, v4); /*0x10acd*/
--n24; /*0x10ad2*/
}
while ( n24 ); /*0x10ad6*/
a1[2] = 0; /*0x10ad8*/
return a1; /*0x10ae4*/
}
// Function: RstConfigBlockZero @ 0x10aec (0x11 bytes)
// Index: 445/906
__int64 __fastcall RstConfigBlockZero(__int64 a1)
{
*(_QWORD *)(a1 + 40) = 0; /*0x10aee*/
*(_QWORD *)(a1 + 32) = 0; /*0x10af2*/
*(_BYTE *)(a1 + 72) = 0; /*0x10af6*/
return a1; /*0x10afc*/
}
// Function: RstHelper_0b00 @ 0x10b00 (0x182 bytes)
// Index: 446/906
char RstHelper_0b00__int64 Source, __int64 a2)
{
char v4; // bl
unsigned __int8 v5; // r13
__int64 v6; // rdi
unsigned __int8 v8; // si
unsigned __int8 v9; // si
_DWORD *v10; // rax
_DWORD *v11; // rdi
bool v12; // cf
unsigned __int16 i; // si
unsigned __int64 v14; // rbp
v4 = 0; /*0x10b30*/
v5 = -1; /*0x10b32*/
v6 = *(_QWORD *)(*(_QWORD *)(Source_16 + 208) + 8LL); /*0x10b35*/
if ( !RstDeviceListFindByDevice(Source_16, a2) ) /*0x10b39*/
return 0; /*0x10b44*/
v8 = 0; /*0x10b49*/
if ( *(_BYTE *)(v6 + 56) ) /*0x10b52*/
{
while ( StrnCpy16((_BYTE *)(v6 + 48LL * v8 + 216), (_BYTE *)(a2 + 28), 16) ) /*0x10b7d*/
{
if ( ++v8 >= *(_BYTE *)(v6 + 56) ) /*0x10b86*/
goto LABEL_6; /*0x10b86*/
}
}
else
{
LABEL_6:
RstHelper_89a4(*(_QWORD *)(Source_16 + 208), a2); /*0x10b88*/
}
if ( *(_DWORD *)(v6 + 72) ) /*0x10b9e*/
{
v9 = 0; /*0x10ba7*/
if ( *(_BYTE *)(v6 + 56) ) /*0x10baa*/
{
while ( a2 == -28 || StrnCpy16((_BYTE *)(a2 + 28), (_BYTE *)(v6 + 48LL * v9 + 216), 16) ) /*0x10bdd*/
{
if ( ++v9 >= *(_BYTE *)(v6 + 56) ) /*0x10be6*/
goto LABEL_14; /*0x10be6*/
}
v5 = v9; /*0x10bea*/
}
LABEL_14:
v10 = RstRaidSuperblockFind(v6); /*0x10bed*/
v11 = v10; /*0x10bf5*/
if ( !v10 ) /*0x10bfb*/
return 0; /*0x10bfb*/
v12 = *((_WORD *)v10 + 2) != 0; /*0x10c01*/
for ( i = 0; v12 && BYTE1(v11[2 * i + 2]) <= v5; v12 = i < *((_WORD *)v11 + 2) ) /*0x10c05*/
{
if ( BYTE1(v11[2 * i + 2]) == v5 ) /*0x10c14*/
{
v14 = *(unsigned int *)((char *)&v11[2 * i + 2] + 2) + ((unsigned __int64)HIWORD(v11[2 * i + 3]) << 32); /*0x10c23*/
if ( v14 + LOBYTE(v11[2 * i + 2]) >= *(_QWORD *)(Source + 8) /*0x10c54*/
&& *(_QWORD *)(Source + 8)
+ (unsigned __int64)(*(_DWORD *)(Source + 16) / (unsigned int)HiiLibReturnZero(a2) - 1) >= v14 )
{
return 1; /*0x10c60*/
}
}
++i; /*0x10c56*/
}
}
return v4; /*0x10c74*/
}
// Function: RstConfigBlockInit @ 0x10c84 (0x1f bytes)
// Index: 447/906
__int64 __fastcall RstConfigBlockInit(__int64 a1, __int64 a2, char a3, __int64 a4, int a5, unsigned int a6)
{
*(_BYTE *)(a1 + 24) = a3; /*0x10c88*/
*(_QWORD *)(a1 + 64) = a4; /*0x10c8c*/
*(_DWORD *)(a1 + 16) = a5; /*0x10c90*/
*(_QWORD *)(a1 + 8) = a4; /*0x10c97*/
*(_DWORD *)(a1 + 20) = a6; /*0x10c9b*/
*(_QWORD *)(a1 + 48) = a2; /*0x10c9e*/
return a6; /*0x10ca2*/
}
// Function: RstConfigBufferSetSize @ 0x10ca4 (0x44 bytes)
// Index: 448/906
__int64 __fastcall RstConfigBufferSetSize(_BYTE *Source)
{
__int64 Source_1; // rdx
__int16 v2; // r8
__int64 result; // rax
Source_1 = Source_16; /*0x10cab*/
v2 = *((_WORD *)Source + 1); /*0x10cb2*/
*(_WORD *)(Source_16 + 2720) = *(_WORD *)Source; /*0x10cb7*/
result = 0; /*0x10cbe*/
*(_WORD *)(Source_1 + 2722) = v2; /*0x10cc0*/
if ( *((_QWORD *)Source + 6) ) /*0x10cc8*/
{
if ( *(_WORD *)Source ) /*0x10cce*/
{
LOBYTE(Source_1) = *Source; /*0x10cd8*/
return RstDeviceIncrementEvent(*((_QWORD *)Source + 6), Source_1, *((_WORD *)Source + 1)); /*0x10cde*/
}
}
return result; /*0x10ce3*/
}
// Function: Assert_88 @ 0x10ce8 (0xa4 bytes)
// Index: 449/906
__int64 __fastcall Assert_88(__int64 Source, __int64 n23)
{
__int64 v3; // rcx
__int64 v4; // rax
__int64 v5; // rdi
__int64 n3; // rax
v3 = *(_QWORD *)(Source + 48); /*0x10cf5*/
v4 = *(_QWORD *)(Source + 56); /*0x10cf9*/
v5 = *(_QWORD *)v3; /*0x10cfd*/
*(_BYTE *)(Source + 24) = n23; /*0x10d00*/
*(_QWORD *)(Source + 8) = *(_QWORD *)(Source + 64) /*0x10d13*/
+ *(_QWORD *)(*(_QWORD *)(v4 + 32) + 48LL)
+ *(_QWORD *)(*(_QWORD *)(v4 + 32) + 56LL);
if ( (*(_BYTE *)(v3 + 8) || RstDeviceCheckOnline(*(_QWORD *)v3)) /*0x10d43*/
&& (*(_WORD *)(*(_QWORD *)(*(_QWORD *)(Source + 56) + 40LL) + 40LL) || (*(_DWORD *)(v5 + 136) & 8) == 0) )
{
*(_WORD *)Source = 5; /*0x10d75*/
n3 = 3; /*0x10d78*/
}
else
{
if ( !RstHelper_0b00(Source, v5) ) /*0x10d52*/
return j_Assert_18(v5, Source); /*0x10d6e*/
*(_WORD *)Source = 5; /*0x10d59*/
n3 = 2; /*0x10d5c*/
}
*(_WORD *)(Source + 2) = n3; /*0x10d7d*/
return n3; /*0x10d86*/
}
// Function: RstListNodeInit @ 0x10d8c (0x1c bytes)
// Index: 450/906
_QWORD *__fastcall RstListNodeInit(_QWORD *a1)
{
a1[1] = 0; /*0x10d8e*/
*a1 = 0; /*0x10d92*/
a1[13] = 0; /*0x10d95*/
a1[12] = 0; /*0x10d99*/
a1[16] = a1; /*0x10d9d*/
return a1; /*0x10da7*/
}
// Function: Assert_5 @ 0x10da8 (0x26a bytes)
// Index: 451/906
__int64 __fastcall Assert_5(
__int64 a1,
__int64 a2,
unsigned int i,
__int64 a4,
int n0x2000,
unsigned __int8 n0xFF,
unsigned __int8 a7,
unsigned __int8 n0xFFa,
__int16 n2)
{
unsigned __int8 n0xFFa_1; // dl
unsigned __int8 n0xFF_1; // cl
__int16 v15; // r8
char v16; // r12
__int64 v17; // r9
unsigned int i_1; // eax
__int16 n2_1; // cx
__int16 n2_2; // ax
unsigned int *p_i; // rax
__int16 v22; // cx
__int64 i_2; // [rsp+40h] [rbp-38h] BYREF
char v25; // [rsp+48h] [rbp-30h]
__int16 n16; // [rsp+4Ah] [rbp-2Eh]
unsigned int ia; // [rsp+80h] [rbp+8h] BYREF
unsigned int i_4; // [rsp+84h] [rbp+Ch] BYREF
i_2 = 0; /*0x10dcc*/
v25 = 0; /*0x10dd0*/
n16 = 16; /*0x10ddd*/
RstBufferPoolRealloc((__int64)&i_2, 0); /*0x10de5*/
if ( RstDebugEnabled() && !i_2 ) /*0x10df9*/
DebugAssert("RaidDgReq.cpp", 0x5Bu, "oromBuff2.ptr()"); /*0x10e0d*/
n0xFFa_1 = n0xFFa; /*0x10e12*/
n0xFF_1 = n0xFF; /*0x10e1a*/
v15 = a7; /*0x10e21*/
*(_BYTE *)(a1 + 67) = 0; /*0x10e2a*/
*(_QWORD *)(a1 + 40) = *(_QWORD *)(a2 + 40); /*0x10e38*/
v16 = 1; /*0x10e3f*/
*(_BYTE *)(a1 + 68) = *(_BYTE *)(a2 + 68); /*0x10e42*/
v17 = *(_QWORD *)(a2 + 32); /*0x10e45*/
*(_DWORD *)(a1 + 392) = n0x2000; /*0x10e50*/
i_1 = i_2; /*0x10e56*/
*(_QWORD *)(a1 + 32) = v17; /*0x10e5a*/
i_4 = i_1; /*0x10e5e*/
*(_QWORD *)(a1 + 384) = a4; /*0x10e65*/
*(_BYTE *)(a1 + 400) = n0xFFa_1; /*0x10e6c*/
*(_BYTE *)(a1 + 401) = n0xFF_1; /*0x10e74*/
*(_BYTE *)(a1 + 66) = 0; /*0x10e7a*/
*(_WORD *)(a1 + 64) = 0; /*0x10e7e*/
*(_WORD *)(a1 + 398) = 2; /*0x10e83*/
ia = i; /*0x10e8b*/
*(_WORD *)(a1 + 396) = v15; /*0x10e92*/
if ( n0xFFa_1 < n0xFF_1 ) /*0x10ea1*/
n0xFFa_1 += *(_BYTE *)(v17 + 42); /*0x10ea3*/
if ( n0xFFa_1 < a7 + n0xFF_1 ) /*0x10eb9*/
*(_WORD *)(a1 + 396) = v15 - 1; /*0x10ebf*/
if ( *(__int16 *)(a1 + 396) <= 2 ) /*0x10ed2*/
n2_1 = *(_WORD *)(a1 + 396); /*0x10ed9*/
else
n2_1 = 2; /*0x10ed4*/
n2_2 = n2; /*0x10edc*/
*(_WORD *)(a1 + 402) = n2_1; /*0x10ee4*/
if ( n2_2 < n2_1 ) /*0x10eee*/
n2_2 = n2_1; /*0x10eee*/
*(_WORD *)(a1 + 398) = n2_2; /*0x10ef2*/
while ( *(__int16 *)(a1 + 396) > 0 ) /*0x10fc8*/
{
p_i = &ia; /*0x10f0e*/
if ( !v16 ) /*0x10f22*/
p_i = &i_4; /*0x10f22*/
Assert_117( /*0x10f4f*/
a1 + 96,
40,
(_BYTE *)(a1 + 401),
*(_WORD *)(a1 + 402),
*(_BYTE *)(a1 + 400),
*(_QWORD *)(a1 + 384),
*(_DWORD *)(a1 + 392),
p_i);
if ( *(_WORD *)(a1 + 170) ) /*0x10f54*/
{
if ( *(_WORD *)(*(_QWORD *)(a1 + 112) + 2LL) == 2 ) /*0x10fd9*/
*(_WORD *)(a1 + 64) = 2; /*0x10fe6*/
else
*(_WORD *)(a1 + 64) = 7; /*0x10fe0*/
*(_BYTE *)(a1 + 66) = 6; /*0x10feb*/
return RstBufferPoolLock(i_2); /*0x10feb*/
}
if ( *(__int16 *)(a1 + 402) > 1 || !v16 ) /*0x10f6b*/
RstBufferXor(*(_DWORD *)(a1 + 392), (_BYTE *)i_4, ia, (_BYTE *)ia); /*0x10f85*/
*(_WORD *)(a1 + 396) -= *(_WORD *)(a1 + 402); /*0x10f91*/
v22 = *(_WORD *)(a1 + 396); /*0x10f98*/
if ( v22 > 0 ) /*0x10fa3*/
{
if ( *(__int16 *)(a1 + 398) - 1 < v22 ) /*0x10fb3*/
v22 = *(_WORD *)(a1 + 398) - 1; /*0x10fb3*/
*(_WORD *)(a1 + 402) = v22; /*0x10fb6*/
}
v16 = 0; /*0x10fbd*/
}
return RstBufferPoolLock(i_2); /*0x11006*/
}
// Function: Assert_20 @ 0x11014 (0x1a3 bytes)
// Index: 452/906
__int64 __fastcall Assert_20(__int64 a1, __int64 a2)
{
char v3; // al
__int64 v4; // rcx
char n0xFF_3; // r11
char n0xFF_2; // r8
int v8; // ecx
int i_2; // eax
__int64 i_3; // r9
__int64 n0xFF; // [rsp+28h] [rbp-50h]
_BYTE *i; // [rsp+50h] [rbp-28h] BYREF
char v14; // [rsp+58h] [rbp-20h]
__int16 n16; // [rsp+5Ah] [rbp-1Eh]
unsigned __int8 n0xFF_1; // [rsp+80h] [rbp+8h] BYREF
char n0xFF_4; // [rsp+88h] [rbp+10h] BYREF
__int64 i_1; // [rsp+90h] [rbp+18h] BYREF
__int64 i_4; // [rsp+98h] [rbp+20h] BYREF
i = 0; /*0x1101d*/
n16 = 16; /*0x1102a*/
v3 = *(_BYTE *)(a2 + 68); /*0x1102f*/
v14 = 0; /*0x11032*/
*(_BYTE *)(a1 + 404) = v3; /*0x11037*/
v4 = *(_QWORD *)(a2 + 32); /*0x1103d*/
*(_QWORD *)(a1 + 408) = a2; /*0x11041*/
*(_QWORD *)(a1 + 32) = v4; /*0x11048*/
RstVtableDispatch34(v4, 0, *(_QWORD *)(a2 + 704), (__int64)&n0xFF_4, (__int64)&i_1); /*0x11064*/
(*(void (__fastcall **)(_QWORD, _QWORD, unsigned __int8 *, __int64 *))(**(_QWORD **)(a1 + 32) + 32LL))( /*0x1108e*/
*(_QWORD *)(a1 + 32),
*(_QWORD *)(*(_QWORD *)(a1 + 408) + 704LL),
&n0xFF_1,
&i_4);
n0xFF_3 = *(_BYTE *)(a1 + 404); /*0x11091*/
n0xFF_2 = n0xFF_4; /*0x11098*/
if ( n0xFF_4 == n0xFF_3 ) /*0x110a3*/
{
RstBufferPoolRealloc((__int64)&i, 0); /*0x110b0*/
if ( RstDebugEnabled() && !i ) /*0x110c4*/
DebugAssert("RaidDgReq.cpp", 0xD8u, "oromBuff1.ptr()"); /*0x110d9*/
v8 = *(unsigned __int8 *)(*(_QWORD *)(a1 + 32) + 42LL); /*0x110e8*/
Assert_5( /*0x11137*/
a1,
a1,
(unsigned int)i,
i_1,
*(_DWORD *)(a1 + 392),
((unsigned __int8)n0xFF_4 + 1) % v8,
v8 - 1,
n0xFF_1,
1);
RstBufferXor(*(_DWORD *)(a1 + 392), (_BYTE *)*(unsigned int *)(a2 + 716), (__int64)i, i); /*0x11150*/
i_2 = (int)i; /*0x11155*/
i_3 = i_4; /*0x11159*/
n0xFF_2 = n0xFF_1; /*0x11161*/
}
else
{
if ( n0xFF_1 != n0xFF_3 ) /*0x11173*/
{
RstHelper_197c(a2); /*0x111a1*/
return RstBufferPoolLock((__int64)i); /*0x111a1*/
}
i_2 = *(_DWORD *)(a2 + 716); /*0x11175*/
i_3 = i_1; /*0x1117b*/
}
LODWORD(n0xFF) = i_2; /*0x11183*/
Assert_139(a1 + 96, 42, n0xFF_2, i_3, *(_DWORD *)(a1 + 392), n0xFF); /*0x11197*/
return RstBufferPoolLock((__int64)i); /*0x111b0*/
}
// Function: RstTransferBlockSizeInit @ 0x111b8 (0x61 bytes)
// Index: 453/906
__int64 __fastcall RstTransferBlockSizeInit(__int64 a1, unsigned int n0x2000)
{
__int64 v2; // rax
int v3; // r8d
__int64 n0x2000_1; // rax
if ( !*(_DWORD *)(a1 + 672) ) /*0x111b8*/
{
v2 = *(_QWORD *)(a1 + 704); /*0x111c1*/
v3 = *(_DWORD *)(a1 + 712); /*0x111c8*/
*(_DWORD *)(a1 + 672) = 1; /*0x111cf*/
*(_QWORD *)(a1 + 680) = v2; /*0x111d9*/
LODWORD(v2) = *(_DWORD *)(a1 + 716); /*0x111e0*/
*(_DWORD *)(a1 + 716) = 0; /*0x111e6*/
*(_DWORD *)(a1 + 692) = v2; /*0x111ed*/
*(_DWORD *)(a1 + 676) = v3; /*0x111f3*/
*(_DWORD *)(a1 + 696) = v3; /*0x111fa*/
}
n0x2000_1 = *(unsigned int *)(a1 + 676); /*0x11201*/
if ( n0x2000 < (unsigned int)n0x2000_1 ) /*0x11209*/
n0x2000_1 = n0x2000; /*0x11209*/
*(_DWORD *)(a1 + 688) = n0x2000_1; /*0x1120c*/
*(_DWORD *)(a1 + 712) = n0x2000_1; /*0x11212*/
return n0x2000_1; /*0x11218*/
}
// Function: RstIoCompleteTransfer @ 0x1121c (0x80 bytes)
// Index: 454/906
void __fastcall RstIoCompleteTransfer(__int64 a1)
{
int v2; // eax
bool v3; // zf
__int64 v4; // rax
if ( *(_DWORD *)(a1 + 672) ) /*0x11222*/
{
v2 = *(_DWORD *)(a1 + 688); /*0x1122e*/
v3 = *(_DWORD *)(a1 + 676) == v2; /*0x11234*/
*(_DWORD *)(a1 + 676) -= v2; /*0x11234*/
if ( v3 || *(_BYTE *)(a1 + 66) ) /*0x1123c*/
{
*(_DWORD *)(a1 + 672) = 0; /*0x1128f*/
}
else
{
*(_BYTE *)(a1 + 67) = 0; /*0x11242*/
*(_QWORD *)(a1 + 680) += *(_DWORD *)(a1 + 688) / (unsigned int)RstHelper_525c(*(_QWORD *)(a1 + 32)); /*0x1125f*/
v4 = *(_QWORD *)(a1 + 680); /*0x11266*/
*(_DWORD *)(a1 + 716) = 0; /*0x1126d*/
*(_QWORD *)(a1 + 704) = v4; /*0x11274*/
LODWORD(v4) = *(_DWORD *)(a1 + 676); /*0x1127b*/
*(_DWORD *)(a1 + 688) = v4; /*0x11281*/
*(_DWORD *)(a1 + 712) = v4; /*0x11287*/
}
}
}
// Function: RstRaidStatusDetermine @ 0x1129c (0x56 bytes)
// Index: 455/906
__int64 __fastcall RstRaidStatusDetermine(__int64 a1)
{
__int64 n7; // rax
n7 = 0; /*0x112a0*/
if ( !*(_BYTE *)(a1 + 67) ) /*0x112a5*/
{
*(_BYTE *)(a1 + 66) = 0; /*0x112aa*/
LABEL_5:
*(_WORD *)(a1 + 64) = n7; /*0x112c2*/
return n7; /*0x112c6*/
}
if ( *(_DWORD *)(*(_QWORD *)(a1 + 32) + 8LL) == 3 ) /*0x112b7*/
{
*(_BYTE *)(a1 + 66) = 6; /*0x112b9*/
n7 = 7; /*0x112bd*/
goto LABEL_5; /*0x112bd*/
}
n7 = 2; /*0x112d0*/
if ( *(_WORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 40) + 16LL) + 2LL) != 2 ) /*0x112d9*/
return RstRaidOpDispatch(a1, a1); /*0x112e8*/
*(_BYTE *)(a1 + 66) = 5; /*0x112db*/
*(_WORD *)(a1 + 64) = 2; /*0x112df*/
return n7; /*0x112ed*/
}
// Function: RstRaidEntryFinalizeTransfer @ 0x112f4 (0xae bytes)
// Index: 456/906
__int64 __fastcall RstRaidEntryFinalizeTransfer(__int64 a1)
{
__int64 result; // rax
Assert_120(a1 + 96, 42, 0, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), *(_DWORD *)(a1 + 716), 255); /*0x1132a*/
result = Assert_120(a1 + 384, 42, 1, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), *(_DWORD *)(a1 + 716), 255); /*0x1135e*/
*(_BYTE *)(a1 + 66) = 0; /*0x11365*/
if ( *(_BYTE *)(a1 + 67) /*0x11384*/
&& (result = RstRaidNotifyDiskDone(*(_QWORD *)(a1 + 32), a1), *(_DWORD *)(*(_QWORD *)(a1 + 32) + 8LL) == 3) )
{
*(_BYTE *)(a1 + 66) = 6; /*0x11389*/
*(_WORD *)(a1 + 64) = 7; /*0x1138d*/
return 7; /*0x11386*/
}
else
{
*(_WORD *)(a1 + 64) = 0; /*0x11393*/
}
return result; /*0x1139c*/
}
// Function: RstRaidEntryFinalizeWithSize @ 0x113a4 (0x9a bytes)
// Index: 457/906
void __fastcall RstRaidEntryFinalizeWithSize(__int64 a1)
{
int n23_2; // r8d
__int64 v2; // r10
int n23; // edx
int n23_1; // eax
__int64 v5; // rax
if ( *(_WORD *)(a1 + 170) ) /*0x113ad*/
{
if ( *(_WORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 40) + 16LL) + 2LL) == 2 ) /*0x113d0*/
{
*(_BYTE *)(a1 + 66) = 5; /*0x113d2*/
*(_WORD *)(a1 + 64) = 2; /*0x113d7*/
}
else
{
n23_2 = *(unsigned __int8 *)(a1 + 68); /*0x113de*/
v2 = *(_QWORD *)(a1 + 32); /*0x113e3*/
*(_BYTE *)(a1 + 66) = 6; /*0x113e7*/
n23 = 23; /*0x113f0*/
n23_1 = 23; /*0x113f5*/
if ( (unsigned __int8)n23_2 < 0x18u ) /*0x113f7*/
n23_1 = n23_2; /*0x113f7*/
v5 = *(_QWORD *)(v2 + 16 * (n23_1 + 7LL)); /*0x11408*/
if ( (unsigned __int8)n23_2 < 0x18u ) /*0x1140c*/
n23 = n23_2; /*0x1140c*/
*(_WORD *)(a1 + 64) = *(_WORD *)(v5 + 120); /*0x1141b*/
if ( *(__int16 *)(*(_QWORD *)(v2 + 16 * (n23 + 7LL)) + 114LL) >= 4 ) /*0x1142c*/
RstRaidNotifyDiskDone(v2, a1); /*0x11434*/
}
}
else
{
*(_BYTE *)(a1 + 66) = 0; /*0x113b6*/
*(_WORD *)(a1 + 64) = 0; /*0x113b9*/
}
}
// Function: RstConfigBlockCopyState @ 0x11440 (0x1d bytes)
// Index: 458/906
__int64 __fastcall RstConfigBlockCopyState(__int64 a1, __int64 a2)
{
__int64 result; // rax
*(_QWORD *)(a2 + 48) = *(_QWORD *)(a1 + 48); /*0x11444*/
*(_QWORD *)(a2 + 56) = *(_QWORD *)(a1 + 56); /*0x1144c*/
result = *(unsigned int *)(a1 + 712); /*0x11450*/
*(_DWORD *)(a2 + 392) = result; /*0x11456*/
return result; /*0x1145c*/
}
// Function: Assert_12 @ 0x11460 (0x1d0 bytes)
// Index: 459/906
__int64 __fastcall Assert_12(__int64 a1)
{
__int64 v2; // rcx
__int64 v3; // rdx
__int64 v4; // rcx
__int64 n0xFF; // [rsp+28h] [rbp-60h]
__int64 n0xFFa; // [rsp+28h] [rbp-60h]
_BYTE *i; // [rsp+50h] [rbp-38h] BYREF
char v9; // [rsp+58h] [rbp-30h]
__int16 n16; // [rsp+5Ah] [rbp-2Eh]
char n0xFF_2; // [rsp+90h] [rbp+8h] BYREF
char n0xFF_1; // [rsp+98h] [rbp+10h] BYREF
__int64 i_1; // [rsp+A0h] [rbp+18h] BYREF
__int64 i_2; // [rsp+A8h] [rbp+20h] BYREF
i = 0; /*0x11478*/
n16 = 16; /*0x1147d*/
v9 = 0; /*0x11482*/
RstBufferPoolRealloc((__int64)&i, 0); /*0x11487*/
if ( RstDebugEnabled() && !i ) /*0x1149b*/
DebugAssert("RaidReq.cpp", 0x1FAu, "oromBuff1.ptr()"); /*0x114b0*/
v2 = *(_QWORD *)(a1 + 32); /*0x114b5*/
v3 = *(_QWORD *)(a1 + 704); /*0x114b9*/
*(_BYTE *)(a1 + 66) = 0; /*0x114c0*/
*(_WORD *)(a1 + 64) = 0; /*0x114c4*/
(*(void (__fastcall **)(__int64, __int64, char *, __int64 *))(*(_QWORD *)v2 + 24LL))(v2, v3, &n0xFF_2, &i_1); /*0x114db*/
(*(void (__fastcall **)(_QWORD, _QWORD, char *, __int64 *))(**(_QWORD **)(a1 + 32) + 32LL))( /*0x114fc*/
*(_QWORD *)(a1 + 32),
*(_QWORD *)(a1 + 704),
&n0xFF_1,
&i_2);
v4 = Source_16 + 33680; /*0x1150a*/
*(_QWORD *)(Source_16 + 33728) = *(_QWORD *)(a1 + 48); /*0x11516*/
*(_QWORD *)(v4 + 56) = *(_QWORD *)(a1 + 56); /*0x11523*/
*(_DWORD *)(v4 + 392) = *(_DWORD *)(a1 + 712); /*0x1152d*/
Assert_5( /*0x1157e*/
v4,
a1,
(unsigned int)i,
i_1,
*(_DWORD *)(a1 + 712),
((unsigned __int8)n0xFF_2 + 1) % *(unsigned __int8 *)(*(_QWORD *)(a1 + 32) + 42LL),
*(_BYTE *)(*(_QWORD *)(a1 + 32) + 42LL) - 1,
n0xFF_1,
1);
RstBufferXor(*(_DWORD *)(a1 + 712), (_BYTE *)*(unsigned int *)(a1 + 716), (__int64)i, i); /*0x11597*/
LODWORD(n0xFF) = *(_DWORD *)(a1 + 716); /*0x115b2*/
Assert_139(a1 + 96, 42, n0xFF_2, i_1, *(_DWORD *)(a1 + 712), n0xFF); /*0x115c6*/
LODWORD(n0xFFa) = (_DWORD)i; /*0x115e6*/
Assert_139(a1 + 96, 42, n0xFF_1, i_2, *(_DWORD *)(a1 + 712), n0xFFa); /*0x115f5*/
if ( *(_BYTE *)(a1 + 67) ) /*0x115fa*/
{
RstRaidNotifyDiskDone(*(_QWORD *)(a1 + 32), a1); /*0x11607*/
if ( *(_BYTE *)(a1 + 67) > 1u ) /*0x11610*/
{
*(_BYTE *)(a1 + 66) = 6; /*0x11615*/
*(_WORD *)(a1 + 64) = 7; /*0x11619*/
}
}
return RstBufferPoolLock((__int64)i); /*0x11627*/
}
// Function: RstRaidIoRequestInit @ 0x11630 (0x59 bytes)
// Index: 460/906
unsigned __int64 __fastcall RstRaidIoRequestInit(__int64 a1, __int64 a2, char a3, __int64 Source)
{
__int64 v4; // rax
unsigned __int64 result; // rax
*(_QWORD *)(a1 + 32) = a2; /*0x11630*/
v4 = *(_QWORD *)(a2 + 32); /*0x11634*/
*(_DWORD *)(a1 + 672) = 0; /*0x11638*/
*(_QWORD *)(a1 + 48) = v4; /*0x1163f*/
*(_BYTE *)(a1 + 700) = a3; /*0x11643*/
*(_BYTE *)(a1 + 67) = 0; /*0x1164a*/
*(_DWORD *)(a1 + 712) = *(_DWORD *)(Source + 16); /*0x11658*/
*(_DWORD *)(a1 + 716) = *(_DWORD *)(Source + 20); /*0x11662*/
result = *(_QWORD *)(Source + 8) / (unsigned __int64)*(unsigned int *)(a2 + 84); /*0x11672*/
*(_QWORD *)(a1 + 704) = *(_QWORD *)(Source + 8) % (unsigned __int64)*(unsigned int *)(a2 + 84); /*0x11675*/
*(_QWORD *)(a1 + 56) = result * *(unsigned int *)(a2 + 88); /*0x11684*/
return result; /*0x11688*/
}
// Function: RstRaidOpSetRetryState @ 0x1168c (0xe bytes)
// Index: 461/906
__int64 __fastcall RstRaidOpSetRetryState(__int64 a1)
{
*(_BYTE *)(a1 + 66) = 6; /*0x11691*/
*(_WORD *)(a1 + 64) = 7; /*0x11695*/
return 7; /*0x11699*/
}
// Function: RstRaidOpStateInit @ 0x1169c (0x34 bytes)
// Index: 462/906
__int64 __fastcall RstRaidOpStateInit(__int64 a1)
{
*(_QWORD *)(a1 + 8) = 0; /*0x1169e*/
*(_QWORD *)a1 = 0; /*0x116a2*/
*(_QWORD *)(a1 + 104) = 0; /*0x116a5*/
*(_QWORD *)(a1 + 96) = 0; /*0x116a9*/
*(_QWORD *)(a1 + 392) = 0; /*0x116ad*/
*(_QWORD *)(a1 + 384) = 0; /*0x116b4*/
*(_DWORD *)(a1 + 16) = 0; /*0x116bb*/
*(_QWORD *)(a1 + 128) = a1; /*0x116be*/
*(_QWORD *)(a1 + 416) = a1; /*0x116c5*/
return a1; /*0x116cf*/
}
// Function: RstArrayIoAdvance @ 0x116d0 (0x4b bytes)
// Index: 463/906
void __fastcall RstArrayIoAdvance(_DWORD *a1)
{
unsigned int v1; // r8d
int v2; // eax
unsigned int v3; // edx
if ( a1[168] && !a1[179] ) /*0x116d9*/
{
v1 = a1[174]; /*0x116e2*/
v2 = a1[173]; /*0x116e9*/
v3 = a1[172]; /*0x116ef*/
a1[179] = v2; /*0x116f8*/
if ( v1 < v3 ) /*0x116fe*/
v3 = v1; /*0x116fe*/
a1[178] = v3; /*0x11707*/
a1[174] = v1 - v3; /*0x1170d*/
a1[173] = v3 + v2; /*0x11714*/
}
}
// Function: RstRaidStatusAssertAndDetermine @ 0x1171c (0x45 bytes)
// Index: 464/906
__int64 __fastcall RstRaidStatusAssertAndDetermine(__int64 a1, __int16 a2)
{
Assert_120(a1 + 96, 40, a2, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), *(_DWORD *)(a1 + 716), 255); /*0x1174f*/
return RstRaidStatusDetermine(a1); /*0x11757*/
}
// Function: RstRaidOpStep @ 0x11764 (0xb4 bytes)
// Index: 465/906
__int64 __fastcall RstRaidOpStep(__int64 a1, __int64 a2)
{
__int64 v2; // rax
__int64 v4; // r8
__int64 v5; // rcx
char v7; // [rsp+50h] [rbp+8h] BYREF
__int64 v8; // [rsp+58h] [rbp+10h] BYREF
v2 = *(_QWORD *)(a1 + 40); /*0x1176a*/
*(_BYTE *)(a1 + 67) = 0; /*0x1176e*/
v4 = *(_QWORD *)(v2 + 16); /*0x11775*/
v8 = *(_QWORD *)(v4 + 64); /*0x1177d*/
LOBYTE(a2) = *(_BYTE *)(v4 + 72); /*0x11782*/
v7 = a2; /*0x11786*/
if ( *(_WORD *)(v4 + 2) != 2 ) /*0x11790*/
RstRaidMemberRetryOrActivate(*(_QWORD *)(a1 + 32), a2); /*0x11796*/
v5 = *(_QWORD *)(a1 + 32); /*0x1179b*/
if ( *(__int16 *)(a1 + 720) < (__int16)(*(unsigned __int8 *)(v5 + 100) - 1) /*0x117b9*/
&& RstRaidTryMapToNextRow(v5, &v8, (unsigned __int8 *)&v7) )
{
Assert_120( /*0x117f6*/
a1 + 384,
40,
*(_DWORD *)(*(_QWORD *)(a1 + 32) + 104LL),
*(_QWORD *)(a1 + 704),
*(_DWORD *)(a1 + 712),
*(_DWORD *)(a1 + 716),
v7);
return RstRaidOpDispatchOrStep(a1); /*0x117fe*/
}
else
{
*(_BYTE *)(a1 + 66) = 6; /*0x1180a*/
*(_WORD *)(a1 + 64) = 7; /*0x1180e*/
return 7; /*0x11805*/
}
}
// Function: Assert_75 @ 0x11818 (0x162 bytes)
// Index: 466/906
__int64 __fastcall Assert_75(__int64 a1)
{
__int64 Source; // rdi
unsigned int i_1; // r12d
__int64 v4; // rdx
unsigned int n0x2000_1; // esi
__int64 i; // rbp
unsigned int n0x2000; // r13d
int v8; // ecx
__int64 v9; // rcx
__int64 result; // rax
Source = Source_16; /*0x11839*/
*(_QWORD *)(Source_16 + 33728) = *(_QWORD *)(a1 + 48); /*0x11843*/
*(_QWORD *)(Source + 33736) = *(_QWORD *)(a1 + 56); /*0x1184e*/
*(_DWORD *)(Source + 34072) = *(_DWORD *)(a1 + 712); /*0x1185b*/
i_1 = *(_DWORD *)(a1 + 716); /*0x11865*/
v4 = *(_QWORD *)(*(_QWORD *)(a1 + 40) + 16LL); /*0x1186c*/
n0x2000_1 = *(_DWORD *)(v4 + 16); /*0x11870*/
for ( i = *(_QWORD *)(v4 + 64); n0x2000_1; n0x2000_1 -= n0x2000 ) /*0x11879*/
{
n0x2000 = 0x2000; /*0x1188f*/
if ( n0x2000_1 < 0x2000 ) /*0x118ab*/
n0x2000 = n0x2000_1; /*0x118ab*/
v8 = *(unsigned __int8 *)(*(_QWORD *)(a1 + 32) + 42LL); /*0x11895*/
Assert_5(Source + 33680, a1, i_1, i, n0x2000, (*(unsigned __int8 *)(a1 + 68) + 1) % v8, v8 - 1, 0xFFu, 1); /*0x118d3*/
if ( *(_BYTE *)(Source + 33747) ) /*0x118d8*/
break; /*0x118df*/
i_1 += n0x2000; /*0x118ec*/
i += n0x2000 / (unsigned int)RstHelper_525c(*(_QWORD *)(a1 + 32)); /*0x118fa*/
}
if ( *(_BYTE *)(Source + 33747) || (v9 = *(_QWORD *)(a1 + 32), *(_DWORD *)(v9 + 8) == 2) ) /*0x11917*/
{
if ( *(_WORD *)(Source + 33744) != 2 ) /*0x1192a*/
{
RstBufferProcessByteArray(a1, Source + 33680); /*0x11936*/
RstRaidNotifyDiskDone(*(_QWORD *)(a1 + 32), a1); /*0x11942*/
}
}
else
{
RstRaidMemberRetryOrActivate(v9, *(_BYTE *)(a1 + 68)); /*0x1191c*/
}
*(_BYTE *)(a1 + 66) = *(_BYTE *)(Source + 33746); /*0x1195a*/
result = *(unsigned __int16 *)(Source + 33744); /*0x1195d*/
*(_WORD *)(a1 + 64) = result; /*0x11968*/
return result; /*0x11970*/
}
// Function: RstHelper_197c @ 0x1197c (0x1f7 bytes)
// Index: 467/906
__int64 __fastcall RstHelper_197c(__int64 a1)
{
__int64 v2; // r9
int v3; // eax
__int64 v4; // rcx
int v6; // [rsp+28h] [rbp-40h]
__int64 v7; // [rsp+40h] [rbp-28h] BYREF
char v8; // [rsp+48h] [rbp-20h]
__int16 n16_1; // [rsp+4Ah] [rbp-1Eh]
_DWORD *v10; // [rsp+50h] [rbp-18h] BYREF
char v11; // [rsp+58h] [rbp-10h]
__int16 n16; // [rsp+5Ah] [rbp-Eh]
v10 = 0; /*0x11998*/
v7 = 0; /*0x1199c*/
v11 = 0; /*0x119a2*/
v8 = 0; /*0x119a7*/
n16 = 16; /*0x119ac*/
n16_1 = 16; /*0x119b1*/
RstBufferPoolRealloc((__int64)&v10, 0); /*0x119b6*/
RstBufferPoolRealloc((__int64)&v7, 0); /*0x119c2*/
if ( RstDebugEnabled() && !v10 ) /*0x119d6*/
DebugAssert("RaidReq.cpp", 0x19Fu, "oldDataBuffer.ptr()"); /*0x119eb*/
if ( RstDebugEnabled() && !v7 ) /*0x119ff*/
DebugAssert("RaidReq.cpp", 0x1A0u, "parityBuffer.ptr()"); /*0x11a14*/
v2 = *(_QWORD *)(a1 + 704); /*0x11a1d*/
v6 = (int)v10; /*0x11a29*/
v3 = *(_DWORD *)(a1 + 712); /*0x11a2d*/
*(_BYTE *)(a1 + 66) = 0; /*0x11a3c*/
*(_WORD *)(a1 + 64) = 0; /*0x11a44*/
Assert_120(a1 + 96, 40, 0, v2, v3, v6, 255); /*0x11a48*/
Assert_120(a1 + 96, 40, 1, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), v7, 255); /*0x11a77*/
Assert_120(a1 + 96, 42, 0, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), *(_DWORD *)(a1 + 716), 255); /*0x11aa5*/
RstXorBufferTransform(*(_DWORD *)(a1 + 712), *(unsigned int *)(a1 + 716), v10, v7, v7); /*0x11ac5*/
Assert_120(a1 + 96, 42, 1, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), v7, 255); /*0x11af4*/
if ( *(_BYTE *)(a1 + 67) ) /*0x11af9*/
{
if ( *(_BYTE *)(a1 + 67) == 1 ) /*0x11b06*/
{
v4 = Source_16 + 33680; /*0x11b13*/
*(_QWORD *)(Source_16 + 33728) = *(_QWORD *)(a1 + 48); /*0x11b1a*/
*(_QWORD *)(v4 + 56) = *(_QWORD *)(a1 + 56); /*0x11b22*/
*(_DWORD *)(v4 + 392) = *(_DWORD *)(a1 + 712); /*0x11b2c*/
Assert_20(v4, a1); /*0x11b32*/
}
else
{
RstRaidNotifyDiskDone(*(_QWORD *)(a1 + 32), a1); /*0x11b3d*/
*(_BYTE *)(a1 + 66) = 6; /*0x11b47*/
*(_WORD *)(a1 + 64) = 7; /*0x11b4b*/
}
}
RstBufferPoolLock(v7); /*0x11b54*/
return RstBufferPoolLock((__int64)v10); /*0x11b6d*/
}
// Function: Assert_127 @ 0x11b74 (0x61 bytes)
// Index: 468/906
char __fastcall Assert_127(__int64 a1)
{
__int16 n2; // ax
LOBYTE(n2) = *(_BYTE *)(a1 + 67); /*0x11b7a*/
if ( (_BYTE)n2 ) /*0x11b84*/
{
if ( (_BYTE)n2 == 1 ) /*0x11b91*/
{
n2 = 2; /*0x11b9b*/
if ( *(_WORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 40) + 16LL) + 2LL) != 2 ) /*0x11ba4*/
{
LOBYTE(n2) = Assert_75(a1); /*0x11ba9*/
return n2; /*0x11bae*/
}
*(_BYTE *)(a1 + 66) = 5; /*0x11bb0*/
}
else
{
RstRaidNotifyDiskDone(*(_QWORD *)(a1 + 32), a1); /*0x11bbd*/
*(_BYTE *)(a1 + 66) = 6; /*0x11bc2*/
n2 = 7; /*0x11bc6*/
}
*(_WORD *)(a1 + 64) = n2; /*0x11bcb*/
return n2; /*0x11bcb*/
}
*(_BYTE *)(a1 + 66) = 0; /*0x11b86*/
*(_WORD *)(a1 + 64) = 0; /*0x11b89*/
return n2; /*0x11bcf*/
}
// Function: RstRaidOpDispatch @ 0x11bd8 (0x2c bytes)
// Index: 469/906
__int64 __fastcall RstRaidOpDispatch(__int64 a1, __int64 a2)
{
if ( !*(_QWORD *)(a1 + 112) ) /*0x11bde*/
return RstRaidStatusDetermine(a1); /*0x11bfa*/
*(_WORD *)(a1 + 720) = 0; /*0x11be4*/
*(_QWORD *)(a1 + 40) = a1 + 96; /*0x11bef*/
return RstRaidOpStep(a1, a2); /*0x11bff*/
}
// Function: RstRaidOpDispatchOrStep @ 0x11c04 (0x27 bytes)
// Index: 470/906
__int64 __fastcall RstRaidOpDispatchOrStep(__int64 a1, __int64 a2)
{
if ( *(_BYTE *)(a1 + 67) ) /*0x11c08*/
{
++*(_WORD *)(a1 + 720); /*0x11c1a*/
return RstRaidOpStep(a1, a2); /*0x11c21*/
}
else
{
*(_QWORD *)(a1 + 112) = 0; /*0x11c0e*/
return RstRaidOpDispatch(a1, a2); /*0x11c13*/
}
}
// Function: RstDeviceFindByType @ 0x11c2c (0x57 bytes)
// Index: 471/906
char __fastcall RstDeviceFindByType(__int64 a1, char a2)
{
unsigned __int8 v3; // bl
__int64 i[20]; // [rsp+20h] [rbp-B8h] BYREF
char v6; // [rsp+C0h] [rbp-18h]
v3 = 0; /*0x11c3c*/
if ( !(unsigned __int8)RstDeviceGetStatusByte() ) /*0x11c3e*/
return -1; /*0x11c6c*/
while ( (unsigned int)RstHelper_c8a8(v3, (__int64)i) || v6 != a2 ) /*0x11c5f*/
{
if ( ++v3 >= (unsigned __int8)RstDeviceGetStatusByte() ) /*0x11c6a*/
return -1; /*0x11c6a*/
}
return v3; /*0x11c76*/
}
// Function: RstDeviceMatchEntry @ 0x11c84 (0x82 bytes)
// Index: 472/906
char __fastcall RstDeviceMatchEntry(_BYTE *Destination, __int64 a2, __int64 a3)
{
char v3; // bl
_QWORD *v5; // rax
v3 = 0; /*0x11c95*/
if ( *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a2 + 144) + 248LL) + 28LL) == *(_DWORD *)(a3 + 36) /*0x11cbc*/
&& *(_WORD *)(*(_QWORD *)(a2 + 136) + 64LL) == *(_WORD *)(a3 + 40) )
{
v5 = RstLinkedListFindData(*(_QWORD *)(Source_16 + 216), *((_QWORD *)Destination + 11)); /*0x11cd0*/
if ( v5 != (_QWORD *)-18LL ) /*0x11ce3*/
return StrnCpy16((_BYTE *)v5 + 18, (_BYTE *)(*(_QWORD *)(a2 + 136) + 84LL), 16) == 0; /*0x11cf7*/
}
return v3; /*0x11d00*/
}
// Function: RstHelper_1d08 @ 0x11d08 (0x80 bytes)
// Index: 473/906
__int64 __fastcall RstHelper_1d08(__int64 Destination)
{
__int64 v2; // rcx
unsigned int n512; // r9d
__int64 result; // rax
*(_DWORD *)Destination = 0; /*0x11d0e*/
*(_DWORD *)(Destination + 20) = 0; /*0x11d11*/
*(_DWORD *)(Destination + 4) = 1; /*0x11d18*/
*(_DWORD *)(Destination + 12) = 24; /*0x11d1f*/
v2 = *(_QWORD *)(Destination + 88); /*0x11d26*/
n512 = 512; /*0x11d2a*/
if ( v2 ) /*0x11d33*/
{
n512 = HiiLibReturnZero(v2); /*0x11d47*/
*(_DWORD *)(Destination + 20) = *(_QWORD *)(*(_QWORD *)(Destination + 88) + 144LL) /*0x11d62*/
- 0x1000
/ n512
* (*(_QWORD *)(*(_QWORD *)(Destination + 88) + 144LL)
/ (unsigned __int64)(0x1000 / n512));
}
result = 576 * (0x100000 / n512); /*0x11d79*/
*(_DWORD *)(Destination + 16) = result; /*0x11d7c*/
*(_DWORD *)(Destination + 8) = 24 * (0x100000 / n512); /*0x11d7f*/
return result; /*0x11d82*/
}
// Function: RstGetFieldCount @ 0x11d88 (0x12 bytes)
// Index: 474/906
__int64 __fastcall RstGetFieldCount(__int64 Destination, char a2)
{
__int64 result; // rax
result = *(unsigned int *)(Destination + 4); /*0x11d88*/
if ( a2 ) /*0x11d8d*/
{
if ( (unsigned int)result > 1 ) /*0x11d96*/
return 1; /*0x11d96*/
}
return result; /*0x11d99*/
}
// Function: RstHelper_1d9c @ 0x11d9c (0x47 bytes)
// Index: 475/906
__int64 __fastcall RstHelper_1d9c(CHAR16 *Destination, char a2)
{
__int64 v3; // rcx
unsigned int n512; // r8d
__int64 result; // rax
unsigned int v6; // ecx
if ( !a2 ) /*0x11da7*/
return *((unsigned int *)Destination + 2); /*0x11dda*/
v3 = *((_QWORD *)Destination + 11); /*0x11da9*/
n512 = 512; /*0x11dad*/
if ( v3 ) /*0x11db6*/
n512 = HiiLibReturnZero(v3); /*0x11dbd*/
result = *((unsigned int *)Destination + 2); /*0x11dcd*/
v6 = 24 * (0x100000 / n512); /*0x11dd0*/
if ( (unsigned int)result > v6 ) /*0x11dd5*/
return v6; /*0x11dd5*/
return result; /*0x11ddd*/
}
// Function: RstGetFieldSize @ 0x11de4 (0x12 bytes)
// Index: 476/906
__int64 __fastcall RstGetFieldSize(CHAR16 *Destination, char a2)
{
__int64 n0x18; // rax
n0x18 = *((unsigned int *)Destination + 3); /*0x11de4*/
if ( a2 ) /*0x11de9*/
{
if ( (unsigned int)n0x18 > 0x18 ) /*0x11df2*/
return 24; /*0x11df2*/
}
return n0x18; /*0x11df5*/
}
// Function: RstGetFieldBlockSize @ 0x11df8 (0x4 bytes)
// Index: 477/906
__int64 __fastcall RstGetFieldBlockSize(CHAR16 *Destination)
{
return *((unsigned int *)Destination + 4); /*0x11dfb*/
}
// Function: RstHelper_1dfc @ 0x11dfc (0x39 bytes)
// Index: 478/906
__int64 RstHelper_1dfcHAR16 *Destination)
{
__int64 v1; // rbx
__int64 v2; // rcx
__int64 v3; // rbx
v1 = 0; /*0x11e02*/
if ( *((_QWORD *)Destination + 11) ) /*0x11e04*/
{
v2 = *((_QWORD *)Destination + 11); /*0x11e0a*/
v3 = *(_QWORD *)(v2 + 144); /*0x11e0e*/
return v3 - 0x1000 / (unsigned int)HiiLibReturnZero(v2); /*0x11e29*/
}
return v1; /*0x11e2f*/
}
// Function: RstHiiStringGetId @ 0x11e38 (0x4 bytes)
// Index: 479/906
__int64 __fastcall RstHiiStringGetId(CHAR16 *Destination)
{
return *((unsigned int *)Destination + 5); /*0x11e3b*/
}
// Function: RstHiiStringResetBuffer @ 0x11e3c (0x2a bytes)
// Index: 480/906
__int64 __fastcall RstHiiStringResetBuffer(__int64 Destination)
{
*(_QWORD *)(Destination + 88) = 0; /*0x11e42*/
RstHelper_1d08(Destination); /*0x11e4a*/
*(_BYTE *)(Destination + 24) = 0; /*0x11e58*/
return RstHelperInitAndLink(Destination + 32, 0, Destination); /*0x11e5c*/
}
// Function: RstRaidGetPhysicalDiskIndex @ 0x11e68 (0x99 bytes)
// Index: 481/906
__int64 __fastcall RstRaidGetPhysicalDiskIndex(__int64 a1, unsigned __int8 a2, _BYTE *a3)
{
unsigned int v3; // esi
__int64 v4; // rbx
__int64 v7; // rax
char v8; // al
__int64 v9; // rdx
*a3 = -1; /*0x11e7c*/
v3 = a2; /*0x11e87*/
v4 = *(_QWORD *)(Source_16 + 216); /*0x11e8a*/
v7 = RstLinkedListFindData(v4, *(_QWORD *)(a1 + 88)); /*0x11e9e*/
v8 = RstLinkedListIndexOf(v4, v7); /*0x11ea9*/
v9 = *(unsigned int *)(a1 + 4); /*0x11eae*/
if ( (unsigned int)v9 > 1 ) /*0x11eba*/
v9 = 1; /*0x11eba*/
if ( v3 >= (unsigned int)v9 ) /*0x11ec0*/
return 2; /*0x11ee7*/
if ( !*(_BYTE *)(((unsigned __int64)(unsigned __int8)v3 << 6) + a1 + 24) ) /*0x11eca*/
return 1; /*0x11ee2*/
LOBYTE(v9) = v8; /*0x11ed1*/
*a3 = RstDeviceFindByType(a1, v9); /*0x11edb*/
return 0; /*0x11efb*/
}
// Function: RstRaidEntryLookup @ 0x11f04 (0x5a bytes)
// Index: 482/906
__int64 __fastcall RstRaidEntryLookup(__int64 Destination)
{
unsigned int v1; // r9d
_BYTE *i; // rdx
unsigned int v3; // eax
unsigned __int64 v4; // rax
__int64 v5; // rbx
v1 = 0; /*0x11f0a*/
for ( i = (_BYTE *)(Destination + 24); ; i += 64 ) /*0x11f0d*/
{
v3 = *(_DWORD *)(Destination + 4); /*0x11f15*/
if ( v3 > 1 ) /*0x11f1b*/
v3 = 1; /*0x11f1b*/
if ( v1 >= v3 ) /*0x11f22*/
break; /*0x11f22*/
if ( !*i ) /*0x11f27*/
{
v4 = (unsigned __int64)v1 << 6; /*0x11f38*/
*(_BYTE *)(v4 + Destination + 24) = 1; /*0x11f3c*/
v5 = v4 + Destination + 32; /*0x11f41*/
RstHelperInitAndLink(v5, v1, Destination); /*0x11f4c*/
return v5; /*0x11f54*/
}
++v1; /*0x11f29*/
}
return 0; /*0x11f58*/
}
// Function: RstConfigBufferSlotIsEmpty @ 0x11f60 (0x31 bytes)
// Index: 483/906
char __fastcall RstConfigBufferSlotIsEmpty(__int64 a1)
{
unsigned int v1; // r8d
unsigned int v2; // edx
_BYTE *i; // rcx
unsigned int v4; // eax
v1 = *(_DWORD *)(a1 + 4); /*0x11f60*/
v2 = 0; /*0x11f64*/
for ( i = (_BYTE *)(a1 + 24); ; i += 64 ) /*0x11f66*/
{
v4 = v1; /*0x11f71*/
if ( v1 > 1 ) /*0x11f74*/
v4 = 1; /*0x11f74*/
if ( v2 >= v4 ) /*0x11f7a*/
break; /*0x11f7a*/
if ( !*i ) /*0x11f7f*/
return 1; /*0x11f8d*/
++v2; /*0x11f81*/
}
return 0; /*0x11f8d*/
}
// Function: RstConfigBufferClearEntry @ 0x11f94 (0x39 bytes)
// Index: 484/906
__int64 __fastcall RstConfigBufferClearEntry(_BYTE *Source, _BYTE *p_Destination)
{
unsigned int v2; // r8d
_BYTE *i; // r9
__int64 result; // rax
v2 = 0; /*0x11f94*/
for ( i = Source + 24; ; i += 64 ) /*0x11f97*/
{
result = *((unsigned int *)Source + 1); /*0x11f9f*/
if ( (unsigned int)result > 1 ) /*0x11fa5*/
result = 1; /*0x11fa5*/
if ( v2 >= (unsigned int)result ) /*0x11fac*/
break; /*0x11fac*/
if ( &Source[64 * (unsigned __int64)v2 + 32] == p_Destination ) /*0x11fbd*/
*i = 0; /*0x11fbf*/
++v2; /*0x11fc3*/
}
return result; /*0x11fcc*/
}
// Function: Assert_92 @ 0x11fd0 (0x95 bytes)
// Index: 485/906
char __fastcall Assert_92(_BYTE *Destination, CHAR16 **p_Destination)
{
char v4; // bl
CHAR16 **v5; // rax
__int64 v6; // rdi
__int16 v8; // [rsp+40h] [rbp+18h] BYREF
v4 = 0; /*0x11ff2*/
if ( Assert_111((__int64)p_Destination) ) /*0x11fed*/
{
v8 = 0; /*0x11ff8*/
do /*0x12010*/
{
v6 = Assert_56(Source_16, &v8); /*0x1202a*/
if ( !v6 ) /*0x12030*/
{
v4 = 1; /*0x12032*/
goto LABEL_6; /*0x12032*/
}
v5 = RstBufferAdvancePtr(p_Destination); /*0x12002*/
}
while ( !RstDeviceMatchEntry((__int64)Destination, v6, (__int64)v5) ); /*0x12010*/
*(_QWORD *)(*(_QWORD *)(v6 + 136) + 72LL) = p_Destination; /*0x1205d*/
return 1; /*0x12061*/
}
else
{
LABEL_6:
RstConfigBufferClearEntry(Destination, p_Destination); /*0x12034*/
return v4; /*0x1203f*/
}
}
// Function: Assert_39 @ 0x12068 (0xfb bytes)
// Index: 486/906
bool __fastcall Assert_39(CHAR16 *Source)
{
char v2; // al
CHAR16 *i_1; // rbx
unsigned int v4; // eax
int v5; // eax
int v6; // eax
__int64 v7; // rax
_BYTE *i; // [rsp+30h] [rbp-18h] BYREF
char v10; // [rsp+38h] [rbp-10h]
__int16 n16; // [rsp+3Ah] [rbp-Eh]
i = 0; /*0x12082*/
v10 = 0; /*0x12086*/
n16 = 16; /*0x1208f*/
RstBufferPoolRealloc((__int64)&i, 0); /*0x12094*/
v2 = RstDebugEnabled(); /*0x12099*/
i_1 = (CHAR16 *)i; /*0x1209e*/
if ( v2 && !i ) /*0x120ab*/
{
DebugAssert("JournalDisk.cpp", 0x11Du, "framebuf.ptr()"); /*0x120c0*/
i_1 = (CHAR16 *)i; /*0x120c5*/
}
MemZero(i_1, 0, 4096); /*0x120d5*/
*(_DWORD *)Source = 0; /*0x120e6*/
StrnCpy(i_1, Source, 0x18u); /*0x120e8*/
v4 = RstReturnAllOnes(); /*0x120ed*/
v5 = RstCrc32(v4, (unsigned int *)i_1, 4096); /*0x120fd*/
v6 = RstBitwiseNot(v5); /*0x12104*/
*(_DWORD *)Source = v6; /*0x1210c*/
*(_DWORD *)i_1 = v6; /*0x1210e*/
v7 = RstHelper_1dfc(Source); /*0x12110*/
Assert_89(Source_16, *((_QWORD *)Source + 11), 42, v7, 4096, (unsigned int)i_1); /*0x12132*/
RstBufferPoolLock((__int64)i); /*0x1213c*/
return *(_WORD *)(Source_16 + 2720) == 0; /*0x1215d*/
}
// Function: Assert_33 @ 0x12164 (0x109 bytes)
// Index: 487/906
bool __fastcall Assert_33(CHAR16 *Destination)
{
unsigned int *Source_1; // rbp
__int64 v3; // rax
unsigned int v5; // edi
unsigned int v6; // eax
int v7; // eax
int v8; // ebx
CHAR16 *Source; // [rsp+30h] [rbp-18h] BYREF
char v10; // [rsp+38h] [rbp-10h]
__int16 n16; // [rsp+3Ah] [rbp-Eh]
Source = 0; /*0x12182*/
v10 = 0; /*0x12186*/
n16 = 16; /*0x1218e*/
RstBufferPoolRealloc((__int64)&Source, 0); /*0x12193*/
if ( RstDebugEnabled() && !Source ) /*0x121a6*/
DebugAssert("JournalDisk.cpp", 0x13Au, "framebuf.ptr()"); /*0x121bb*/
Source_1 = (unsigned int *)Source; /*0x121c0*/
v3 = RstHelper_1dfc(Destination); /*0x121c8*/
Assert_89(Source_16, *((_QWORD *)Destination + 11), 40, v3, 4096, (unsigned int)Source); /*0x121ee*/
if ( *(_WORD *)(Source_16 + 2720) ) /*0x121fa*/
{
RstBufferPoolLock((__int64)Source); /*0x12209*/
return 0; /*0x1220e*/
}
else
{
v5 = *Source_1; /*0x12212*/
*Source_1 = 0; /*0x12215*/
v6 = RstReturnAllOnes(); /*0x12218*/
v7 = RstCrc32(v6, Source_1, 4096); /*0x12228*/
v8 = RstBitwiseNot(v7); /*0x12240*/
StrnCpy(Destination, (const CHAR16 *)Source_1, 0x18u); /*0x12242*/
RstBufferPoolLock((__int64)Source); /*0x1224c*/
*(_DWORD *)Destination = v8; /*0x12253*/
return v5 == v8; /*0x12255*/
}
}
// Function: Assert_103 @ 0x12270 (0x53 bytes)
// Index: 488/906
bool __fastcall Assert_103(__int64 Destination, __int64 a2, char a3)
{
CHAR16 *Destination_1; // rcx
bool result; // al
*(_QWORD *)(Destination + 88) = a2; /*0x12280*/
RstHelper_1d08(Destination); /*0x12284*/
Destination_1 = (CHAR16 *)Destination; /*0x12289*/
if ( !a3 ) /*0x1228e*/
{
if ( Assert_33((CHAR16 *)Destination) ) /*0x122a0*/
return 1; /*0x122a7*/
RstHelper_1d08(Destination); /*0x122ac*/
Destination_1 = (CHAR16 *)Destination; /*0x122b1*/
}
result = Assert_39(Destination_1); /*0x12290*/
if ( !result ) /*0x12297*/
{
*(_QWORD *)(Destination + 88) = 0; /*0x12299*/
return result; /*0x1229e*/
}
return 1; /*0x122bd*/
}
// Function: Assert_55 @ 0x122c4 (0xa3 bytes)
// Index: 489/906
void __fastcall Assert_55(_BYTE *Source, __int64 a2)
{
CHAR16 *v2; // rbx
__int64 v5; // rdx
__int64 v6; // rcx
__int64 v7; // rdx
v2 = *(CHAR16 **)(a2 + 72); /*0x122d3*/
if ( (unsigned __int8)RstDebugEnabled(Source, a2) ) /*0x122dd*/
{
if ( v2 ) /*0x122e9*/
{
LABEL_7:
*(_BYTE *)(RstBufferAdvancePtr(v2) + 4) = 0; /*0x1232b*/
Assert_40(v2); /*0x1233a*/
v7 = *(_QWORD *)(a2 + 72); /*0x1233f*/
*(_DWORD *)(a2 + 80) = 5; /*0x12346*/
RstConfigBufferClearEntry((__int64)Source, v7); /*0x1234d*/
*(_QWORD *)(a2 + 72) = 0; /*0x12352*/
return; /*0x12352*/
}
DebugAssert("JournalDisk.cpp", 0xB2u, "jdPplMpbMgr != 0"); /*0x122fe*/
}
if ( v2 ) /*0x12306*/
goto LABEL_7; /*0x12306*/
if ( (unsigned __int8)RstDebugEnabled(v6, v5) ) /*0x12308*/
DebugAssert("JournalDisk.cpp", 0xB4u, "((BOOLEAN)(0==1))"); /*0x12324*/
}
// Function: Assert_50 @ 0x12368 (0xad bytes)
// Index: 490/906
__int64 __fastcall Assert_50(__int64 Destination)
{
unsigned int v1; // esi
_BYTE *i; // rdi
__int64 result; // rax
CHAR16 *p_Destination; // rbx
v1 = 0; /*0x12381*/
for ( i = (_BYTE *)(Destination + 24); ; i += 64 ) /*0x12386*/
{
result = *(unsigned int *)(Destination + 4); /*0x1238e*/
if ( (unsigned int)result > 1 ) /*0x12394*/
result = 1; /*0x12394*/
if ( v1 >= (unsigned int)result ) /*0x1239a*/
break; /*0x1239a*/
if ( *i ) /*0x1239c*/
{
if ( RstDebugEnabled() ) /*0x123d0*/
DebugAssert("JournalDisk.cpp", 0xD2u, "((BOOLEAN)(0==1))"); /*0x123ec*/
}
else
{
p_Destination = (CHAR16 *)(((unsigned __int64)v1 << 6) + Destination + 32); /*0x123ac*/
RstHelperInitAndLink((__int64)p_Destination, v1, Destination); /*0x123b4*/
Assert_43(p_Destination); /*0x123bc*/
*i = Assert_92((_BYTE *)Destination, (CHAR16 **)p_Destination); /*0x123cc*/
}
++v1; /*0x123f1*/
}
return result; /*0x1240e*/
}
// Function: Assert_48 @ 0x12418 (0xb5 bytes)
// Index: 491/906
char __fastcall Assert_48(__int64 Source)
{
char v2; // di
__int64 v3; // rdx
__int64 v4; // rcx
unsigned int v5; // r12d
_BYTE *v6; // rbp
unsigned int v7; // eax
char v8; // al
v2 = 0; /*0x12433*/
if ( Assert_39((CHAR16 *)Source) ) /*0x12436*/
{
v5 = 0; /*0x12445*/
v6 = (_BYTE *)(Source + 24); /*0x12448*/
v2 = 1; /*0x1244c*/
do /*0x124af*/
{
v7 = *(_DWORD *)(Source + 4); /*0x1244f*/
if ( v7 > 1 ) /*0x12455*/
v7 = 1; /*0x12455*/
if ( v5 >= v7 ) /*0x1245c*/
break; /*0x1245c*/
if ( (unsigned __int8)RstDebugEnabled(v4, v3) && *v6 ) /*0x12467*/
DebugAssert("JournalDisk.cpp", 0x10Du, "!m_jmm[ n ].m_bUsed"); /*0x12480*/
*(_BYTE *)(RstBufferAdvancePtr(((unsigned __int64)v5 << 6) + Source + 32) + 4) = 0; /*0x1249c*/
v8 = Assert_40((CHAR16 *)(((unsigned __int64)v5++ << 6) + Source + 32)); /*0x124a0*/
v6 += 64; /*0x124a8*/
v2 &= v8; /*0x124ac*/
}
while ( v2 ); /*0x124af*/
}
return v2; /*0x124c3*/
}
// Function: Assert_93 @ 0x124d0 (0x8f bytes)
// Index: 492/906
__int64 __fastcall Assert_93(_BYTE *Source)
{
__int64 v2; // rsi
__int64 v3; // rbx
_QWORD *v4; // rax
__int64 result; // rax
__int16 v6; // [rsp+38h] [rbp+10h] BYREF
v6 = 0; /*0x124e9*/
while ( 1 ) /*0x12540*/
{
result = Assert_56(Source_16, &v6); /*0x12540*/
if ( !result ) /*0x12548*/
break; /*0x12548*/
v2 = *(_QWORD *)(result + 136); /*0x124ef*/
v3 = *(_QWORD *)(Source_16 + 216); /*0x12501*/
v4 = RstLinkedListFindData(v3, *((_QWORD *)Source + 11)); /*0x1250b*/
LOBYTE(v3) = RstLinkedListIndexOf(v3, v4); /*0x1251e*/
if ( RstCfgRaidDevLookup(v2) == (_BYTE)v3 ) /*0x12527*/
Assert_55(Source, v2); /*0x1252f*/
}
return result; /*0x12559*/
}
// Function: RstBufferPoolInitEntries @ 0x12560 (0x44 bytes)
// Index: 493/906
__int64 __fastcall RstBufferPoolInitEntries(_BYTE *a1)
{
_BYTE *v1; // rbx
_BYTE *Destination; // rdi
__int64 n24; // rsi
__int64 result; // rax
v1 = a1; /*0x1256f*/
Destination = a1 + 8; /*0x12572*/
n24 = 24; /*0x12576*/
do /*0x12592*/
{
*v1 = 0; /*0x1257e*/
result = RstHiiStringResetBuffer((__int64)Destination); /*0x12581*/
Destination += 104; /*0x12586*/
v1 += 104; /*0x1258a*/
--n24; /*0x1258e*/
}
while ( n24 ); /*0x12592*/
return result; /*0x1259e*/
}
// Function: Assert_106 @ 0x125a4 (0x46 bytes)
// Index: 494/906
__int64 __fastcall Assert_106(_BYTE *a1)
{
_BYTE *v1; // rbx
_BYTE *Destination; // rdi
__int64 n24; // rsi
__int64 result; // rax
v1 = a1; /*0x125b3*/
Destination = a1 + 8; /*0x125b6*/
n24 = 24; /*0x125ba*/
do /*0x125d8*/
{
if ( *v1 ) /*0x125bf*/
result = Assert_50((__int64)Destination); /*0x125c7*/
Destination += 104; /*0x125cc*/
v1 += 104; /*0x125d0*/
--n24; /*0x125d4*/
}
while ( n24 ); /*0x125d8*/
return result; /*0x125e4*/
}
// Function: Assert_130 @ 0x125ec (0x5b bytes)
// Index: 495/906
__int64 __fastcall Assert_130(_BYTE *a1, _BYTE *Source)
{
_BYTE *v3; // rbx
_BYTE *Source_1; // rdi
__int64 n24; // rsi
__int64 result; // rax
v3 = a1; /*0x12603*/
Source_1 = a1 + 8; /*0x12606*/
n24 = 24; /*0x1260a*/
do /*0x12630*/
{
if ( !*v3 && Source_1 == Source ) /*0x12617*/
{
result = Assert_93(Source_1); /*0x1261c*/
*v3 = 0; /*0x12621*/
}
Source_1 += 104; /*0x12624*/
v3 += 104; /*0x12628*/
--n24; /*0x1262c*/
}
while ( n24 ); /*0x12630*/
return result; /*0x12641*/
}
// Function: RstBufferPoolFindEntry @ 0x12648 (0x39 bytes)
// Index: 496/906
__int64 __fastcall RstBufferPoolFindEntry(__int64 a1, __int64 a2)
{
int v3; // eax
__int64 v4; // rdx
__int64 n24; // r9
if ( !a2 ) /*0x1264e*/
return 0; /*0x12672*/
v3 = 0; /*0x12650*/
v4 = a1; /*0x12652*/
n24 = 0; /*0x12655*/
while ( !*(_BYTE *)v4 || *(_QWORD *)(v4 + 96) != a2 ) /*0x12661*/
{
++n24; /*0x12663*/
++v3; /*0x12666*/
v4 += 104; /*0x12668*/
if ( n24 >= 24 ) /*0x12670*/
return 0; /*0x12670*/
}
return 104LL * v3 + a1 + 8; /*0x12674*/
}
// Function: RstJournalDiskFindEntry @ 0x12684 (0x68 bytes)
// Index: 497/906
char __fastcall RstJournalDiskFindEntry(_BYTE *i, __int64 a2)
{
__int64 n24; // rdi
n24 = 0; /*0x126a0*/
while ( !*i || StrnCpy16((_BYTE *)(a2 + 28), (_BYTE *)(*((_QWORD *)i + 12) + 28LL), 0xFFFF) ) /*0x126c2*/
{
++n24; /*0x126c4*/
i += 104; /*0x126c7*/
if ( n24 >= 24 ) /*0x126cf*/
return 0; /*0x126d1*/
}
return 1; /*0x126e2*/
}
// Function: Assert_51 @ 0x126ec (0xad bytes)
// Index: 498/906
_BYTE *__fastcall Assert_51(_BYTE *i, __int64 a2, char a3)
{
__int64 v6; // rdx
__int64 v7; // rcx
int v8; // ebx
_BYTE *j; // rsi
__int64 v10; // rax
if ( RstJournalDiskFindEntry((__int64)i, a2) ) /*0x1270e*/
{
if ( (unsigned __int8)RstDebugEnabled(v7, v6) ) /*0x1275b*/
DebugAssert("JournalDisksMgr.cpp", 0x46u, "((BOOLEAN)(0==1))"); /*0x12777*/
return 0; /*0x1277c*/
}
else
{
v8 = 0; /*0x12717*/
for ( j = i; *j || !Assert_103((__int64)&i[104 * v8 + 8], a2, a3); j += 104 ) /*0x12719*/
{
if ( ++v8 >= 24 ) /*0x12745*/
return 0; /*0x12745*/
}
v10 = 104LL * v8; /*0x1274c*/
i[v10] = 1; /*0x12750*/
return &i[v10 + 8]; /*0x12754*/
}
}
// Function: RstIoCompletionNodeInit @ 0x1279c (0x47 bytes)
// Index: 499/906
_QWORD *__fastcall RstIoCompletionNodeInit(_QWORD *a1)
{
_QWORD *v1; // rdi
_QWORD *v3; // rax
v1 = 0; /*0x127a6*/
a1[1] = 0; /*0x127ab*/
*a1 = 0; /*0x127af*/
a1[5] = 0; /*0x127b2*/
v3 = (_QWORD *)RstMemPoolAlloc(64); /*0x127b9*/
if ( v3 ) /*0x127c1*/
v1 = RstDeviceNodeInit(v3, (__int64)a1); /*0x127ce*/
a1[8] = v1; /*0x127d1*/
return a1; /*0x127dd*/
}
// Function: RstDeviceClearCounts @ 0x127e4 (0xa bytes)
// Index: 500/906
__int64 __fastcall RstDeviceClearCounts(__int64 a1)
{
*(_WORD *)(a1 + 56) = 0; /*0x127e6*/
*(_DWORD *)(a1 + 76) = 0; /*0x127ea*/
return 0; /*0x127ed*/
}
// Function: RstDeviceSetFlagsFiltered @ 0x127f0 (0x11 bytes)
// Index: 501/906
__int64 __fastcall RstDeviceSetFlagsFiltered(__int64 a1, int a2, unsigned int n513)
{
if ( (a2 & 4) != 0 ) /*0x127f3*/
a2 &= ~1u; /*0x127f5*/
return RstDeviceUpdateFlagsMask(*(_QWORD *)(a1 + 48), a2, n513);
}
// Function: RstJournalDeviceSetMode @ 0x12804 (0x53 bytes)
// Index: 502/906
__int64 __fastcall RstJournalDeviceSetMode(__int64 a1, char a2)
{
if ( a2 ) /*0x12814*/
{
*(_DWORD *)(a1 + 76) = 1; /*0x12816*/
RstDeviceSetFlags(*(_QWORD *)(a1 + 48), 33554720); /*0x12821*/
return RstDeviceClearFlags(*(_QWORD *)(a1 + 48), 64); /*0x1282f*/
}
else
{
*(_DWORD *)(a1 + 76) = 0; /*0x12836*/
RstDeviceClearFlags(*(_QWORD *)(a1 + 48), 33554720); /*0x1283e*/
return RstDeviceSetFlags(*(_QWORD *)(a1 + 48), 64); /*0x1284c*/
}
}
// Function: RstDeviceGetCount @ 0x12858 (0x4 bytes)
// Index: 503/906
__int64 __fastcall RstDeviceGetCount(__int64 a1)
{
return *(unsigned int *)(a1 + 76); /*0x1285b*/
}
// Function: RstDeviceListEntrySetActive @ 0x1285c (0x50 bytes)
// Index: 504/906
__int64 __fastcall RstDeviceListEntrySetActive(__int64 i, __int64 a2)
{
__int64 result; // rax
if ( a2 ) /*0x12874*/
{
RstDeviceSetFlags(*(_QWORD *)(i + 48), 2); /*0x1288a*/
result = RstDeviceClearFlags(*(_QWORD *)(i + 48), 1); /*0x12898*/
*(_QWORD *)(i + 40) = a2; /*0x1289d*/
}
else
{
*(_QWORD *)(i + 40) = 0; /*0x12876*/
return RstDeviceClearFlags(*(_QWORD *)(i + 48), 2); /*0x1287f*/
}
return result; /*0x128a6*/
}
// Function: RstDeviceSetOnlineFlag @ 0x128ac (0xe bytes)
// Index: 505/906
__int64 __fastcall RstDeviceSetOnlineFlag(__int64 a1)
{
return RstDeviceSetFlags(*(_QWORD *)(a1 + 48), 4u);
}
// Function: RstDeviceIsActive @ 0x128bc (0x20 bytes)
// Index: 506/906
char __fastcall RstDeviceIsActive(__int64 a1)
{
char v1; // dl
v1 = 1; /*0x128bc*/
if ( *(_DWORD *)(a1 + 76) != 1 || (*(_DWORD *)(*(_QWORD *)(a1 + 48) + 136LL) & 0x2000000) == 0 ) /*0x128d5*/
return 0; /*0x128d7*/
return v1; /*0x128db*/
}
// Function: RstDeviceCheckReservedSuffix @ 0x128dc (0xa7 bytes)
// Index: 507/906
char __fastcall RstDeviceCheckReservedSuffix(__int64 a1)
{
__int16 n2; // ax
__int64 v3; // rdi
char v4; // bl
n2 = StrLenA((_BYTE *)(a1 + 18)); /*0x128f2*/
if ( (unsigned __int16)n2 < 2u ) /*0x128ff*/
return 0; /*0x12971*/
v3 = (unsigned __int16)(n2 - 2) + a1 + 18; /*0x12916*/
v4 = 0; /*0x12923*/
if ( RstStringFindInBuffer(v3, "-A", 2u) || RstStringFindInBuffer(v3, "-1", 2u) || RstStringFindInBuffer(v3, "-B", 2u) || RstStringFindInBuffer(v3, "-2", 2u) ) /*0x12962*/
return 1; /*0x1296b*/
return v4; /*0x1297d*/
}
// Function: RstJournalEntryInit @ 0x12984 (0x7e bytes)
// Index: 508/906
unsigned __int8 __fastcall RstJournalEntryInit(__int64 *i, const CHAR16 *Source, __int64 a3)
{
unsigned __int8 result; // al
_QWORD *i_1; // rdx
__int64 v7; // rcx
*((_WORD *)i + 28) = 0; /*0x129a0*/
*((_DWORD *)i + 19) = 0; /*0x129a4*/
result = (unsigned __int8)StrnCpy((CHAR16 *)i + 9, Source, 0x10u); /*0x129af*/
*((_BYTE *)i + 34) = 0; /*0x129b4*/
i_1 = (_QWORD *)i[5]; /*0x129b8*/
i[6] = a3; /*0x129bc*/
if ( i_1 ) /*0x129c3*/
{
result = RstLinkedListContains(*(_QWORD *)(Source_16 + 216), i_1); /*0x129d3*/
if ( !result ) /*0x129db*/
{
v7 = i[6]; /*0x129dd*/
i[5] = 0; /*0x129e4*/
return RstDeviceClearFlags(v7, 2); /*0x129e8*/
}
}
return result; /*0x129fc*/
}
// Function: RstConfigArrayAddDevice @ 0x12a04 (0xe3 bytes)
// Index: 509/906
unsigned __int8 __fastcall RstConfigArrayAddDevice(__int64 i, __int64 Source)
{
int v2; // ebx
int v5; // esi
__int64 v6; // rax
__int64 Source_1; // rbx
unsigned __int64 v8; // rax
v2 = *(_DWORD *)(Source + 24); /*0x12a1d*/
v5 = v2 & ((unsigned __int8)RstDeviceFindAndRemove((_BYTE *)Source) != 0 ? 46269063 : 12714631);
*(_DWORD *)(i + 76) = (unsigned __int8)RstDeviceFindAndRemove((_BYTE *)Source) != 0; /*0x12a58*/
StrnCpy((CHAR16 *)(i + 18), (const CHAR16 *)Source, 0x10u); /*0x12a5f*/
*(_BYTE *)(i + 34) = 0; /*0x12a64*/
v6 = RstDeviceArrayFindByName(Source_16 + 2984, (_BYTE *)(i + 18)); /*0x12a7a*/
*(_QWORD *)(i + 48) = v6; /*0x12a7f*/
if ( v6 ) /*0x12a86*/
{
RstDeviceSetFlags(v6, v5); /*0x12a8d*/
}
else
{
Source_1 = Source_16; /*0x12a94*/
v8 = RstBufferCombine32to64(Source); /*0x12a9e*/
*(_QWORD *)(i + 48) = RstConfigArrayAddEntry(Source_1 + 2984, (_BYTE *)(i + 18), v5, v8); /*0x12ab9*/
}
return RstJournalEntryInit((__int64 *)i, (const CHAR16 *)(i + 18), *(_QWORD *)(i + 48)); /*0x12adc*/
}
// Function: RstVolCheckAllMembersReady @ 0x12ae8 (0x3e bytes)
// Index: 510/906
char __fastcall RstVolCheckAllMembersReady(__int64 a1)
{
__int16 v1; // r8
v1 = 0; /*0x12aed*/
if ( !*(_BYTE *)(a1 + 20) ) /*0x12ae8*/
return 1; /*0x12b20*/
while ( (*(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 8LL * v1 + 24) + 48LL) + 136LL) & 0x10) == 0 ) /*0x12b11*/
{
if ( ++v1 >= (int)*(unsigned __int8 *)(a1 + 20) ) /*0x12b1e*/
return 1; /*0x12b1e*/
}
return 0; /*0x12b22*/
}
// Function: RstArrayHasActiveMemberWrite @ 0x12b28 (0x45 bytes)
// Index: 511/906
char __fastcall RstArrayHasActiveMemberWrite(__int64 a1)
{
__int16 v1; // r8
v1 = 0; /*0x12b39*/
if ( !*(_BYTE *)(a1 + 224) ) /*0x12b28*/
return 0; /*0x12b67*/
while ( *(_WORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 8LL * v1 + 232) + 56LL) + 40LL) + 4LL) ) /*0x12b58*/
{
if ( ++v1 >= (int)*(unsigned __int8 *)(a1 + 224) ) /*0x12b65*/
return 0; /*0x12b65*/
}
return 1; /*0x12b69*/
}
// Function: RstArrayRegionFindEntry @ 0x12b70 (0x3f bytes)
// Index: 512/906
__int64 __fastcall RstArrayRegionFindEntry(__int64 a1, __int64 a2)
{
__int16 i_1; // cx
__int16 i; // r9
i_1 = *(_WORD *)(a1 + 408); /*0x12b73*/
for ( i = 0; ; ++i ) /*0x12b7a*/
{
if ( i >= i_1 ) /*0x12b99*/
return 0; /*0x12b9d*/
if ( *(_QWORD *)(a1 + 24LL * i + 416) == a2 ) /*0x12b8f*/
break; /*0x12b8f*/
}
return a1 + 24LL * i + 416; /*0x12b9d*/
}
// Function: RstConfigArrayRemoveEntry @ 0x12bb0 (0xdd bytes)
// Index: 513/906
__int64 __fastcall RstConfigArrayRemoveEntry(__int64 a1, __int64 a2)
{
__int64 result; // rax
__int64 v5; // r11
int n3; // eax
_QWORD *v7; // r10
int v8; // edx
__int64 v9; // rcx
result = RstArrayRegionFindEntry(a1, a2); /*0x12bc0*/
v5 = 0; /*0x12bc5*/
while ( 1 ) /*0x12c1a*/
{
v7 = (_QWORD *)result; /*0x12c1a*/
if ( result == v5 ) /*0x12c20*/
break; /*0x12c20*/
--*(_WORD *)(a1 + 408); /*0x12bca*/
n3 = 3; /*0x12bd9*/
if ( *(__int16 *)(a1 + 408) < 4 ) /*0x12be5*/
n3 = *(__int16 *)(a1 + 408); /*0x12be5*/
*v7 = *(_QWORD *)(a1 + 24LL * n3 + 416); /*0x12bf7*/
v7[1] = *(_QWORD *)(a1 + 24LL * n3 + 424); /*0x12c02*/
v7[2] = *(_QWORD *)(a1 + 24LL * n3 + 432); /*0x12c11*/
result = RstArrayRegionFindEntry(a1, a2); /*0x12c15*/
}
v8 = *(unsigned __int8 *)(a1 + 224); /*0x12c22*/
if ( v8 > (int)v5 ) /*0x12c2c*/
{
while ( 1 ) /*0x12c2e*/
{
result = (__int16)v5; /*0x12c2e*/
LOWORD(v5) = v5 + 1; /*0x12c32*/
if ( a2 == *(_QWORD *)(a1 + 8 * result + 232) ) /*0x12c3e*/
break; /*0x12c3e*/
if ( (__int16)v5 >= *(unsigned __int8 *)(a1 + 224) ) /*0x12c4b*/
return result; /*0x12c4b*/
}
result = (unsigned int)(__int16)v5; /*0x12c4f*/
if ( (int)result < v8 ) /*0x12c55*/
{
do /*0x12c7a*/
{
v9 = (__int16)v5; /*0x12c57*/
LOWORD(v5) = v5 + 1; /*0x12c5b*/
result = *(_QWORD *)(a1 + 8 * v9 + 232); /*0x12c5f*/
*(_QWORD *)(a1 + 8 * v9 + 224) = result; /*0x12c67*/
}
while ( (__int16)v5 < *(unsigned __int8 *)(a1 + 224) ); /*0x12c7a*/
}
--*(_BYTE *)(a1 + 224); /*0x12c7c*/
}
return result; /*0x12c87*/
}
// Function: RstVolGetFirstStripeSize @ 0x12c90 (0x2b bytes)
// Index: 514/906
unsigned __int8 __fastcall RstVolGetFirstStripeSize(__int64 a1)
{
unsigned __int8 n24; // al
unsigned __int8 n0x18; // cl
if ( !*(_BYTE *)(a1 + 224) ) /*0x12c90*/
return 0; /*0x12c99*/
n0x18 = *(_BYTE *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 232) + 56LL) + 40LL) + 6LL); /*0x12cab*/
n24 = 24; /*0x12cae*/
if ( n0x18 <= 0x18u ) /*0x12cb5*/
return n0x18; /*0x12cb7*/
return n24; /*0x12c9b*/
}
// Function: RstLinkedListCountToNode @ 0x12cbc (0x2e bytes)
// Index: 515/906
__int16 __fastcall RstLinkedListCountToNode(_QWORD *a1)
{
_QWORD *v1; // r8
__int16 result; // ax
v1 = *(_QWORD **)(*(_QWORD *)(Source_16 + 216) + 264LL); /*0x12cca*/
result = 0; /*0x12cd3*/
while ( v1 && v1 != a1 ) /*0x12cdb*/
{
v1 = (_QWORD *)*v1; /*0x12cdd*/
++result; /*0x12ce0*/
}
return result; /*0x12ce8*/
}
// Function: Assert_26 @ 0x12cec (0x15d bytes)
// Index: 516/906
__int64 __fastcall Assert_26(__int64 a1, unsigned __int64 a2, unsigned __int8 a3)
{
__int64 v6; // rdx
__int64 v7; // rcx
int v8; // r12d
unsigned int v9; // esi
__int64 v10; // rdx
__int64 v11; // rcx
unsigned int v12; // edi
if ( (unsigned __int8)RstDebugEnabled(a1, a2) ) /*0x12d0d*/
{
if ( (unsigned __int8)RstDebugEnabled(v7, v6) ) /*0x12d1c*/
{
if ( *(_DWORD *)(a1 + 280) ) /*0x12d25*/
goto LABEL_7; /*0x12d2c*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x12d3f*/
}
if ( !*(_DWORD *)(a1 + 280) ) /*0x12d44*/
DebugAssert("CfgArray.cpp", 0x124u, "GetBlockSize() != ( 0 )"); /*0x12d60*/
}
LABEL_7:
if ( (unsigned __int8)RstDebugEnabled(v7, v6) && !*(_DWORD *)(a1 + 280) ) /*0x12d6e*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x12d88*/
v8 = a3; /*0x12d94*/
v9 = a3 * (unsigned int)(a2 / (0x100000u / *(_DWORD *)(a1 + 280))); /*0x12dab*/
if ( (unsigned __int8)RstDebugEnabled(0x100000u / *(_DWORD *)(a1 + 280), a2 % (0x100000u / *(_DWORD *)(a1 + 280))) /*0x12db8*/
&& !*(_DWORD *)(a1 + 280) )
{
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x12dd2*/
}
v12 = *(_DWORD *)(a1 + 280); /*0x12dd7*/
if ( (unsigned __int8)RstDebugEnabled(v11, v10) && !*(_DWORD *)(a1 + 280) ) /*0x12de6*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x12e00*/
return v9 + v8 * ((unsigned int)a2 & (0x100000 / v12 - 1)) / (0x100000u / *(_DWORD *)(a1 + 280)); /*0x12e3f*/
}
// Function: RstCfgCheckVolumeType @ 0x12e4c (0xa9 bytes)
// Index: 517/906
__int64 __fastcall RstCfgCheckVolumeType(__int64 a1)
{
__int16 v2; // r9
__int64 v3; // rcx
__int64 v4; // r8
int v5; // ecx
int v6; // ecx
int v7; // ecx
int v8; // ecx
*(_DWORD *)(a1 + 16) = 0; /*0x12e56*/
v2 = 0; /*0x12e59*/
if ( !*(_BYTE *)(a1 + 224) ) /*0x12e63*/
return 0; /*0x12ebc*/
while ( 1 ) /*0x12e6d*/
{
v3 = *(_QWORD *)(a1 + 8LL * v2 + 232); /*0x12e6d*/
v4 = *(_QWORD *)(*(_QWORD *)v3 + 160LL); /*0x12e78*/
if ( *(_DWORD *)(v4 + 12) != 1 ) /*0x12e83*/
goto LABEL_8; /*0x12e83*/
v5 = *(_DWORD *)(*(_QWORD *)v3 + 156LL); /*0x12e85*/
if ( !v5 ) /*0x12e8e*/
goto LABEL_16; /*0x12e8e*/
v6 = v5 - 1; /*0x12e90*/
if ( !v6 ) /*0x12e93*/
break; /*0x12e93*/
v7 = v6 - 1; /*0x12e95*/
if ( !v7 ) /*0x12e98*/
goto LABEL_16; /*0x12e98*/
v8 = v7 - 1; /*0x12e9a*/
if ( !v8 ) /*0x12e9d*/
{
*(_DWORD *)(a1 + 16) = 1; /*0x12ebd*/
return 1; /*0x12ec4*/
}
if ( v8 == 1 ) /*0x12ea2*/
{
LABEL_16:
*(_DWORD *)(a1 + 16) = 5; /*0x12eeb*/
return 5; /*0x12eeb*/
}
LABEL_8:
if ( ++v2 >= *(unsigned __int8 *)(a1 + 224) ) /*0x12eb3*/
return 0; /*0x12eb3*/
}
if ( *(int *)(*(_QWORD *)(v4 + 24) + 8LL) < 2 && *(_DWORD *)(v4 + 68) ) /*0x12ed0*/
*(_DWORD *)(a1 + 16) = 6; /*0x12ed6*/
else
*(_DWORD *)(a1 + 16) = 2; /*0x12edf*/
return *(unsigned int *)(a1 + 16); /*0x12ebc*/
}
// Function: RstArrayEntryInsert @ 0x12ef8 (0x45 bytes)
// Index: 518/906
void __fastcall RstArrayEntryInsert(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
__int16 n4; // r11
n4 = *(_WORD *)(a1 + 408); /*0x12efe*/
if ( n4 < 4 ) /*0x12f11*/
{
*(_WORD *)(a1 + 408) = n4 + 1; /*0x12f1f*/
RstBufferSetTriple((_QWORD *)(a1 + 24LL * n4 + 416), a2, a3, a4); /*0x12f32*/
}
}
// Function: RstArrayRegionFind @ 0x12f40 (0x78 bytes)
// Index: 519/906
__int64 __fastcall RstArrayRegionFind(__int64 a1, __int64 a2, unsigned __int64 a3, unsigned __int64 a4)
{
__int64 v4; // r10
bool v6; // cc
__int16 v7; // dx
v4 = 0; /*0x12f45*/
v6 = *(_WORD *)(a1 + 408) > 0; /*0x12f4e*/
v7 = 0; /*0x12f56*/
while ( v6 ) /*0x12f5a*/
{
if ( *(_QWORD *)(a1 + 24LL * v7 + 424) < a4 /*0x12f81*/
&& *(_QWORD *)(a1 + 24LL * v7 + 424) + *(_QWORD *)(a1 + 24LL * v7 + 432) > a3 )
{
return a1 + 24LL * v7 + 416; /*0x12fa7*/
}
if ( *(_QWORD *)(a1 + 24LL * v7 + 416) == a2 ) /*0x12f8e*/
v4 = a1 + 24LL * v7 + 416; /*0x12f8e*/
v6 = ++v7 < *(_WORD *)(a1 + 408); /*0x12f95*/
}
return v4; /*0x12fb7*/
}
// Function: RstArraySortEntries @ 0x12fb8 (0x143 bytes)
// Index: 520/906
__int64 __fastcall RstArraySortEntries(__int64 a1)
{
__int16 v1; // dx
__int16 v3; // r8
__int64 result; // rax
__int16 v5; // r9
__int16 v6; // r10
__int16 v7; // bx
__int64 *v8; // rdi
__int64 v9; // rdx
__int64 v10; // rcx
__int64 v11; // [rsp+0h] [rbp-28h]
__int64 v12; // [rsp+8h] [rbp-20h]
__int64 v13; // [rsp+10h] [rbp-18h]
v1 = *(_WORD *)(a1 + 408); /*0x12fc7*/
if ( v1 > 1 ) /*0x12fd9*/
{
v3 = 0; /*0x12fe2*/
result = (unsigned int)(v1 - 1); /*0x12fe5*/
if ( (int)result > 0 ) /*0x12fea*/
{
do /*0x130e5*/
{
v5 = v3 + 1; /*0x12ff0*/
v6 = v3; /*0x12ff4*/
v7 = v3 + 1; /*0x12ffc*/
if ( (__int16)(v3 + 1) < v1 ) /*0x13000*/
{
v8 = (__int64 *)(a1 + 24LL * v5 + 424); /*0x1300e*/
do /*0x13038*/
{
result = *v8; /*0x1301e*/
if ( *(_QWORD *)(a1 + 24LL * v6 + 424) > (unsigned __int64)*v8 ) /*0x13029*/
v6 = v7; /*0x13029*/
++v7; /*0x1302e*/
v8 += 3; /*0x13031*/
}
while ( v7 < v1 ); /*0x13038*/
if ( v6 != v3 ) /*0x1303e*/
{
v9 = 3LL * v3; /*0x1304c*/
v11 = *(_QWORD *)(a1 + 24LL * v3 + 416); /*0x13058*/
v12 = *(_QWORD *)(a1 + 24LL * v3 + 424); /*0x13063*/
v13 = *(_QWORD *)(a1 + 24LL * v3 + 432); /*0x1306f*/
v10 = 3LL * v6; /*0x13077*/
*(_QWORD *)(a1 + 8 * v9 + 416) = *(_QWORD *)(a1 + 24LL * v6 + 416); /*0x13083*/
*(_QWORD *)(a1 + 8 * v9 + 424) = *(_QWORD *)(a1 + 24LL * v6 + 424); /*0x13093*/
*(_QWORD *)(a1 + 8 * v9 + 432) = *(_QWORD *)(a1 + 24LL * v6 + 432); /*0x130a3*/
*(_QWORD *)(a1 + 8 * v10 + 416) = v11; /*0x130b2*/
*(_QWORD *)(a1 + 8 * v10 + 424) = v12; /*0x130be*/
result = v13; /*0x130c6*/
*(_QWORD *)(a1 + 8 * v10 + 432) = v13; /*0x130ca*/
}
}
v1 = *(_WORD *)(a1 + 408); /*0x130d2*/
++v3; /*0x130da*/
}
while ( v5 < v1 - 1 ); /*0x130e5*/
}
}
return result; /*0x130f5*/
}
// Function: Assert_35 @ 0x130fc (0x104 bytes)
// Index: 521/906
__int64 __fastcall Assert_35(__int64 a1)
{
unsigned __int64 v1; // rbp
unsigned __int8 i; // si
unsigned __int8 n2; // cl
int i_1; // ecx
__int64 v6; // rax
__int64 v7; // rbx
unsigned __int64 v8; // rax
unsigned int v9; // ebx
v1 = 0; /*0x13110*/
for ( i = 0; ; ++i ) /*0x13115*/
{
n2 = *(_BYTE *)(a1 + 224); /*0x1311e*/
if ( n2 >= 2u ) /*0x13123*/
n2 = 2; /*0x13125*/
if ( i >= n2 ) /*0x1312d*/
break; /*0x1312d*/
i_1 = 1; /*0x13133*/
if ( i < 2u ) /*0x1313c*/
i_1 = i; /*0x1313c*/
v6 = RstDeviceGetParentOrSpare(*(_QWORD *)(a1 + 8LL * i_1 + 232), 0); /*0x1314c*/
v7 = *(_QWORD *)(v6 + 8); /*0x13154*/
v8 = v7 + RstDeviceGetBuffer(v6); /*0x1315d*/
if ( v1 < v8 ) /*0x13163*/
v1 = v8; /*0x13163*/
}
if ( RstDebugEnabled() && !*(_DWORD *)(a1 + 280) ) /*0x1317a*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13194*/
v9 = *(_DWORD *)(a1 + 280); /*0x13199*/
if ( RstDebugEnabled() && !*(_DWORD *)(a1 + 280) ) /*0x131a8*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x131c2*/
return v1 + 3 * (0x100000u / *(_DWORD *)(a1 + 280)) + ((unsigned int)&loc_1FFFA + 6) / v9 + 161; /*0x131fa*/
}
// Function: RstSmallArrayPop @ 0x13200 (0x1c bytes)
// Index: 522/906
__int64 __fastcall RstSmallArrayPop(__int64 a1, unsigned __int8 *a2)
{
unsigned __int8 v2; // r8
__int64 result; // rax
v2 = *a2; /*0x13200*/
if ( *a2 >= *(_BYTE *)(a1 + 20) ) /*0x13207*/
return 0; /*0x13219*/
result = *(_QWORD *)(a1 + 8LL * v2 + 24); /*0x13210*/
*a2 = v2 + 1; /*0x13215*/
return result; /*0x13218*/
}
// Function: Assert_58 @ 0x1321c (0x9c bytes)
// Index: 523/906
void __fastcall Assert_58(__int64 a1, __int64 a2)
{
__int64 v4; // rcx
__int64 v5; // rcx
if ( *(_BYTE *)(a1 + 20) < 0x19u ) /*0x13230*/
{
if ( (unsigned __int8)RstDebugEnabled(a1, a2) ) /*0x13232*/
{
if ( *(_DWORD *)(a1 + 280) ) /*0x1323b*/
{
v4 = *(_QWORD *)(a2 + 48); /*0x13244*/
if ( (*(_DWORD *)(v4 + 136) & 0x10) != 0 && *(_DWORD *)(a1 + 280) != (unsigned int)HiiLibReturnZero(v4) ) /*0x13260*/
DebugAssert( /*0x13275*/
"CfgArray.cpp",
0x3B3u,
"( m_nBlockSize == ( 0 ) ) || ( !cdisk->hasStatus( 0x10 )) || ( m_nBlockSize == cdisk->getCldev()->getBlockSize())");
}
}
*(_QWORD *)(a1 + 8LL * (unsigned __int8)(*(_BYTE *)(a1 + 20))++ + 24) = a2; /*0x13284*/
RstDeviceListEntrySetActive(a2, a1); /*0x1328c*/
v5 = *(_QWORD *)(a2 + 48); /*0x13291*/
if ( (*(_DWORD *)(v5 + 136) & 0x10) != 0 ) /*0x132a0*/
*(_DWORD *)(a1 + 280) = HiiLibReturnZero(v5); /*0x132a7*/
}
}
// Function: RstLargeArrayPop @ 0x132b8 (0x22 bytes)
// Index: 524/906
__int64 __fastcall RstLargeArrayPop(__int64 a1, unsigned __int8 *a2)
{
unsigned __int8 v2; // r8
__int64 result; // rax
v2 = *a2; /*0x132b8*/
if ( *a2 >= *(_BYTE *)(a1 + 224) ) /*0x132c2*/
return 0; /*0x132d7*/
result = *(_QWORD *)(a1 + 8LL * v2 + 232); /*0x132cb*/
*a2 = v2 + 1; /*0x132d3*/
return result; /*0x132d6*/
}
// Function: RstConfigArrayNotifyRemove @ 0x132dc (0x8f bytes)
// Index: 525/906
__int64 __fastcall RstConfigArrayNotifyRemove(__int64 a1, __int64 a2)
{
__int64 result; // rax
__int16 v5; // di
__int64 v6; // rdx
result = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), a2 + 28); /*0x13303*/
v5 = 0; /*0x13308*/
if ( result ) /*0x1330d*/
{
RstDeviceSetOnlineFlag(result); /*0x13312*/
if ( *(_BYTE *)(a1 + 224) ) /*0x13317*/
{
do /*0x1334b*/
RstRaidOpMarkMemberFailed(*(_QWORD *)(**(_QWORD **)(a1 + 8LL * v5++ + 232) + 160LL), a2); /*0x13339*/
while ( v5 < *(unsigned __int8 *)(a1 + 224) ); /*0x1334b*/
}
LOBYTE(v6) = 1; /*0x13354*/
return (***(__int64 (__fastcall ****)(_QWORD, __int64))(a1 + 248))(*(_QWORD *)(a1 + 248), v6); /*0x13359*/
}
return result; /*0x13365*/
}
// Function: RstConfigBlockReset @ 0x1336c (0x71 bytes)
// Index: 526/906
__int64 __fastcall RstConfigBlockReset(__int64 a1)
{
__int64 v2; // rcx
*(_BYTE *)(a1 + 20) = 0; /*0x1337d*/
MemZero((_BYTE *)(a1 + 24), 0, 200); /*0x1338b*/
*(_BYTE *)(a1 + 224) = 0; /*0x13390*/
*(_QWORD *)(a1 + 232) = 0; /*0x13397*/
*(_QWORD *)(a1 + 240) = 0; /*0x1339e*/
v2 = *(_QWORD *)(a1 + 248); /*0x133a5*/
*(_DWORD *)(a1 + 280) = 0; /*0x133ac*/
*(_WORD *)(a1 + 284) = 0; /*0x133b2*/
*(_WORD *)(a1 + 408) = 0; /*0x133b9*/
*(_QWORD *)(a1 + 256) = 0; /*0x133c0*/
*(_BYTE *)(a1 + 264) = 0; /*0x133c7*/
return RstBufferReset(v2); /*0x133d3*/
}
// Function: Assert_118 @ 0x133e0 (0x158 bytes)
// Index: 527/906
__int64 __fastcall Assert_118(_QWORD *i)
{
unsigned __int8 j; // bp
unsigned __int8 n2; // cl
int v4; // r13d
__int64 v5; // r12
__int64 v6; // rsi
__int64 v7; // rbx
__int64 v8; // rax
__int64 v9; // rdx
unsigned __int8 k; // bl
int n24; // ecx
__int64 v12; // rcx
for ( j = 0; ; ++j ) /*0x133fb*/
{
n2 = *((_BYTE *)i + 224); /*0x13404*/
if ( n2 >= 2u ) /*0x13409*/
n2 = 2; /*0x1340b*/
if ( j >= n2 ) /*0x13413*/
break; /*0x13413*/
v4 = 0; /*0x1341d*/
v5 = *(_QWORD *)i[j + 29]; /*0x13428*/
RstDeviceSetStatusBits(v5); /*0x1342e*/
v6 = *(_QWORD *)(v5 + 160); /*0x1343b*/
if ( (*(_DWORD *)(i[j + 29] + 48LL) & 0x200) == 0 ) /*0x1344c*/
{
RstRaidDegradedStateHandler(*(_QWORD *)(v6 + 16)); /*0x13452*/
RstRaidDegradedStateHandler(*(_QWORD *)(v6 + 24)); /*0x1345b*/
}
v7 = *(_QWORD *)(v6 + 16); /*0x13460*/
if ( *(_DWORD *)(v7 + 8) != 3 ) /*0x13468*/
RstEntryBufferAllocSorted(*(_QWORD *)(Source_16 + 216), v5); /*0x1347b*/
if ( *(_DWORD *)(v7 + 8) == 2 && *(_DWORD *)(v6 + 12) != 1 ) /*0x1348a*/
{
if ( RstDeviceCanRemove(v7) ) /*0x1348f*/
{
v8 = RstDeviceGetNthActive(v7); /*0x1349b*/
if ( v8 ) /*0x134a3*/
{
Assert_79(v6, v8); /*0x134ab*/
LOBYTE(v9) = 1; /*0x134b7*/
(**(void (__fastcall ***)(_QWORD, __int64))i[31])(i[31], v9); /*0x134bc*/
}
}
else
{
RstLinkedListFindNth(v7, j); /*0x134c3*/
}
}
for ( k = 0; k < *((_BYTE *)i + 20); ++k ) /*0x134ca*/
{
n24 = 24; /*0x134d2*/
if ( k < 0x19u ) /*0x134da*/
n24 = k; /*0x134da*/
v12 = *(_QWORD *)(i[n24 + 3] + 48LL); /*0x134e5*/
if ( (*(_DWORD *)(v12 + 136) & 0x10) != 0 ) /*0x134f4*/
v4 |= RstGetUint108(v12); /*0x134fb*/
}
RstSetUint108(v5, v4); /*0x1350b*/
}
return RstCfgCheckVolumeType((__int64)i); /*0x1352a*/
}
// Function: RstVolGetStripeSize @ 0x13538 (0x3c bytes)
// Index: 528/906
char __fastcall RstVolGetStripeSize(__int64 a1)
{
char n24; // al
if ( (unsigned int)RstCfgCheckVolumeType(a1) != 2 ) /*0x13549*/
return *(_BYTE *)(a1 + 20); /*0x1356b*/
n24 = 24; /*0x1355d*/
if ( *(_BYTE *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 232) + 56LL) + 40LL) + 6LL) <= 0x18u ) /*0x13564*/
return *(_BYTE *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 232) + 56LL) + 40LL) + 6LL); /*0x13566*/
return n24; /*0x1356e*/
}
// Function: RstRaidVolumeTypeValid @ 0x13574 (0x22 bytes)
// Index: 529/906
bool __fastcall RstRaidVolumeTypeValid(__int64 a1)
{
int n5; // eax
n5 = RstCfgCheckVolumeType(a1); /*0x13578*/
return !n5 || n5 == 5 || n5 == 2; /*0x13591*/
}
// Function: Assert_38 @ 0x13598 (0xfd bytes)
// Index: 530/906
void __fastcall Assert_38(__int64 a1)
{
unsigned __int8 v1; // si
__int64 v3; // rdi
__int64 v4; // rdx
__int64 v5; // rcx
__int64 v6; // r12
__int64 v7; // rbx
__int64 v8; // rax
__int64 v9; // rax
v1 = 0; /*0x135b1*/
if ( !*(_BYTE *)(a1 + 224) ) /*0x135be*/
goto LABEL_13; /*0x135be*/
v3 = *(_QWORD *)(a1 + 232); /*0x135c4*/
v1 = 1; /*0x135cb*/
while ( v3 ) /*0x13674*/
{
if ( RstLinkedListFindByKey(Source_16, v3 + 16) && (*(_DWORD *)(v3 + 80) == 2 || *(_DWORD *)(v3 + 80) == 4) ) /*0x135f2*/
{
v6 = *(_QWORD *)(v3 + 72); /*0x135f4*/
if ( v6 ) /*0x135fb*/
{
v7 = *(_QWORD *)(*(_QWORD *)(a1 + 248) + 8LL); /*0x13607*/
v8 = RstBufferAdvancePtr(*(_QWORD *)(v3 + 72)); /*0x1360b*/
RstBufferCopyEntry(v8, v7, v3); /*0x13619*/
if ( (unsigned __int8)Assert_64(v6) ) /*0x13621*/
Assert_40(v6); /*0x1362d*/
}
else if ( (unsigned __int8)RstDebugEnabled(v5, v4) ) /*0x13634*/
{
DebugAssert("CfgArray.cpp", 0x265u, "((BOOLEAN)(0==1))"); /*0x13650*/
}
}
if ( v1 >= *(_BYTE *)(a1 + 224) ) /*0x1365c*/
{
LABEL_13:
v3 = 0; /*0x1366f*/
}
else
{
v9 = v1++; /*0x1365e*/
v3 = *(_QWORD *)(a1 + 8 * v9 + 232); /*0x13665*/
}
}
}
// Function: RstMemRangeCoalesce @ 0x13698 (0xa3 bytes)
// Index: 531/906
__int64 __fastcall RstMemRangeCoalesce(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
unsigned __int64 v4; // r12
unsigned __int64 v6; // rbx
__int64 result; // rax
unsigned __int64 v10; // r8
__int64 v11; // r8
unsigned __int64 v12; // r9
unsigned __int64 v13; // rdx
v4 = a3 + a4; /*0x136b1*/
v6 = a3; /*0x136b8*/
result = RstArrayRegionFind(a1, a2, a3, a3 + a4); /*0x136c4*/
if ( !result ) /*0x136cc*/
return RstArrayEntryInsert(a1, a2, v10, a4); /*0x136cc*/
v11 = *(_QWORD *)(result + 16); /*0x136ce*/
v12 = *(_QWORD *)(result + 8); /*0x136d2*/
v13 = v11 + v12; /*0x136d6*/
if ( v11 == a4 && v12 == v6 ) /*0x136e2*/
return result; /*0x136e2*/
if ( v13 <= v6 || v4 <= v12 ) /*0x136ec*/
{
v10 = v6; /*0x1370f*/
return RstArrayEntryInsert(a1, a2, v10, a4); /*0x1371b*/
}
if ( v12 < v6 ) /*0x136f4*/
v6 = *(_QWORD *)(result + 8); /*0x136f4*/
if ( v13 < v4 ) /*0x136fb*/
v13 = v4; /*0x136fb*/
return RstBufferSetDouble(result, v6, v13 - v6); /*0x13734*/
}
// Function: RstJournalFindMinLba @ 0x1373c (0x43 bytes)
// Index: 532/906
unsigned __int64 __fastcall RstJournalFindMinLba(__int64 a1)
{
unsigned __int8 v1; // dl
unsigned __int64 v2; // r8
__int64 v3; // rax
__int64 v4; // rax
unsigned __int64 v5; // r9
__int64 v6; // rax
v1 = 0; /*0x1373c*/
v2 = -1; /*0x1373e*/
if ( !*(_BYTE *)(a1 + 20) ) /*0x13745*/
goto LABEL_8; /*0x13745*/
v3 = *(_QWORD *)(a1 + 24); /*0x13747*/
v1 = 1; /*0x1374b*/
while ( v3 ) /*0x13779*/
{
v4 = *(_QWORD *)(v3 + 48); /*0x1374f*/
v5 = *(_QWORD *)(v4 + 88); /*0x13753*/
if ( v5 && v5 < v2 ) /*0x1375f*/
v2 = *(_QWORD *)(v4 + 88); /*0x1375f*/
if ( v1 >= *(_BYTE *)(a1 + 20) ) /*0x13766*/
{
LABEL_8:
v3 = 0; /*0x13774*/
}
else
{
v6 = v1++; /*0x13768*/
v3 = *(_QWORD *)(a1 + 8 * v6 + 24); /*0x1376d*/
}
}
return v2; /*0x1377e*/
}
// Function: Assert_68 @ 0x13780 (0x5d bytes)
// Index: 533/906
__int64 __fastcall Assert_68(__int64 a1, __int64 a2)
{
if ( (unsigned __int8)RstDebugEnabled(a1, a2) && !*(_DWORD *)(a1 + 280) ) /*0x13792*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x137ae*/
return RstJournalFindMinLba(a1) - (((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(a1 + 280) + 161); /*0x137d7*/
}
// Function: RstJournalInit @ 0x137e0 (0x51 bytes)
// Index: 534/906
__int64 __fastcall RstJournalInit(__int64 a1)
{
__int64 v1; // rdi
__int64 v3; // rax
v1 = 0; /*0x137ea*/
*(_QWORD *)(a1 + 8) = 0; /*0x137ef*/
*(_QWORD *)a1 = 0; /*0x137f3*/
*(_DWORD *)(a1 + 16) = 0; /*0x137f6*/
v3 = RstMemPoolAlloc(64); /*0x137fc*/
if ( v3 ) /*0x13804*/
v1 = RstJournalSuperblockInit(v3, a1); /*0x13811*/
*(_QWORD *)(a1 + 248) = v1; /*0x13817*/
RstConfigBlockReset(a1); /*0x1381e*/
return a1; /*0x1382b*/
}
// Function: Assert_109 @ 0x13834 (0x34 bytes)
// Index: 535/906
__int64 Assert_109__int64 a1)
{
unsigned __int8 v2; // bl
__int64 v3; // rdx
unsigned __int64 v4; // rax
v2 = RstVolGetFirstStripeSize(); /*0x13849*/
v4 = Assert_68(a1, v3); /*0x1384b*/
return Assert_26(a1, v4, v2); /*0x1385e*/
}
// Function: Assert_11 @ 0x13868 (0x1da bytes)
// Index: 536/906
void __fastcall Assert_11(__int64 a1)
{
unsigned __int64 n3_3; // rsi
__int64 v3; // rdx
unsigned __int64 n3_6; // rdi
__int16 v5; // dx
__int16 n3_1; // dx
int n3; // ecx
__int16 i; // r12
int n3_2; // ecx
unsigned __int64 n3_4; // r13
__int64 v11; // rax
unsigned __int64 n3_5; // rbp
__int16 n4; // cx
__int64 v14; // r14
__int16 n5; // r9
__int64 v16; // rbp
RstArraySortEntries(a1); /*0x13887*/
*(_WORD *)(a1 + 284) = 0; /*0x13892*/
n3_3 = 0; /*0x1389a*/
n3_6 = Assert_68(a1, v3); /*0x138a2*/
if ( !n3_6 ) /*0x138a8*/
{
v5 = *(_WORD *)(a1 + 408); /*0x138aa*/
if ( !v5 ) /*0x138b5*/
return; /*0x138b5*/
n3_1 = v5 - 1; /*0x138bb*/
n3 = 3; /*0x138be*/
if ( n3_1 < 4 ) /*0x138c9*/
n3 = n3_1; /*0x138c9*/
n3_6 = *(_QWORD *)(a1 + 24LL * n3 + 424) + *(_QWORD *)(a1 + 24LL * n3 + 432); /*0x138db*/
}
for ( i = 0; i < *(__int16 *)(a1 + 408); ++i ) /*0x138ef*/
{
n3_2 = 3; /*0x138fe*/
if ( i < 4 ) /*0x13903*/
n3_2 = i; /*0x13903*/
n3_4 = *(_QWORD *)(a1 + 24LL * n3_2 + 424); /*0x1390d*/
v11 = *(_QWORD *)(a1 + 24LL * n3_2 + 432); /*0x13915*/
n3_5 = n3_4 + v11; /*0x1391d*/
if ( n3_4 + v11 <= n3_6 ) /*0x13925*/
{
if ( n3_4 + v11 == n3_6 ) /*0x13927*/
break; /*0x13927*/
if ( n3_5 >= n3_3 ) /*0x13930*/
{
if ( n3_4 > n3_3 ) /*0x13935*/
{
n4 = *(_WORD *)(a1 + 284); /*0x13939*/
if ( n4 >= 4 ) /*0x13944*/
break; /*0x13944*/
*(_WORD *)(a1 + 284) = n4 + 1; /*0x13952*/
v14 = a1 + 8 * (3LL * n4 + 36); /*0x13959*/
if ( RstDebugEnabled() && !*(_DWORD *)(a1 + 280) ) /*0x13967*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13983*/
RstBufferSetRange(v14, n3_3, n3_4 - n3_3, *(_DWORD *)(a1 + 280)); /*0x1399b*/
}
n3_3 = n3_5; /*0x139a0*/
}
}
}
n5 = *(_WORD *)(a1 + 284); /*0x139b5*/
if ( n5 < 5 && n3_3 < n3_6 ) /*0x139c7*/
{
*(_WORD *)(a1 + 284) = n5 + 1; /*0x139d6*/
v16 = a1 + 8 * (3LL * n5 + 36); /*0x139de*/
if ( RstDebugEnabled() ) /*0x139e2*/
{
if ( !*(_DWORD *)(a1 + 280) ) /*0x139ec*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13a08*/
}
RstBufferSetRange(v16, n3_3, n3_6 - n3_3, *(_DWORD *)(a1 + 280)); /*0x13a20*/
}
}
// Function: Assert_95 @ 0x13a44 (0x8d bytes)
// Index: 537/906
__int64 Assert_95__int64 a1, unsigned __int64 a2)
{
__int64 v4; // rdi
unsigned __int64 v5; // rbp
__int16 i; // bx
unsigned __int64 v7; // rax
Assert_11(a1); /*0x13a62*/
v4 = 0; /*0x13a67*/
v5 = -1; /*0x13a69*/
for ( i = 0; i < *(__int16 *)(a1 + 284); ++i ) /*0x13a77*/
{
v7 = *(_QWORD *)(a1 + 8 * (3LL * i + 36) + 8) - (unsigned int)RstBufferGetAvailable(a1 + 8 * (3LL * i + 36)); /*0x13a96*/
if ( v7 >= a2 && v7 < v5 ) /*0x13aa1*/
{
v4 = a1 + 8 * (3LL * i + 36); /*0x13aa3*/
v5 = v7; /*0x13aa6*/
}
}
return v4; /*0x13ac7*/
}
// Function: Assert_91 @ 0x13ad4 (0x9e bytes)
// Index: 538/906
unsigned __int64 Assert_91__int64 a1)
{
unsigned __int64 v2; // rsi
__int16 i; // di
_QWORD *v4; // rbp
unsigned __int64 v5; // r12
Assert_11(a1); /*0x13af0*/
*(_QWORD *)(a1 + 256) = -1; /*0x13af5*/
v2 = 0; /*0x13afd*/
for ( i = 0; i < *(__int16 *)(a1 + 284); ++i ) /*0x13b09*/
{
v4 = (_QWORD *)(a1 + 8 * (3LL * i + 36)); /*0x13b14*/
v5 = v4[1] - (unsigned int)RstBufferGetAvailable(v4); /*0x13b27*/
if ( v5 > v2 ) /*0x13b2d*/
{
v2 = v5; /*0x13b37*/
*(_QWORD *)(a1 + 256) = *v4 + (unsigned int)RstBufferGetAvailable(v4); /*0x13b41*/
}
}
return v2; /*0x13b6b*/
}
// Function: Assert_94 @ 0x13b74 (0x8e bytes)
// Index: 539/906
void __fastcall Assert_94(__int64 a1)
{
__int16 i; // dx
__int64 n2; // r8
__int16 n2_1; // r9
__int64 v5; // r10
Assert_11(a1); /*0x13b7d*/
for ( i = 0; i < *(__int16 *)(a1 + 408); ++i ) /*0x13b91*/
{
n2 = *(unsigned __int8 *)(a1 + 224); /*0x13b93*/
n2_1 = 0; /*0x13b9f*/
v5 = *(_QWORD *)(a1 + 24LL * i + 416); /*0x13baa*/
if ( *(_BYTE *)(a1 + 224) ) /*0x13b93*/
{
do /*0x13bd1*/
{
if ( *(_QWORD *)(a1 + 8LL * n2_1 + 232) == v5 ) /*0x13bc0*/
break; /*0x13bc0*/
++n2_1; /*0x13bc9*/
}
while ( n2_1 < *(unsigned __int8 *)(a1 + 224) ); /*0x13bd1*/
}
if ( n2_1 == (_DWORD)n2 && (unsigned __int8)n2 < 2u ) /*0x13be0*/
{
*(_QWORD *)(a1 + 8 * n2 + 232) = v5; /*0x13be2*/
++*(_BYTE *)(a1 + 224); /*0x13bea*/
}
}
}
// Function: Assert_123 @ 0x13c04 (0xc6 bytes)
// Index: 540/906
char Assert_123__int64 a1)
{
__int16 v2; // bx
char result; // al
__int16 v4; // si
_QWORD *v5; // rbx
v2 = 0; /*0x13c1d*/
if ( *(_BYTE *)(a1 + 20) ) /*0x13c20*/
{
do /*0x13c47*/
RstDeviceClearFlags(*(_QWORD *)(*(_QWORD *)(a1 + 8LL * v2++ + 24) + 48LL), 32770); /*0x13c38*/
while ( v2 < *(unsigned __int8 *)(a1 + 20) ); /*0x13c47*/
}
result = *(_BYTE *)(a1 + 224); /*0x13c49*/
if ( result ) /*0x13c52*/
{
*(_BYTE *)(a1 + 20) = 0; /*0x13c54*/
*(_WORD *)(a1 + 284) = 0; /*0x13c58*/
*(_WORD *)(a1 + 408) = 0; /*0x13c5f*/
*(_QWORD *)(a1 + 256) = 0; /*0x13c66*/
v4 = 0; /*0x13c6d*/
do /*0x13ca4*/
{
v5 = *(_QWORD **)(a1 + 8LL * v4 + 232); /*0x13c74*/
RstRaidMemberFindFirstActiveEx(v5); /*0x13c7f*/
RstDeviceLinkRaidConfig(v5, *v5); /*0x13c8a*/
Assert_131(v5); /*0x13c92*/
++v4; /*0x13c9e*/
}
while ( v4 < *(unsigned __int8 *)(a1 + 224) ); /*0x13ca4*/
*(_BYTE *)(a1 + 224) = 0; /*0x13ca9*/
return Assert_94(a1); /*0x13cb0*/
}
return result; /*0x13cc4*/
}
// Function: Assert_110 @ 0x13ccc (0x34 bytes)
// Index: 541/906
__int64 Assert_110__int64 a1)
{
unsigned __int8 v2; // bl
unsigned __int64 v3; // rax
v2 = RstVolGetFirstStripeSize(); /*0x13ce1*/
v3 = Assert_91(a1); /*0x13ce3*/
return Assert_26(a1, v3, v2); /*0x13cf6*/
}
// Function: Assert_2 @ 0x13d00 (0x2c8 bytes)
// Index: 542/906
unsigned __int64 __fastcall Assert_2(__int64 a1, unsigned __int16 n5)
{
unsigned __int16 v4; // bp
__int64 v5; // rdx
__int64 v6; // rcx
__int64 v7; // rdx
__int64 v8; // rcx
unsigned int v9; // esi
unsigned int v10; // ebx
__int64 v11; // rdx
__int64 v12; // rcx
unsigned __int64 v13; // rsi
unsigned __int64 v15; // rsi
__int64 v16; // rcx
unsigned __int64 v17; // rbx
unsigned __int8 v18; // al
unsigned __int64 v19; // r12
__int64 v20; // rcx
__int64 v21; // rdx
__int64 v22; // rcx
unsigned int v23; // esi
__int64 v24; // rcx
unsigned __int64 v25; // rbx
__int64 v26; // rdx
__int64 v27; // rdx
__int64 v28; // rcx
unsigned int v29; // ebx
v4 = (unsigned __int8)RstVolGetStripeSize(a1); /*0x13d29*/
if ( (unsigned __int8)RstDebugEnabled(v6, v5) && !*(_DWORD *)(a1 + 280) ) /*0x13d42*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13d58*/
v9 = *(_DWORD *)(a1 + 280); /*0x13d5d*/
if ( (unsigned __int8)RstDebugEnabled(v8, v7) && !*(_DWORD *)(a1 + 280) ) /*0x13d6c*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13d82*/
v10 = 0x100000 / v9 + 3 * (0x100000u / *(_DWORD *)(a1 + 280)); /*0x13da2*/
v13 = Assert_91(a1); /*0x13da9*/
if ( v13 < v10 ) /*0x13db1*/
return 0; /*0x13db1*/
v15 = v13 - v10; /*0x13dba*/
if ( *(_QWORD *)(a1 + 256) ) /*0x13dbd*/
{
if ( (unsigned __int8)RstDebugEnabled(v12, v11) && !*(_DWORD *)(a1 + 280) ) /*0x13dd0*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13de6*/
if ( v15 < 3 * (0x100000u / *(_DWORD *)(a1 + 280)) ) /*0x13e00*/
return 0; /*0x13db5*/
if ( (unsigned __int8)RstDebugEnabled(v16, 0x100000u % *(_DWORD *)(a1 + 280)) && !*(_DWORD *)(a1 + 280) ) /*0x13e0b*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13e21*/
v11 = 0x100000u % *(_DWORD *)(a1 + 280); /*0x13e2a*/
v15 -= 3 * (0x100000u / *(_DWORD *)(a1 + 280)); /*0x13e33*/
}
if ( (unsigned __int8)RstDebugEnabled(v12, v11) && !*(_DWORD *)(a1 + 280) ) /*0x13e3f*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13e55*/
v17 = v15 / (((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(a1 + 280)); /*0x13e71*/
if ( n5 == 5 ) /*0x13e79*/
--v4; /*0x13e80*/
v18 = RstBlockSizeToStatus(n5); /*0x13e87*/
v19 = v17 / v18; /*0x13e98*/
if ( (unsigned __int8)RstDebugEnabled(v20, v17 % v18) && !*(_DWORD *)(a1 + 280) ) /*0x13ea4*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13eba*/
v23 = *(_DWORD *)(a1 + 280); /*0x13ebf*/
if ( (unsigned __int8)RstDebugEnabled(v22, v21) && !*(_DWORD *)(a1 + 280) ) /*0x13ece*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13ee4*/
v25 = v19 * v4; /*0x13ef9*/
v26 = 0x100000 / v23 % *(_DWORD *)(a1 + 280); /*0x13efd*/
if ( v25 >= 805306368 * (0x100000 / v23 / *(_DWORD *)(a1 + 280)) - 1 ) /*0x13f0e*/
{
if ( (unsigned __int8)RstDebugEnabled(v24, v26) && !*(_DWORD *)(a1 + 280) ) /*0x13f19*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13f2f*/
v29 = *(_DWORD *)(a1 + 280); /*0x13f34*/
if ( (unsigned __int8)RstDebugEnabled(v28, v27) && !*(_DWORD *)(a1 + 280) ) /*0x13f43*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13f59*/
v26 = 0x100000 / v29 % *(_DWORD *)(a1 + 280); /*0x13f66*/
v25 = 805306368 * (0x100000 / v29 / *(_DWORD *)(a1 + 280)) - 1; /*0x13f72*/
}
if ( (unsigned __int8)RstDebugEnabled(v24, v26) ) /*0x13f74*/
{
if ( !*(_DWORD *)(a1 + 280) ) /*0x13f7d*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13f93*/
}
return v25 * (((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(a1 + 280)); /*0x13fbd*/
}
// Function: Assert_31 @ 0x13fc8 (0x136 bytes)
// Index: 543/906
char __fastcall Assert_31(__int64 a1, unsigned __int16 n5, char a3)
{
unsigned __int8 n24_1; // bl
unsigned __int64 v7; // rsi
unsigned __int8 v8; // r8
unsigned __int8 n2; // dl
int n2_1; // ecx
_DWORD *v11; // rcx
int n5_1; // eax
int n24; // ecx
if ( *(_BYTE *)(a1 + 224) >= 2u ) /*0x13fe4*/
return 0; /*0x13fe4*/
n24_1 = 0; /*0x13ff9*/
if ( (unsigned int)RstRaidCheckDiskCountValid(*(unsigned __int8 *)(a1 + 20), n5, a3) ) /*0x13ff4*/
return 0; /*0x13ff4*/
v7 = Assert_2(a1, n5); /*0x1400a*/
if ( RstDebugEnabled() && !*(_DWORD *)(a1 + 280) ) /*0x14016*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x14031*/
if ( (unsigned int)(v7 / (0x100000u / *(_DWORD *)(a1 + 280))) < 0x66 ) /*0x14050*/
return 0; /*0x14050*/
v8 = *(_BYTE *)(a1 + 224); /*0x14052*/
n2 = 0; /*0x14059*/
if ( v8 ) /*0x14063*/
{
do /*0x14068*/
{
n2_1 = 1; /*0x14068*/
if ( n2 < 2u ) /*0x1406d*/
n2_1 = n2; /*0x1406d*/
v11 = *(_DWORD **)(*(_QWORD *)(*(_QWORD *)(a1 + 8LL * n2_1 + 232) + 56LL) + 40LL); /*0x1407f*/
if ( *v11 == 2 || *v11 == 3 ) /*0x1408f*/
return 0; /*0x1408f*/
}
while ( ++n2 < v8 ); /*0x14068*/
}
n5_1 = RstCfgCheckVolumeType(a1); /*0x140a0*/
if ( n5_1 ) /*0x140a7*/
{
if ( n5_1 != 5 ) /*0x140ac*/
return 0; /*0x13fe8*/
}
if ( *(_BYTE *)(a1 + 20) ) /*0x140b2*/
{
while ( 1 ) /*0x140ba*/
{
n24 = 24; /*0x140ba*/
if ( n24_1 < 0x19u ) /*0x140c2*/
n24 = n24_1; /*0x140c2*/
if ( (*(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 8LL * n24 + 24) + 48LL) + 136LL) & 0x200) != 0 ) /*0x140dd*/
break; /*0x140dd*/
if ( ++n24_1 >= *(_BYTE *)(a1 + 20) ) /*0x140e9*/
return 1; /*0x140e9*/
}
return 0; /*0x140dd*/
}
return 1; /*0x140f8*/
}
// Function: RstDeviceSetDataPtr @ 0x14100 (0x5 bytes)
// Index: 544/906
void __fastcall RstDeviceSetDataPtr(__int64 a1, __int64 a2)
{
*(_QWORD *)(a1 + 40) = a2; /*0x14100*/
}
// Function: RstNvCacheEntryInit @ 0x14108 (0x50 bytes)
// Index: 545/906
__int64 __fastcall RstNvCacheEntryInit(__int64 a1)
{
__int64 v1; // rbx
v1 = a1 + 84; /*0x14110*/
*(_DWORD *)(a1 + 48) = 12; /*0x14114*/
*(_DWORD *)(a1 + 80) = 5; /*0x1411b*/
*(_QWORD *)a1 = 0; /*0x14122*/
*(_DWORD *)(a1 + 36) = 0; /*0x14125*/
*(_WORD *)(a1 + 52) = 0; /*0x14128*/
*(_QWORD *)(a1 + 72) = 0; /*0x1412c*/
MemZero((_BYTE *)(a1 + 84), 0, 16); /*0x14139*/
return RstStringCopyN(v1, &unk_2515A, 16); /*0x1414e*/
}
// Function: RstNvCacheEntryInitAndReset @ 0x14158 (0x2b bytes)
// Index: 546/906
__int64 __fastcall RstNvCacheEntryInitAndReset(__int64 a1)
{
RstNvCacheEntryInit(a1); /*0x14168*/
return RstRaidEntryReset(*(_QWORD *)(a1 + 56)); /*0x14179*/
}
// Function: RstConfigArrayGetMaxBlockSize @ 0x14184 (0x44 bytes)
// Index: 547/906
__int64 __fastcall RstConfigArrayGetMaxBlockSize(__int64 a1)
{
__int64 v1; // rdi
int v2; // ebx
v1 = *(_QWORD *)(*(_QWORD *)a1 + 160LL); /*0x14191*/
v2 = RstDeviceCheckNotSpare(*(_QWORD *)(v1 + 16)); /*0x141a5*/
if ( v2 < (int)RstDeviceCheckNotSpare(*(_QWORD *)(v1 + 24)) ) /*0x141ae*/
return (unsigned int)RstDeviceCheckNotSpare(*(_QWORD *)(v1 + 24)); /*0x141b9*/
return (unsigned int)v2; /*0x141c2*/
}
// Function: Assert_6 @ 0x141c8 (0x255 bytes)
// Index: 548/906
__int64 __fastcall Assert_6(__int64 *a1, __int64 n2)
{
int n2_1; // r12d
__int64 Source; // rcx
__int64 v6; // rax
_QWORD *v7; // rsi
unsigned __int8 v8; // bl
__int16 v9; // dx
_QWORD *v10; // rax
_BYTE *Source_1; // rbx
__int64 Source_2; // rax
__int64 v13; // rdx
__int64 v14; // rax
__int64 Destination; // rbp
__int64 v16; // rbp
__int64 v17; // rax
__int64 v18; // rdx
n2_1 = n2; /*0x141e4*/
if ( *(_WORD *)(*(_QWORD *)(a1[7] + 40) + 4LL) != 5 ) /*0x141f4*/
return 41; /*0x141fb*/
Source = Source_16; /*0x14200*/
v6 = *(_QWORD *)(Source_16 + 216); /*0x1420a*/
v7 = 0; /*0x14211*/
v8 = 0; /*0x14214*/
if ( *(_WORD *)v6 ) /*0x14217*/
{
v9 = 0; /*0x1421d*/
do /*0x1424e*/
{
v10 = RstLinkedListGetNth((_QWORD **)(v6 + 16), v9); /*0x14224*/
if ( *((_WORD *)v10 + 28) && *((_BYTE *)v10 + 58) == 3 ) /*0x14234*/
v7 = v10; /*0x14234*/
Source = Source_16; /*0x14238*/
++v8; /*0x1423f*/
v6 = *(_QWORD *)(Source_16 + 216); /*0x14241*/
v9 = v8; /*0x14248*/
}
while ( v8 < (unsigned int)*(_WORD *)v6 ); /*0x1424e*/
}
Source_1 = 0; /*0x14250*/
if ( a1[9] ) /*0x14253*/
{
Source_2 = RstDeviceDerefPtr(a1[9]); /*0x1425d*/
Source = Source_16; /*0x14262*/
Source_1 = (_BYTE *)Source_2; /*0x14269*/
}
if ( n2_1 != 2 && n2_1 != 4 ) /*0x1427a*/
{
if ( Source_1 ) /*0x14283*/
{
if ( RstDebugEnabled() && *((_DWORD *)a1 + 20) != 2 && *((_DWORD *)a1 + 20) != 4 ) /*0x14299*/
DebugAssert( /*0x142ae*/
"CfgRaidDev.cpp",
0x1FCu,
"rwhPolicy == RwhOnJournalDrive || rwhPolicy == RwhJournalingDriveCircular");
Assert_55(Source_1, (__int64)a1); /*0x142b9*/
}
if ( RstDebugEnabled() ) /*0x142be*/
{
if ( v7 ) /*0x142cb*/
DebugAssert("CfgRaidDev.cpp", 0x200u, "pRwhJd == 0"); /*0x142e0*/
}
v14 = *a1; /*0x142e5*/
*((_DWORD *)a1 + 20) = n2_1; /*0x142e8*/
LOBYTE(v13) = 1; /*0x142ec*/
(***(void (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(v14 + 144) + 248LL))( /*0x142ff*/
*(_QWORD *)(*(_QWORD *)(v14 + 144) + 248LL),
v13);
LABEL_35:
Assert_114(*(_QWORD *)(*a1 + 160)); /*0x143ec*/
return 0; /*0x143fd*/
}
if ( !v7 ) /*0x14309*/
return 42; /*0x14309*/
Destination = RstBufferPoolFindEntry(Source + 224, v7[6]); /*0x1431f*/
if ( !RstDebugEnabled() ) /*0x1432a*/
goto LABEL_27; /*0x1432a*/
if ( !Destination ) /*0x1432f*/
{
DebugAssert("CfgRaidDev.cpp", 0x1D3u, "pNewJd"); /*0x14344*/
LABEL_27:
if ( !Destination ) /*0x1434c*/
return 42; /*0x1434c*/
}
v16 = RstRaidEntryLookup(Destination); /*0x14352*/
if ( RstDebugEnabled() ) /*0x1435d*/
{
if ( v16 ) /*0x1436a*/
{
LABEL_32:
if ( Source_1 ) /*0x1438c*/
Assert_55(Source_1, (__int64)a1); /*0x14394*/
*((_DWORD *)a1 + 20) = n2_1; /*0x14399*/
MemZero((_BYTE *)a1 + 84, 0, 16); /*0x143ac*/
RstStringCopyN((__int64)a1 + 84, (__int64)v7 + 18, 16); /*0x143bc*/
v17 = *a1; /*0x143c1*/
a1[9] = v16; /*0x143c4*/
LOBYTE(v18) = 1; /*0x143cf*/
(***(void (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(v17 + 144) + 248LL))( /*0x143db*/
*(_QWORD *)(*(_QWORD *)(v17 + 144) + 248LL),
v18);
Assert_38(*(_QWORD *)(*a1 + 144)); /*0x143e7*/
goto LABEL_35; /*0x143e7*/
}
DebugAssert("CfgRaidDev.cpp", 0x1DCu, "pNewJdPplMpbMgr"); /*0x1437f*/
}
if ( v16 ) /*0x14387*/
goto LABEL_32; /*0x14387*/
return 42; /*0x14413*/
}
// Function: RstCfgRaidDevLookup @ 0x14420 (0x4b bytes)
// Index: 549/906
char __fastcall RstCfgRaidDevLookup(__int64 a1)
{
__int64 v1; // rdx
__int64 v2; // rbx
__int64 v3; // rax
if ( *(_QWORD *)(a1 + 72) ) /*0x14426*/
v1 = RstDeviceGetContext88(); /*0x14434*/
else
v1 = 0; /*0x14439*/
if ( !v1 ) /*0x1443e*/
return -1; /*0x14463*/
v2 = *(_QWORD *)(Source_16 + 216); /*0x14447*/
v3 = RstLinkedListFindData(v2, v1); /*0x14451*/
return RstLinkedListIndexOf(v2, v3); /*0x14465*/
}
// Function: RstDeviceLinkRaidConfig @ 0x1446c (0x26 bytes)
// Index: 550/906
char __fastcall RstDeviceLinkRaidConfig(__int64 a1, __int64 a2)
{
char result; // al
result = RstRaidConfigFromDiskInfo(*(_QWORD *)(a1 + 56), *(_QWORD *)(a2 + 160)); /*0x14480*/
**(_QWORD **)(a1 + 56) = a1; /*0x14489*/
return result; /*0x1448c*/
}
// Function: RstRaidMemberFindFirstActiveEx @ 0x14494 (0x2c bytes)
// Index: 551/906
__int64 __fastcall RstRaidMemberFindFirstActiveEx(__int64 a1)
{
__int64 v1; // rbx
__int64 result; // rax
v1 = *(_QWORD *)(a1 + 56); /*0x1449a*/
result = RstRaidMemberFirstActive(*(_QWORD *)(v1 + 40)); /*0x144a2*/
if ( !result ) /*0x144aa*/
{
if ( *(_DWORD *)(v1 + 8) ) /*0x144ac*/
return RstRaidMemberFirstActive(*(_QWORD *)(v1 + 48)); /*0x144b5*/
}
return result; /*0x144ba*/
}
// Function: RstDeviceGetParentOrSpare @ 0x144c0 (0x18 bytes)
// Index: 552/906
__int64 __fastcall RstDeviceGetParentOrSpare(__int64 a1, int a2)
{
__int64 v2; // rax
v2 = *(_QWORD *)(a1 + 56); /*0x144c0*/
if ( *(_DWORD *)(v2 + 8) && a2 ) /*0x144cc*/
return *(_QWORD *)(v2 + 48); /*0x144ce*/
else
return *(_QWORD *)(v2 + 40); /*0x144d3*/
}
// Function: RstDeviceMemberIsNvme @ 0x144d8 (0x9 bytes)
// Index: 553/906
char __fastcall RstDeviceMemberIsNvme(__int64 a1)
{
return RstRaidMemberIsNvme(*(_QWORD *)(a1 + 56));
}
// Function: RstNvCacheRaidConfigInit @ 0x144e4 (0x37 bytes)
// Index: 554/906
__int64 __fastcall RstNvCacheRaidConfigInit(__int64 a1)
{
__int64 v2; // rcx
__int64 v3; // rax
v2 = RstMemPoolAlloc(64); /*0x144f7*/
v3 = 0; /*0x144fa*/
if ( v2 ) /*0x144ff*/
v3 = RstRaidConfigInfoInit(v2); /*0x14501*/
*(_QWORD *)(a1 + 56) = v3; /*0x14509*/
RstNvCacheEntryInit(a1); /*0x1450d*/
return a1; /*0x14515*/
}
// Function: RstCfgRaidDevCopy @ 0x1451c (0xcc bytes)
// Index: 555/906
__int64 __fastcall RstCfgRaidDevCopy(__int64 a1, __int64 Source, __int64 a3)
{
RstNvCacheEntryInitAndReset(a1); /*0x1453d*/
StrnCpy((CHAR16 *)(a1 + 16), (const CHAR16 *)Source, 0x10u); /*0x1454f*/
*(_BYTE *)(a1 + 32) = 0; /*0x14554*/
*(_DWORD *)(a1 + 36) = *(unsigned __int8 *)(Source + 32); /*0x1455c*/
*(_QWORD *)(a1 + 40) = *(unsigned int *)(Source + 16) + ((unsigned __int64)*(unsigned int *)(Source + 20) << 32); /*0x14576*/
*(_DWORD *)(a1 + 48) = *(_DWORD *)(Source + 24); /*0x1457d*/
*(_WORD *)(a1 + 64) = *(_WORD *)(Source + 40); /*0x14584*/
*(_WORD *)(a1 + 52) = *(_WORD *)(Source + 36); /*0x1458c*/
**(_QWORD **)(a1 + 56) = a1; /*0x14594*/
RstRaidConfigFromHiiEntry(*(_QWORD *)(a1 + 56), Source + 80, a3, 0); /*0x1459b*/
*(_QWORD *)(a1 + 8) = 0; /*0x145a0*/
*(_BYTE *)(a1 + 66) = *(_BYTE *)(Source + 34); /*0x145aa*/
*(_DWORD *)(a1 + 80) = *(unsigned __int8 *)(Source + 50); /*0x145b9*/
MemZero((_BYTE *)(a1 + 84), 0, 16); /*0x145bc*/
return RstStringCopyN(a1 + 84, Source + 51, 16); /*0x145de*/
}
// Function: Assert_131 @ 0x145e8 (0x54 bytes)
// Index: 556/906
__int64 Assert_131__int64 *a1)
{
__int64 v2; // rdi
__int64 result; // rax
RstRaidConfigFromDiskInfo(a1[7], *(_QWORD *)(*a1 + 160)); /*0x14603*/
*(_QWORD *)a1[7] = a1; /*0x1460f*/
v2 = a1[7]; /*0x14612*/
result = Assert_99(*(_QWORD *)(v2 + 40), (__int64)a1); /*0x1461a*/
if ( *(_DWORD *)(v2 + 8) ) /*0x1461f*/
return Assert_99(*(_QWORD *)(v2 + 48), (__int64)a1); /*0x1462c*/
return result; /*0x14636*/
}
// Function: Assert_132 @ 0x1463c (0x53 bytes)
// Index: 557/906
__int64 Assert_132__int64 *a1)
{
__int64 v2; // rax
__int64 result; // rax
v2 = RstRaidMemberFindFirstActiveEx(a1); /*0x14645*/
a1[1] = v2; /*0x1464a*/
if ( !v2 ) /*0x14651*/
a1[1] = RstConfigBlockClone(*(_QWORD *)(Source_16 + 216)); /*0x14666*/
Assert_131(a1); /*0x1466d*/
Assert_94(a1[1]); /*0x14676*/
result = a1[1]; /*0x1467e*/
*(_QWORD *)(*a1 + 144) = result; /*0x14682*/
return result; /*0x14689*/
}
// Function: Assert_83 @ 0x14690 (0xdc bytes)
// Index: 558/906
__int64 Assert_83__int64 a1, __int64 a2)
{
__int64 v4; // rax
__int64 v5; // r11
__int64 v6; // rcx
int v7; // eax
*(_QWORD *)(a1 + 136) = a2; /*0x1469f*/
*(_QWORD *)a2 = a1; /*0x146a6*/
RstStringCopyN(a1 + 112, a2 + 16, 16); /*0x146bc*/
*(_BYTE *)(a1 + 128) = 0; /*0x146c6*/
v4 = RstMemPoolAlloc(96); /*0x146cd*/
if ( v4 ) /*0x146d5*/
v5 = Assert_17(v4, a1, *(_QWORD *)(a2 + 56), 0); /*0x146ee*/
else
v5 = 0; /*0x146f3*/
*(_QWORD *)(a1 + 160) = v5; /*0x146f6*/
v6 = *(_QWORD *)(a2 + 40); /*0x146fd*/
*(_QWORD *)(a1 + 168) = v6; /*0x14708*/
*(_QWORD *)(a1 + 176) = v6; /*0x1470f*/
*(_DWORD *)(a1 + 152) = *(_DWORD *)(a2 + 36); /*0x14719*/
v7 = *(_DWORD *)(v5 + 64); /*0x1471f*/
*(_QWORD *)(a1 + 88) = v6; /*0x14723*/
*(_BYTE *)(a1 + 189) = 0; /*0x14731*/
*(_DWORD *)(a1 + 156) = v7; /*0x14738*/
*(_BYTE *)(a1 + 190) = 0; /*0x1473e*/
RstStringCopyN(a1 + 45, "Intel ", 6); /*0x14745*/
return RstStringCopyN(a1 + 51, a1 + 112, 17); /*0x14762*/
}
// Function: Assert_104 @ 0x1476c (0x50 bytes)
// Index: 559/906
void __fastcall Assert_104(__int64 a1)
{
char n2; // al
__int64 v2; // rbx
__int64 v3; // rcx
_BYTE *Source; // rax
n2 = 2; /*0x1477f*/
if ( *(_BYTE *)(*(_QWORD *)(a1 + 144) + 224LL) < 2u ) /*0x14786*/
n2 = *(_BYTE *)(*(_QWORD *)(a1 + 144) + 224LL); /*0x14788*/
v2 = *(_QWORD *)(a1 + 136); /*0x1478b*/
*(_BYTE *)(a1 + 188) = n2 == 1; /*0x14797*/
v3 = *(_QWORD *)(v2 + 72); /*0x1479d*/
if ( v3 ) /*0x147a4*/
{
Source = (_BYTE *)RstDeviceDerefPtr(v3); /*0x147a6*/
Assert_55(Source, v2); /*0x147b1*/
}
}
// Function: RstDeviceSetStatusBits @ 0x147bc (0x1a bytes)
// Index: 560/906
__int64 __fastcall RstDeviceSetStatusBits(__int64 a1)
{
*(_BYTE *)(a1 + 186) = 1; /*0x147bc*/
*(_BYTE *)(a1 + 187) = 1; /*0x147c3*/
return Assert_90(*(_QWORD *)(a1 + 160));
}
// Function: RstConfigArrayGetMinWriteSize @ 0x147d8 (0x47 bytes)
// Index: 561/906
void __fastcall RstConfigArrayGetMinWriteSize(__int64 a1)
{
__int64 v1; // r9
unsigned __int8 i; // dl
int n24; // ecx
unsigned int v5; // ecx
v1 = *(_QWORD *)(a1 + 144); /*0x147d8*/
*(_DWORD *)(a1 + 24) = -1; /*0x147df*/
for ( i = 0; i < *(_BYTE *)(v1 + 20); ++i ) /*0x147e8*/
{
n24 = 24; /*0x147f1*/
if ( i < 0x19u ) /*0x147f9*/
n24 = i; /*0x147f9*/
v5 = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(v1 + 8LL * n24 + 24) + 48LL) + 96LL); /*0x14808*/
if ( *(_DWORD *)(a1 + 24) > v5 ) /*0x1480f*/
*(_DWORD *)(a1 + 24) = v5; /*0x14811*/
}
}
// Function: RstDeviceSetNotificationFlag @ 0x14820 (0x15 bytes)
// Index: 562/906
__int64 __fastcall RstDeviceSetNotificationFlag(__int64 a1, char a2)
{
__int64 result; // rax
result = *(_QWORD *)(a1 + 136); /*0x14820*/
if ( a2 ) /*0x14829*/
*(_DWORD *)(result + 48) |= 0x10u; /*0x1482b*/
else
*(_DWORD *)(result + 48) &= ~0x10u; /*0x14830*/
return result; /*0x1482f*/
}
// Function: RstDeviceGetMemberId @ 0x14838 (0xc bytes)
// Index: 563/906
__int16 __fastcall RstDeviceGetMemberId(__int64 a1)
{
return *(_WORD *)(*(_QWORD *)(a1 + 136) + 64LL); /*0x14843*/
}
// Function: RstDeviceSetMemberInfo @ 0x14844 (0x13 bytes)
// Index: 564/906
__int64 __fastcall RstDeviceSetMemberInfo(__int64 a1, __int64 a2, unsigned __int8 a3, __int16 a4)
{
__int64 result; // rax
*(_WORD *)(a2 + 2) = a4; /*0x14848*/
*(_WORD *)a2 = a3; /*0x1484d*/
result = *(unsigned int *)(a2 + 16); /*0x14850*/
*(_DWORD *)(a2 + 4) = result; /*0x14853*/
return result; /*0x14856*/
}
// Function: RstCfgRaidDevCheckFlagBit4 @ 0x14858 (0x10 bytes)
// Index: 565/906
bool __fastcall RstCfgRaidDevCheckFlagBit4(__int64 a1)
{
return (*(_DWORD *)(*(_QWORD *)(a1 + 136) + 48LL) & 0x10) != 0; /*0x14867*/
}
// Function: RstHelper_4868 @ 0x14868 (0x76 bytes)
// Index: 566/906
__int64 RstHelper_4868gBit4__int64 a1, __int64 Source)
{
unsigned __int64 v2; // rsi
v2 = *(_QWORD *)(Source + 8); /*0x14877*/
if ( *(_QWORD *)(a1 + 176) < v2 /*0x148a7*/
|| *(_QWORD *)(a1 + 176) < v2 + *(_DWORD *)(Source + 16) / (unsigned int)HiiLibReturnZero(a1) )
{
return RstBufferSetHeader(Source, 5, 8, 0); /*0x148c9*/
}
else
{
return RstConfigReadDispatch(*(_QWORD *)(a1 + 160), Source); /*0x148b3*/
}
}
// Function: Assert_49 @ 0x148e0 (0xb1 bytes)
// Index: 567/906
__int64 __fastcall Assert_49(__int64 a1, __int16 n24, __int64 a3)
{
int v5; // eax
__int64 v6; // rdx
__int64 v7; // rcx
*(_QWORD *)(a1 + 16) = 0; /*0x148ea*/
*(_QWORD *)(a1 + 8) = 0; /*0x148ef*/
*(_QWORD *)(a1 + 160) = 0; /*0x148f4*/
*(_WORD *)(a1 + 130) = n24; /*0x148fc*/
*(_BYTE *)(a1 + 186) = 0; /*0x14903*/
*(_BYTE *)(a1 + 184) = 0; /*0x1490a*/
*(_BYTE *)(a1 + 185) = 0; /*0x14911*/
*(_QWORD *)a1 = off_23E90; /*0x14922*/
v5 = RstHelper_7a90(*(_QWORD *)(*(_QWORD *)(a3 + 56) + 40LL)); /*0x14930*/
*(_DWORD *)(a1 + 104) = v5; /*0x14935*/
if ( !v5 ) /*0x1493a*/
{
v7 = *(_QWORD *)(a3 + 56); /*0x1493c*/
if ( *(_DWORD *)(v7 + 8) ) /*0x14940*/
*(_DWORD *)(a1 + 104) = RstHelper_7a90(*(_QWORD *)(v7 + 48)); /*0x1494e*/
}
if ( (unsigned __int8)RstDebugEnabled(v7, v6) && !*(_DWORD *)(a1 + 104) ) /*0x1495a*/
DebugAssert("RaidDev.cpp", 0x4Au, "logBlockSize > 0"); /*0x14973*/
Assert_83(a1, a3); /*0x1497e*/
return a1; /*0x1498b*/
}
// Function: StrnCpy_w @ 0x14994 (0xb bytes)
// Index: 568/906
CHAR16 *StrnCpy_wCHAR16 *Destination, const CHAR16 *Source)
{
return StrnCpy(Destination, Source, 0x208u);
}
// Function: RstRaidMemberCheckActive @ 0x149a0 (0x34 bytes)
// Index: 569/906
char __fastcall RstRaidMemberCheckActive(__int64 a1, __int64 a2)
{
unsigned __int8 v2; // r8
v2 = 0; /*0x149a0*/
if ( !*(_BYTE *)(a1 + 42) ) /*0x149a3*/
return 1; /*0x149c4*/
while ( *(_QWORD *)(16 * (v2 + 7LL) + a1) != a2 ) /*0x149b9*/
{
if ( ++v2 >= *(_BYTE *)(a1 + 42) ) /*0x149c2*/
return 1; /*0x149c2*/
}
return *(_BYTE *)(16LL * v2 + a1 + 120); /*0x149c6*/
}
// Function: RstDeviceGetNthActive @ 0x149d4 (0x70 bytes)
// Index: 570/906
__int64 __fastcall RstDeviceGetNthActive(__int64 a1)
{
unsigned __int8 v1; // bl
__int64 i; // rsi
v1 = 0; /*0x149e8*/
for ( i = 0; v1 < *(_BYTE *)(a1 + 42); ++v1 ) /*0x149ef*/
{
if ( *(_BYTE *)(a1 + 16 * (v1 + 7LL) + 8) || (unsigned __int8)RstDeviceCheckOnline(*(_QWORD *)(a1 + 16 * (v1 + 7LL))) ) /*0x14a09*/
{
i = *(_QWORD *)(a1 + 16 * (v1 + 7LL)); /*0x14a12*/
*(_BYTE *)(a1 + 92) = v1; /*0x14a16*/
if ( !(unsigned __int8)RstDeviceCheckOnline(i) ) /*0x14a1c*/
break; /*0x14a23*/
}
}
return i; /*0x14a3e*/
}
// Function: RstDeviceMemberExists @ 0x14a44 (0x2a bytes)
// Index: 571/906
char __fastcall RstDeviceMemberExists(__int64 a1, __int64 a2)
{
unsigned __int8 v2; // r8
v2 = 0; /*0x14a44*/
if ( !*(_BYTE *)(a1 + 42) ) /*0x14a47*/
return 0; /*0x14a68*/
while ( a2 != *(_QWORD *)(16 * (v2 + 7LL) + a1) ) /*0x14a5d*/
{
if ( ++v2 >= *(_BYTE *)(a1 + 42) ) /*0x14a66*/
return 0; /*0x14a66*/
}
return 1; /*0x14a6a*/
}
// Function: RstDeviceGetMemberIndex @ 0x14a70 (0x78 bytes)
// Index: 572/906
unsigned __int8 __fastcall RstDeviceGetMemberIndex(__int64 a1, __int64 a2)
{
__int64 v2; // r9
unsigned __int8 v3; // r10
unsigned __int8 v4; // r11
__int64 v5; // rcx
char v6; // bl
__int64 v7; // rdi
char v8; // r10
unsigned __int8 result; // al
__int64 v10; // rcx
v2 = a1; /*0x14a7e*/
v3 = 0; /*0x14a81*/
v4 = *(_BYTE *)(a1 + 42); /*0x14a84*/
v5 = *(_QWORD *)(*(_QWORD *)(a1 + 16) + 24LL); /*0x14a88*/
v6 = a2; /*0x14a8c*/
if ( v4 ) /*0x14a91*/
{
while ( 1 ) /*0x14a9e*/
{
v7 = *(_QWORD *)(v2 + 16 * (v3 + 7LL)); /*0x14a9e*/
if ( !(unsigned __int8)RstDeviceMemberExists(v5, v7) ) /*0x14aa5*/
break; /*0x14aa5*/
v3 = v8 + 1; /*0x14aae*/
if ( v3 >= v4 ) /*0x14ab4*/
goto LABEL_4; /*0x14ab4*/
}
v10 = v7; /*0x14ae3*/
goto LABEL_7; /*0x14ae6*/
}
LABEL_4:
result = *(_BYTE *)(v2 + 92); /*0x14ab6*/
if ( result != 0xFF && result < v4 ) /*0x14ac1*/
{
v10 = *(_QWORD *)(v2 + 16 * (result + 7LL)); /*0x14acd*/
LABEL_7:
LOBYTE(a2) = v6; /*0x14ad1*/
return RstDeviceSetExtFlag(v10, a2); /*0x14ad3*/
}
return result; /*0x14add*/
}
// Function: RstRaidMemberFindLastActive @ 0x14ae8 (0x39 bytes)
// Index: 573/906
__int64 __fastcall RstRaidMemberFindLastActive(__int64 a1)
{
__int64 v1; // r8
unsigned __int8 i; // dl
v1 = 0; /*0x14ae8*/
for ( i = 0; i < *(_BYTE *)(a1 + 42); ++i ) /*0x14aee*/
{
if ( (*(_DWORD *)(*(_QWORD *)(a1 + 16 * (i + 7LL)) + 136LL) & 0x10) == 0 ) /*0x14b0e*/
{
v1 = *(_QWORD *)(a1 + 16 * (i + 7LL)); /*0x14b10*/
*(_BYTE *)(a1 + 92) = i; /*0x14b13*/
}
}
return v1; /*0x14b20*/
}
// Function: RstRaidDegradedStateHandler @ 0x14b24 (0xd4 bytes)
// Index: 574/906
void __fastcall RstRaidDegradedStateHandler(__int64 a1)
{
unsigned __int8 i; // di
int n23; // ecx
__int64 n23_1; // rdx
__int64 v5; // r8
int v6; // ecx
__int64 v7; // rdx
__int64 v8; // rax
__int64 v9; // rdx
void (__fastcall ***v10)(_QWORD, __int64); // rcx
if ( *(_DWORD *)(a1 + 8) == 3 ) /*0x14b3a*/
{
for ( i = 0; i < *(_BYTE *)(a1 + 42); ++i ) /*0x14b45*/
{
n23 = 23; /*0x14b53*/
if ( i < 0x18u ) /*0x14b58*/
n23 = i; /*0x14b58*/
n23_1 = n23; /*0x14b5b*/
v5 = 2 * (n23 + 7LL); /*0x14b62*/
v6 = *(_DWORD *)(*(_QWORD *)(a1 + 16 * (n23 + 7LL)) + 136LL); /*0x14b69*/
if ( (v6 & 4) == 0 && (v6 & 0x10) != 0 ) /*0x14b7e*/
{
v7 = 2 * n23_1; /*0x14b80*/
if ( *(_BYTE *)(a1 + 8 * v7 + 120) ) /*0x14b83*/
{
if ( !*(_WORD *)(a1 + 40) || *(_BYTE *)(a1 + 92) != i ) /*0x14b94*/
{
*(_BYTE *)(a1 + 8 * v7 + 120) = 0; /*0x14b96*/
RstDeviceClearFlags(*(_QWORD *)(a1 + 8 * v5), 64); /*0x14ba4*/
}
}
}
}
v8 = *(_QWORD *)(a1 + 16); /*0x14bb2*/
*(_DWORD *)(a1 + 8) = 0; /*0x14bb6*/
*(_BYTE *)(v8 + 82) = 0; /*0x14bbc*/
(**(void (__fastcall ***)(__int64))a1)(a1); /*0x14bc3*/
if ( *(_DWORD *)(a1 + 8) != 3 ) /*0x14bc9*/
{
LOBYTE(v9) = 1; /*0x14bcf*/
v10 = *(void (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 32LL) + 144LL) /*0x14bdc*/
+ 248LL);
(**v10)(v10, v9); /*0x14be6*/
}
}
}
// Function: RstRaidOpFindFailedDisk @ 0x14bf8 (0xb3 bytes)
// Index: 575/906
char __fastcall RstRaidOpFindFailedDisk(__int64 a1)
{
unsigned __int8 n23_1; // bl
char i; // si
int n23; // ecx
__int64 v5; // rdx
int v6; // ecx
__int64 v7; // rbx
_QWORD *v8; // rax
n23_1 = 0; /*0x14c07*/
for ( i = -1; n23_1 < *(_BYTE *)(a1 + 42); ++n23_1 ) /*0x14c0f*/
{
n23 = 23; /*0x14c1a*/
if ( n23_1 < 0x18u ) /*0x14c1f*/
n23 = n23_1; /*0x14c1f*/
v5 = *(_QWORD *)(a1 + 16 * (n23 + 7LL)); /*0x14c2c*/
v6 = *(_DWORD *)(v5 + 136); /*0x14c30*/
if ( (v6 & 0x10) != 0 ) /*0x14c3d*/
{
if ( (v6 & 4) != 0 ) /*0x14c45*/
{
if ( *(_BYTE *)(a1 + 92) != n23_1 ) /*0x14c4a*/
{
v7 = *(_QWORD *)(Source_16 + 216); /*0x14c53*/
v8 = RstLinkedListFindData(v7, v5); /*0x14c5d*/
return RstLinkedListIndexOf(v7, v8); /*0x14c6d*/
}
}
else if ( *(_WORD *)(a1 + 40) == 5 && RstCfgRaidDevCheckFlagBit4(*(_QWORD *)(a1 + 24)) ) /*0x14c8e*/
{
i = n23_1; /*0x14c9c*/
}
}
}
return i; /*0x14c7d*/
}
// Function: RstDeviceCountFailedMembers @ 0x14cac (0x77 bytes)
// Index: 576/906
char __fastcall RstDeviceCountFailedMembers(__int64 a1, _BYTE *a2)
{
char v3; // r8
unsigned __int16 i; // r9
int v5; // ecx
v3 = 0; /*0x14cb9*/
for ( i = 0; i < *(unsigned __int8 *)(a1 + 42); ++i ) /*0x14cc0*/
{
v5 = *(_DWORD *)(*(_QWORD *)(a1 + 16 * (i + 7LL)) + 136LL); /*0x14cd5*/
if ( (v5 & 0x10) == 0 || (v5 & 4) != 0 || (v5 & 0x1000000) != 0 ) /*0x14cf5*/
++v3; /*0x14cf7*/
if ( (v5 & 0x10) != 0 && (v5 & 0x1000000) != 0 ) /*0x14d05*/
*a2 = 1; /*0x14d07*/
}
return v3; /*0x14d22*/
}
// Function: RstLinkedListFindNth @ 0x14d24 (0x155 bytes)
// Index: 577/906
__int64 __fastcall RstLinkedListFindNth(__int64 a1, unsigned __int8 j)
{
unsigned __int8 j_1; // si
__int64 v3; // r14
unsigned __int8 n24; // di
__int16 v5; // ax
_QWORD *v6; // rax
_QWORD *v7; // rbx
__int64 v8; // rax
__int64 v9; // r15
__int64 v10; // r13
bool v11; // si
int v12; // ebp
__int64 v13; // r12
int v14; // eax
__int64 v16; // rax
unsigned __int8 v18; // [rsp+70h] [rbp+18h] BYREF
unsigned __int16 n24_1; // [rsp+78h] [rbp+20h]
j_1 = j; /*0x14d46*/
v3 = *(_QWORD *)(Source_16 + 216); /*0x14d49*/
n24 = 0; /*0x14d50*/
n24_1 = *(_WORD *)v3; /*0x14d57*/
if ( n24_1 ) /*0x14d60*/
{
v5 = 0; /*0x14d66*/
while ( 1 ) /*0x14d70*/
{
v6 = RstLinkedListGetNth((_QWORD **)(v3 + 16), v5); /*0x14d70*/
v7 = v6; /*0x14d75*/
if ( v6 ) /*0x14d7b*/
{
if ( (*(_BYTE *)(v6[6] + 136LL) & 1) != 0 ) /*0x14d8c*/
{
v8 = RstArrayEntryLookup(v3, j_1); /*0x14d99*/
v9 = v7[6]; /*0x14d9e*/
if ( v8 ) /*0x14da5*/
{
if ( v9 ) /*0x14dae*/
{
v10 = *(_QWORD *)(v8 + 8); /*0x14db4*/
if ( v10 ) /*0x14dbb*/
break; /*0x14dbb*/
}
}
}
}
LABEL_22:
v5 = ++n24; /*0x14e50*/
if ( n24 >= n24_1 ) /*0x14e59*/
return 15; /*0x14e59*/
}
v11 = 0; /*0x14dc1*/
v12 = -1; /*0x14dc4*/
v18 = 0; /*0x14dc7*/
while ( 1 ) /*0x14e3e*/
{
v16 = RstSmallArrayPop(v10, &v18); /*0x14e3e*/
if ( !v16 ) /*0x14e46*/
{
j_1 = j; /*0x14e48*/
goto LABEL_22; /*0x14e48*/
}
v13 = *(_QWORD *)(v16 + 48); /*0x14dce*/
v14 = RstHelper_02c0(v13); /*0x14dd5*/
if ( !v11 ) /*0x14ddf*/
{
if ( v12 == v14 ) /*0x14de3*/
{
if ( v12 != -1 ) /*0x14de8*/
goto LABEL_15; /*0x14de8*/
}
else
{
v11 = v12 != -1; /*0x14df8*/
}
v12 = v14; /*0x14dfb*/
}
LABEL_15:
if ( v13 && ((unsigned int)RstHelper_02c0(v9) == v14 || v11) && !(unsigned int)RstHelper_be04(j, n24, 0) ) /*0x14e20*/
{
RstProtocolCallback42(); /*0x14e2a*/
return 0; /*0x14e31*/
}
}
}
return 15; /*0x14e69*/
}
// Function: RstDeviceCanRemove @ 0x14e7c (0x88 bytes)
// Index: 578/906
bool __fastcall RstDeviceCanRemove(__int64 a1)
{
char v2; // bl
unsigned __int8 v3; // al
__int64 v4; // rax
char v6; // [rsp+30h] [rbp+8h] BYREF
v2 = 1; /*0x14e95*/
v6 = 0; /*0x14e99*/
v3 = RstDeviceCountFailedMembers(a1, &v6); /*0x14e9d*/
if ( *(_BYTE *)(a1 + 42) != 4 || *(_WORD *)(a1 + 40) != 1 ) /*0x14eaf*/
return v3 == 0; /*0x14eef*/
if ( v3 > 1u || v6 ) /*0x14eba*/
return 0; /*0x14eba*/
v4 = RstDeviceGetNthActive(a1); /*0x14ebf*/
if ( v4 ) /*0x14ec7*/
{
if ( !(unsigned __int8)RstDeviceCheckOnline(v4) ) /*0x14ecc*/
{
*(_BYTE *)(a1 + 16LL * *(unsigned __int8 *)(a1 + 92) + 120) = 0; /*0x14edd*/
return v2; /*0x14ee2*/
}
return 0; /*0x14ee4*/
}
return v2; /*0x14efe*/
}
// Function: RstDeviceCheckNotSpare @ 0x14f04 (0x14 bytes)
// Index: 579/906
__int64 __fastcall RstDeviceCheckNotSpare(__int64 a1)
{
if ( *(_WORD *)(a1 + 40) && *(_DWORD *)(a1 + 8) == 1 ) /*0x14f0f*/
return 0; /*0x14f11*/
else
return *(unsigned int *)(a1 + 8); /*0x14f14*/
}
// Function: RstSectorDivide @ 0x14f18 (0xd bytes)
// Index: 580/906
unsigned __int64 __fastcall RstSectorDivide(__int64 a1, unsigned __int64 Source_)
{
return Source_ / *(unsigned int *)(a1 + 80); /*0x14f24*/
}
// Function: RstRaidVolCreateWorker @ 0x14f28 (0x127 bytes)
// Index: 581/906
void __fastcall RstRaidVolCreateWorker(__int64 a1, __int64 a2, __int64 Source)
{
__int64 v6; // rdx
__int64 v7; // rcx
char v8; // r12
char v9; // si
void (__fastcall ***v10)(_QWORD, __int64); // rcx
__int64 v11; // rdx
void (__fastcall ***v12)(_QWORD, __int64); // rcx
*(_QWORD *)(a2 + 24) = Source; /*0x14f40*/
*(_BYTE *)(a2 + 67) = 0; /*0x14f44*/
RstRaidIoRequestInit(a2, a1, *(_BYTE *)(Source + 24), Source); /*0x14f5e*/
v7 = *(_QWORD *)(a1 + 16); /*0x14f67*/
v8 = *(_BYTE *)(v7 + 82); /*0x14f6b*/
if ( *(_BYTE *)(Source + 24) == 42 /*0x14f9c*/
&& !v8
&& (*(_WORD *)(*(_QWORD *)(v7 + 16) + 40LL) > 1u
|| *(_DWORD *)(v7 + 12) == 1 && *(_WORD *)(*(_QWORD *)(v7 + 24) + 40LL) > 1u)
&& *(int *)(a1 + 8) <= 1 )
{
*(_BYTE *)(v7 + 82) = 1; /*0x14f9e*/
LOBYTE(v6) = 1; /*0x14fa6*/
v9 = 1; /*0x14fb0*/
v10 = *(void (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(*(_QWORD *)(a1 + 24) + 144LL) + 248LL); /*0x14fb3*/
(**v10)(v10, v6); /*0x14fbd*/
}
else
{
v9 = 0; /*0x14fc1*/
}
do /*0x15006*/
{
if ( *(_BYTE *)(Source + 24) == 40 ) /*0x14fcb*/
{
(*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)a1 + 8LL))(a1, a2); /*0x14fd3*/
}
else
{
++*(_BYTE *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 32LL) + 190LL); /*0x14fe0*/
(*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)a1 + 16LL))(a1, a2); /*0x14fed*/
--*(_BYTE *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 32LL) + 190LL); /*0x14ff8*/
}
RstIoCompleteTransfer(a2); /*0x15001*/
}
while ( *(_DWORD *)(a2 + 672) ); /*0x15006*/
if ( v9 ) /*0x15012*/
{
LOBYTE(v11) = 1; /*0x15018*/
*(_BYTE *)(*(_QWORD *)(a1 + 16) + 82LL) = v8; /*0x1501b*/
v12 = *(void (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(*(_QWORD *)(a1 + 24) + 144LL) + 248LL); /*0x1502a*/
(**v12)(v12, v11); /*0x15034*/
}
}
// Function: RstRaidSetMemberActive @ 0x15050 (0x77 bytes)
// Index: 582/906
__int64 __fastcall RstRaidSetMemberActive(__int64 a1, unsigned __int8 n0x18)
{
__int64 result; // rax
if ( n0x18 < 0x18u ) /*0x15053*/
{
result = 2LL * n0x18; /*0x1506b*/
if ( !*(_BYTE *)(a1 + 16LL * n0x18 + 120) ) /*0x1506e*/
{
*(_BYTE *)(a1 + 16LL * n0x18 + 120) = 1; /*0x15075*/
result = RstConfigArrayNotifyRemove( /*0x15094*/
*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 32LL) + 144LL),
*(_QWORD *)(a1 + 16 * (n0x18 + 7LL)));
}
if ( *(_WORD *)(a1 + 40) ) /*0x15099*/
{
if ( *(int *)(a1 + 8) < 2 ) /*0x150af*/
{
*(_DWORD *)(a1 + 8) = 2; /*0x150b1*/
*(_BYTE *)(a1 + 92) = n0x18; /*0x150b8*/
}
}
else
{
return *(unsigned __int8 *)(a1 + 92); /*0x150a0*/
}
}
return result; /*0x150c6*/
}
// Function: RstRaidMemberMarkRemoving @ 0x150c8 (0x50 bytes)
// Index: 583/906
__int64 __fastcall RstRaidMemberMarkRemoving(__int64 a1, unsigned __int8 n0x18)
{
__int64 n0x18_1; // rax
__int64 v3; // rdx
__int64 result; // rax
if ( *(_DWORD *)(a1 + 8) != 3 ) /*0x150d3*/
{
*(_DWORD *)(a1 + 8) = 3; /*0x150d5*/
if ( n0x18 < 0x18u ) /*0x150df*/
{
n0x18_1 = n0x18; /*0x150e9*/
v3 = *(_QWORD *)(a1 + 16 * (n0x18 + 7LL)); /*0x150f6*/
*(_BYTE *)(a1 + 16 * n0x18_1 + 120) = 1; /*0x150fa*/
return RstConfigArrayNotifyRemove(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 32LL) + 144LL), v3); /*0x1510e*/
}
}
return result; /*0x15113*/
}
// Function: RstRaidMemberMarkFailed @ 0x15118 (0x55 bytes)
// Index: 584/906
__int64 __fastcall RstRaidMemberMarkFailed(__int64 a1, __int64 a2)
{
unsigned __int8 n0x18; // dl
RstDiskSetFlagBit2(a2, 1); /*0x1512d*/
n0x18 = 0; /*0x15132*/
if ( *(_BYTE *)(a1 + 42) ) /*0x15134*/
{
while ( *(_QWORD *)(a1 + 16 * (n0x18 + 7LL)) != a2 ) /*0x15147*/
{
if ( ++n0x18 >= *(_BYTE *)(a1 + 42) ) /*0x1514e*/
return (**(__int64 (__fastcall ***)(__int64))a1)(a1); /*0x1514e*/
}
RstRaidSetMemberActive(a1, n0x18); /*0x15155*/
}
return (**(__int64 (__fastcall ***)(__int64))a1)(a1);
}
// Function: RstRaidNotifyDiskDone @ 0x15170 (0x52 bytes)
// Index: 585/906
void __fastcall RstRaidNotifyDiskDone(__int64 a1, __int64 a2)
{
unsigned __int8 i; // bl
int n23; // eax
for ( i = 0; i < *(_BYTE *)(a2 + 67); ++i ) /*0x15187*/
{
n23 = 23; /*0x15190*/
if ( i < 0x18u ) /*0x1519c*/
n23 = i; /*0x1519c*/
RstRaidSetMemberActive(a1, *(_BYTE *)(n23 + a2 + 68)); /*0x151a6*/
}
}
// Function: RstVtableDispatch34 @ 0x151c4 (0x3c bytes)
// Index: 586/906
__int64 __fastcall RstVtableDispatch34(__int64 a1, int a2, __int64 a3, __int64 a4, __int64 a5)
{
__int64 result; // rax
if ( !a2 ) /*0x151d0*/
return (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64))(*(_QWORD *)a1 + 24LL))(a1, a3, a4, a5); /*0x151f8*/
if ( a2 == 1 ) /*0x151d5*/
return (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64))(*(_QWORD *)a1 + 32LL))(a1, a3, a4, a5); /*0x151e5*/
return result; /*0x151fb*/
}
// Function: RstSizeToBlocks @ 0x15200 (0x1d bytes)
// Index: 587/906
unsigned __int64 __fastcall RstSizeToBlocks(__int64 a1, unsigned __int64 a2)
{
__int16 v4; // cx
v4 = *(_WORD *)(a1 + 74); /*0x15206*/
if ( v4 ) /*0x1520d*/
return a2 >> v4; /*0x1520f*/
else
return a2 / *(unsigned __int16 *)(a1 + 72); /*0x15219*/
}
// Function: RstBlocksToSize @ 0x15220 (0x1b bytes)
// Index: 588/906
__int64 __fastcall RstBlocksToSize(__int64 a1, __int64 a2)
{
__int16 v2; // ax
v2 = *(_WORD *)(a1 + 74); /*0x15220*/
if ( v2 ) /*0x15227*/
return a2 << v2; /*0x1522e*/
else
return a2 * *(unsigned __int16 *)(a1 + 72); /*0x15236*/
}
// Function: RstRaidMapTranslateAddress @ 0x1523c (0x20 bytes)
// Index: 589/906
unsigned __int64 __fastcall RstRaidMapTranslateAddress(unsigned __int16 *a1, unsigned __int64 a2)
{
if ( a1[37] ) /*0x1523c*/
return a2 & a1[38]; /*0x1524a*/
else
return a2 % a1[36]; /*0x15259*/
}
// Function: RstHelper_525c @ 0x1525c (0x9 bytes)
// Index: 590/906
__int64 __fastcall RstHelper_525c(__int64 a1)
{
return HiiLibReturnZero(*(_QWORD *)(a1 + 24));
}
// Function: Assert_8 @ 0x15268 (0x22a bytes)
// Index: 591/906
__int64 __fastcall Assert_8(__int64 a1, __int64 a2, __int64 a3, unsigned int a4)
{
unsigned int v4; // r15d
unsigned __int8 n0x20; // di
char n24; // cl
unsigned __int8 n23_1; // bp
int n23; // eax
__int64 v11; // rax
__int64 v12; // r14
int n23_2; // ecx
int n5; // eax
int v15; // eax
int v16; // r8d
int v17; // eax
*(_QWORD *)(a1 + 16) = a2; /*0x15288*/
v4 = a4; /*0x15293*/
*(_QWORD *)a1 = off_23EC8; /*0x15296*/
*(_QWORD *)(a1 + 24) = *(_QWORD *)(a2 + 32); /*0x152a0*/
*(_WORD *)(a1 + 40) = *(_WORD *)(a3 + 4); /*0x152ac*/
*(_DWORD *)(a1 + 8) = *(_DWORD *)a3; /*0x152b3*/
*(_DWORD *)(a1 + 44) = a4 * *(unsigned __int16 *)(a3 + 16); /*0x152bf*/
n0x20 = 0; /*0x152c7*/
if ( RstDebugEnabled() && !*(_DWORD *)(a1 + 44) ) /*0x152ce*/
DebugAssert("RaidMap.cpp", 0x46u, "stripSize > 0"); /*0x152e4*/
*(_QWORD *)(a1 + 64) = RstDeviceGetBuffer(a3); /*0x152f6*/
if ( *(_BYTE *)(a3 + 6) > 0x18u ) /*0x152fd*/
n24 = 24; /*0x15305*/
else
n24 = *(_BYTE *)(a3 + 6); /*0x152ff*/
*(_BYTE *)(a1 + 42) = n24; /*0x15307*/
n23_1 = 0; /*0x1530e*/
*(_QWORD *)(a1 + 56) = *(_QWORD *)(a3 + 32); /*0x15311*/
*(_QWORD *)(a1 + 32) = *(_QWORD *)(a3 + 8); /*0x1531f*/
*(_BYTE *)(a1 + 92) = *(_BYTE *)(a3 + 41); /*0x15326*/
if ( n24 ) /*0x1532c*/
{
do /*0x153dc*/
{
n23 = 23; /*0x15340*/
if ( n23_1 < 0x18u ) /*0x15349*/
n23 = n23_1; /*0x15349*/
v11 = RstDeviceArrayFindByName(Source_16 + 2984, (_BYTE *)(*(_QWORD *)(a3 + 8LL * n23 + 48) + 18LL)); /*0x1535f*/
v12 = v11; /*0x15364*/
if ( v11 ) /*0x1536a*/
{
RstBufferSetPointer(a1 + 16 * (n23_1 + 7LL), v11); /*0x1537f*/
if ( RstDeviceCheckOnline(v12) || *(_DWORD *)(a1 + 8) == 2 && n23_1 == *(_BYTE *)(a1 + 92) ) /*0x1539b*/
goto LABEL_17; /*0x1539b*/
n23_2 = 23; /*0x1539d*/
if ( n23_1 < 0x18u ) /*0x153ad*/
n23_2 = n23_1; /*0x153ad*/
if ( *(_BYTE *)(n23_2 + a3 + 240) ) /*0x153b3*/
{
LABEL_17:
*(_BYTE *)(a1 + 16LL * n23_1 + 120) = 1; /*0x153c6*/
RstRaidSetMemberActive(a1, n23_1); /*0x153cb*/
}
}
++n23_1; /*0x153d5*/
}
while ( n23_1 < *(_BYTE *)(a1 + 42) ); /*0x153dc*/
v4 = a4; /*0x153e2*/
}
n5 = *(unsigned __int16 *)(a1 + 40); /*0x153ed*/
*(_DWORD *)(a1 + 48) = 0; /*0x153f1*/
if ( n5 <= 1 ) /*0x153fb*/
{
v15 = *(unsigned __int8 *)(a1 + 42); /*0x1540b*/
}
else
{
if ( n5 != 5 ) /*0x15400*/
goto LABEL_25; /*0x15400*/
v15 = *(unsigned __int8 *)(a1 + 42) - 1; /*0x15406*/
}
*(_DWORD *)(a1 + 48) = *(_DWORD *)(a1 + 44) * v15; /*0x15413*/
LABEL_25:
*(_BYTE *)(a1 + 43) = *(_BYTE *)(a1 + 42) - 1; /*0x15416*/
v16 = *(_DWORD *)(a1 + 44) / v4; /*0x15429*/
*(_WORD *)(a1 + 72) = v16; /*0x1542c*/
v17 = *(_DWORD *)(a1 + 48) / v4; /*0x15433*/
*(_DWORD *)(a1 + 88) = (unsigned __int16)v16; /*0x1543a*/
*(_DWORD *)(a1 + 80) = v17; /*0x15441*/
*(_DWORD *)(a1 + 84) = v17; /*0x15448*/
*(_WORD *)(a1 + 76) = v16 - 1; /*0x1544b*/
if ( ((unsigned __int16)(v16 - 1) & (unsigned __int16)v16) != 0 ) /*0x15453*/
{
*(_WORD *)(a1 + 74) = 0; /*0x1546e*/
}
else
{
do /*0x15462*/
{
LOWORD(v16) = (__int16)v16 >> 1; /*0x15455*/
if ( !(_WORD)v16 ) /*0x15459*/
break; /*0x15459*/
++n0x20; /*0x1545b*/
}
while ( n0x20 < 0x20u ); /*0x15462*/
*(_WORD *)(a1 + 74) = n0x20; /*0x15468*/
}
return a1; /*0x15484*/
}
// Function: RstRoundUpToBlock @ 0x15494 (0x22 bytes)
// Index: 592/906
unsigned __int64 __fastcall RstRoundUpToBlock(__int64 a1, __int64 Source_)
{
__int64 v2; // rax
__int16 v4; // cx
unsigned __int64 v5; // rax
v2 = *(unsigned int *)(a1 + 80); /*0x15494*/
v4 = *(_WORD *)(a1 + 74); /*0x1549a*/
v5 = Source_ * v2; /*0x1549e*/
if ( v4 ) /*0x154a5*/
return v5 >> v4; /*0x154a7*/
else
return v5 / *(unsigned __int16 *)(a1 + 72); /*0x154b2*/
}
// Function: RstRaidMemberRetryOrActivate @ 0x154b8 (0x2e bytes)
// Index: 593/906
__int64 __fastcall RstRaidMemberRetryOrActivate(__int64 a1, unsigned __int8 n0x18)
{
__int64 result; // rax
__int64 v3; // r8
if ( n0x18 < 0x18u ) /*0x154bf*/
{
result = 2 * (n0x18 + 7LL); /*0x154c8*/
v3 = *(_QWORD *)(a1 + 16 * (n0x18 + 7LL)); /*0x154cb*/
if ( (__int16)++*(_WORD *)(v3 + 112) >= 2 ) /*0x154da*/
return RstRaidSetMemberActive(a1, n0x18); /*0x154dc*/
}
return result; /*0x154e1*/
}
// Function: RstHelper_54e8 @ 0x154e8 (0x67 bytes)
// Index: 594/906
void __fastcall RstHelper_54e8(__int64 a1, __int64 a2)
{
int v4; // r11d
unsigned __int64 v5; // rdx
unsigned int n0x2000; // edx
v4 = HiiLibReturnZero(*(_QWORD *)(a1 + 24)); /*0x15506*/
if ( *(_WORD *)(a1 + 74) ) /*0x15501*/
LODWORD(v5) = *(_QWORD *)(a2 + 704) & *(unsigned __int16 *)(a1 + 76); /*0x15516*/
else
v5 = *(_QWORD *)(a2 + 704) % (unsigned __int64)*(unsigned __int16 *)(a1 + 72); /*0x15520*/
n0x2000 = *(_DWORD *)(a1 + 44) - v5 * v4; /*0x1552a*/
if ( *(_DWORD *)(a2 + 712) > n0x2000 ) /*0x15533*/
RstTransferBlockSizeInit(a2, n0x2000); /*0x15538*/
RstArrayIoAdvance((_DWORD *)a2); /*0x1554a*/
}
// Function: RstRaidMapAddress @ 0x15550 (0x89 bytes)
// Index: 595/906
unsigned __int64 __fastcall RstRaidMapAddress(__int64 a1, unsigned __int64 a2, unsigned __int8 a3)
{
__int16 v3; // r10
unsigned __int64 v6; // rdx
int v7; // ecx
unsigned __int64 v8; // r8
unsigned __int64 v9; // r8
unsigned __int64 v10; // rdx
v3 = *(_WORD *)(a1 + 74); /*0x15550*/
if ( v3 ) /*0x1555f*/
v6 = a2 >> v3; /*0x15564*/
else
v6 = a2 / *(unsigned __int16 *)(a1 + 72); /*0x15575*/
v7 = (a3 + v6 * *(unsigned __int8 *)(a1 + 42)) % *(unsigned __int8 *)(a1 + 100); /*0x15592*/
v8 = (a3 + v6 * *(unsigned __int8 *)(a1 + 42)) / *(unsigned __int8 *)(a1 + 100); /*0x15595*/
*(_DWORD *)(a1 + 104) = v7; /*0x15598*/
if ( v3 ) /*0x155a0*/
v9 = v8 << v3; /*0x155a5*/
else
v9 = v8 * *(unsigned __int16 *)(a1 + 72); /*0x155b3*/
if ( v3 ) /*0x155ba*/
LODWORD(v10) = a2 & *(_WORD *)(a1 + 76); /*0x155c1*/
else
v10 = a2 % *(unsigned __int16 *)(a1 + 72); /*0x155d0*/
return v9 + (unsigned int)v10; /*0x155d8*/
}
// Function: RstRaidTryMapToNextRow @ 0x155dc (0xb7 bytes)
// Index: 596/906
bool __fastcall RstRaidTryMapToNextRow(__int64 a1, _QWORD *a2, unsigned __int8 *a3)
{
unsigned __int8 *v3; // rsi
unsigned __int8 v6; // bl
int i; // r12d
int v8; // edx
v3 = a3; /*0x155f5*/
LOBYTE(a3) = *a3; /*0x155f8*/
v6 = 0; /*0x1560e*/
for ( i = RstRaidMapAddress(a1, *a2, a3); v6 < *(unsigned __int8 *)(a1 + 100) - 1; ++v6 ) /*0x15619*/
{
v8 = (*(_DWORD *)(a1 + 104) + 1) % *(unsigned __int8 *)(a1 + 100); /*0x15630*/
*(_DWORD *)(a1 + 104) = v8; /*0x15635*/
RstVtableDispatch34(a1, v8, i, (_DWORD)v3, (__int64)a2); /*0x15638*/
if ( !*(_BYTE *)(a1 + 16 * (*v3 + 7LL) + 8) && !(unsigned __int8)RstDeviceCheckOnline(*(_QWORD *)(a1 + 16 * (*v3 + 7LL))) ) /*0x15652*/
break; /*0x15659*/
}
return v6 != *(unsigned __int8 *)(a1 + 100) - 1; /*0x1568c*/
}
// Function: j_HiiBlockCompare @ 0x15694 (0x5 bytes)
// Index: 597/906
// attributes: thunk
__int64 __fastcall j_HiiBlockCompare()
{
return HiiBlockCompare();
}
// Function: j_HiiBlockCompareConst @ 0x1569c (0x5 bytes)
// Index: 598/906
// attributes: thunk
__int64 j_HiiBlockCompareConst()
{
return HiiBlockCompareConst();
}
// Function: j_HiiLibGuidIsZero @ 0x156a4 (0x5 bytes)
// Index: 599/906
// attributes: thunk
__int64 __fastcall j_HiiLibGuidIsZero(unsigned int a1)
{
return HiiLibGuidIsZero(a1);
}
// Function: j_HiiLibGuidToStr @ 0x156ac (0x5 bytes)
// Index: 600/906
// attributes: thunk
__int64 __fastcall j_HiiLibGuidToStr(unsigned int a1, const char *en)
{
return HiiLibGuidToStr(a1, (__int64)en);
}
// Function: Assert_18 @ 0x156b4 (0x1ad bytes)
// Index: 601/906
__int64 __fastcall Assert_18(__int64 a1, __int64 Source)
{
UINTN Length; // rsi
CHAR16 *Sourcea_1; // r13
unsigned int v6; // r15d
unsigned int Source_1; // ebp
unsigned int v8; // r12d
_DWORD *v9; // rcx
__int64 result; // rax
bool v11; // zf
_DWORD *v12; // rcx
unsigned int v13; // eax
CHAR16 *Sourcea; // [rsp+20h] [rbp-78h] BYREF
char v15; // [rsp+28h] [rbp-70h]
__int16 v16; // [rsp+2Ah] [rbp-6Eh]
__int64 v17; // [rsp+30h] [rbp-68h] BYREF
unsigned int v18; // [rsp+38h] [rbp-60h]
int Sourcea_3; // [rsp+3Ch] [rbp-5Ch]
bool v20; // [rsp+40h] [rbp-58h]
CHAR16 Destination[2]; // [rsp+48h] [rbp-50h] BYREF
int v22; // [rsp+4Ch] [rbp-4Ch]
__int64 v23; // [rsp+50h] [rbp-48h]
unsigned int Length_1; // [rsp+58h] [rbp-40h]
int Sourcea_2; // [rsp+5Ch] [rbp-3Ch]
char n40; // [rsp+60h] [rbp-38h]
*(_WORD *)Source = 5; /*0x156db*/
*(_WORD *)(Source + 2) = 8; /*0x156e3*/
Length = (unsigned int)HiiLibReturnZero(a1); /*0x156f1*/
if ( (*(_DWORD *)(Source + 20) & 1) != 0 ) /*0x156f8*/
{
v16 = 1; /*0x156fe*/
Sourcea = 0; /*0x1570c*/
v15 = 0; /*0x15711*/
RstBufferPoolRealloc((__int64)&Sourcea, 0); /*0x15716*/
if ( RstDebugEnabled() && !Sourcea ) /*0x1572a*/
DebugAssert("HostIsmIntf.cpp", 0x4Cu, "sbuf.ptr()"); /*0x1573d*/
Sourcea_1 = Sourcea; /*0x15745*/
v6 = *(_DWORD *)(Source + 16) / (unsigned int)Length; /*0x1575c*/
StrnCpy(Destination, (const CHAR16 *)Source, 0x20u); /*0x1575f*/
Source_1 = *(_DWORD *)(Source + 20); /*0x15764*/
Length_1 = Length; /*0x15767*/
Sourcea_2 = (int)Sourcea_1; /*0x1576b*/
v8 = 0; /*0x15770*/
if ( v6 ) /*0x15776*/
{
while ( 1 ) /*0x15778*/
{
if ( *(_BYTE *)(Source + 24) == 42 ) /*0x1577c*/
StrnCpy(Sourcea_1, (const CHAR16 *)Source_1, Length); /*0x15786*/
v9 = *(_DWORD **)(a1 + 128); /*0x15794*/
Sourcea_3 = Sourcea_2; /*0x1579b*/
v20 = n40 != 40; /*0x157a3*/
v18 = Length_1 / (unsigned int)Length; /*0x157b1*/
v17 = v23; /*0x157ba*/
if ( (unsigned int)Assert_63(v9, &v17) ) /*0x157bf*/
break; /*0x157bf*/
if ( *(_BYTE *)(Source + 24) == 40 ) /*0x157cc*/
StrnCpy((CHAR16 *)Source_1, Sourcea_1, Length); /*0x157d6*/
++v23; /*0x157df*/
++v8; /*0x157e4*/
*(_DWORD *)(Source + 4) += v22; /*0x157e7*/
Source_1 += Length; /*0x157ea*/
if ( v8 >= v6 ) /*0x157ef*/
goto LABEL_12; /*0x157ef*/
}
}
else
{
LABEL_12:
*(_WORD *)Source = 0; /*0x157f1*/
*(_WORD *)(Source + 2) = 0; /*0x157f4*/
}
return RstBufferPoolLock((__int64)Sourcea); /*0x157fd*/
}
else
{
v11 = *(_BYTE *)(Source + 24) == 40; /*0x15804*/
v12 = *(_DWORD **)(a1 + 128); /*0x15808*/
Sourcea_3 = *(_DWORD *)(Source + 20); /*0x1580f*/
v13 = *(_DWORD *)(Source + 16); /*0x15813*/
v20 = !v11; /*0x15816*/
v18 = v13 / (unsigned int)Length; /*0x15824*/
v17 = *(_QWORD *)(Source + 8); /*0x1582c*/
result = Assert_63(v12, &v17); /*0x15831*/
if ( !(_DWORD)result ) /*0x1583a*/
{
*(_WORD *)Source = 0; /*0x1583c*/
*(_WORD *)(Source + 2) = 0; /*0x1583f*/
}
}
return result; /*0x15854*/
}
// Function: Assert_124 @ 0x15864 (0xc3 bytes)
// Index: 602/906
__int64 Assert_124__int64 a1, __int64 a2, unsigned int a3)
{
__int64 v3; // rbx
__int64 v7; // rax
__int64 v8; // rax
__int64 v9; // rax
__int64 v10; // rax
v3 = 0; /*0x1587d*/
if ( !*(_WORD *)(a2 + 4) ) /*0x15890*/
goto LABEL_8; /*0x15890*/
if ( *(_WORD *)(a2 + 4) != 1 ) /*0x15896*/
{
if ( *(_WORD *)(a2 + 4) == 5 ) /*0x1589c*/
{
v7 = RstMemPoolAlloc(520); /*0x1589e*/
if ( v7 ) /*0x158a6*/
{
v8 = Assert_134(v7, a1, a2, a3); /*0x158b4*/
LABEL_10:
v3 = v8; /*0x158f3*/
goto LABEL_11; /*0x158f3*/
}
goto LABEL_11; /*0x158a6*/
}
LABEL_8:
v10 = RstMemPoolAlloc(520); /*0x158d8*/
if ( v10 ) /*0x158e0*/
{
v8 = Assert_112(v10, a1, a2, a3); /*0x158ee*/
goto LABEL_10; /*0x158ee*/
}
goto LABEL_11; /*0x158e0*/
}
v9 = RstMemPoolAlloc(520); /*0x158bb*/
if ( v9 ) /*0x158c3*/
{
v8 = Assert_100(v9, a1, a2, a3); /*0x158d1*/
goto LABEL_10; /*0x158d6*/
}
LABEL_11:
(**(void (__fastcall ***)(__int64))v3)(v3); /*0x158f6*/
if ( *(int *)a2 < 2 && *(_DWORD *)(v3 + 8) == 3 ) /*0x15907*/
*(_BYTE *)(v3 + 92) = *(_BYTE *)(a2 + 41); /*0x1590c*/
return v3; /*0x15921*/
}
// Function: RstDeviceInitOperation @ 0x15928 (0x26 bytes)
// Index: 603/906
__int64 __fastcall RstDeviceInitOperation(__int64 a1, int a2)
{
__int64 v2; // rax
__int64 result; // rax
v2 = *(_QWORD *)(a1 + 32); /*0x15928*/
*(_QWORD *)(a1 + 56) = 0; /*0x1592c*/
*(_DWORD *)(a1 + 12) = 1; /*0x15931*/
*(_BYTE *)(a1 + 48) = 1; /*0x15938*/
*(_DWORD *)(a1 + 64) = a2; /*0x1593c*/
*(_DWORD *)(v2 + 156) = a2; /*0x1593f*/
result = *(_QWORD *)(a1 + 16); /*0x15945*/
*(_DWORD *)(result + 8) = 0; /*0x15949*/
return result; /*0x1594d*/
}
// Function: RstHelper_5950 @ 0x15950 (0x7e bytes)
// Index: 604/906
__int64 RstHelper_5950__int64 a1, unsigned __int64 Source_, unsigned int a3)
{
__int64 v5; // rdx
char v6; // al
unsigned __int64 v7; // rdx
__int64 v8; // rcx
__int64 result; // rax
v5 = a3 / (unsigned int)HiiLibReturnZero(*(_QWORD *)(a1 + 32)) - 1; /*0x1597d*/
v6 = *(_BYTE *)(a1 + 48); /*0x1597f*/
v7 = Source_ + v5; /*0x15982*/
if ( v6 ) /*0x15987*/
v8 = *(_QWORD *)(a1 + 16); /*0x15989*/
else
v8 = *(_QWORD *)(a1 + 24); /*0x1598f*/
if ( v6 ) /*0x15995*/
result = *(_QWORD *)(a1 + 24); /*0x15997*/
else
result = *(_QWORD *)(a1 + 16); /*0x1599d*/
if ( !*(_DWORD *)(a1 + 12) ) /*0x159a1*/
return *(_QWORD *)(a1 + 16); /*0x159a7*/
if ( v7 < *(_QWORD *)(a1 + 40) ) /*0x159bf*/
return v8; /*0x159c1*/
if ( Source_ < *(_QWORD *)(a1 + 40) ) /*0x159ca*/
{
while ( 1 ) /*0x159cc*/
; /*0x159cc*/
}
return result; /*0x159b5*/
}
// Function: RstDevicePathGetNameFromConfig @ 0x159d0 (0x33 bytes)
// Index: 605/906
__int64 __fastcall RstDevicePathGetNameFromConfig(__int64 a1)
{
return (unsigned __int8)RstDevicePathFindName( /*0x159fe*/
*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 32) + 144LL) + 248LL) + 8LL),
(_BYTE *)(*(_QWORD *)(*(_QWORD *)(a1 + 32) + 136LL) + 16LL))[50];
}
// Function: Assert_114 @ 0x15a04 (0x26 bytes)
// Index: 606/906
__int64 Assert_114__int64 a1)
{
_QWORD v2[21]; // [rsp+20h] [rbp-A8h] BYREF
Assert_52((__int64)v2, a1); /*0x15a13*/
return Assert_96(v2); /*0x15a22*/
}
// Function: Assert_113 @ 0x15a2c (0x2f bytes)
// Index: 607/906
__int64 Assert_113__int64 a1, __int64 a2)
{
_QWORD v4[21]; // [rsp+20h] [rbp-A8h] BYREF
Assert_52((__int64)v4, a1); /*0x15a40*/
return Assert_22(v4, a2); /*0x15a52*/
}
// Function: RstDeviceGetDataPtr @ 0x15a5c (0x5 bytes)
// Index: 608/906
__int64 __fastcall RstDeviceGetDataPtr(__int64 a1)
{
return *(_QWORD *)(a1 + 56); /*0x15a60*/
}
// Function: RstHelper_5a64 @ 0x15a64 (0x104 bytes)
// Index: 609/906
void RstHelper_5a64int64 a1, __int64 a2, __int64 Source)
{
unsigned int v6; // eax
unsigned __int64 v7; // r13
char v8; // cl
unsigned int v9; // r14d
__int64 v10; // r12
__int64 v11; // rsi
__int64 v12; // rcx
int v13; // eax
CHAR16 Destination; // [rsp+20h] [rbp-38h] BYREF
__int64 v15; // [rsp+28h] [rbp-30h]
int v16; // [rsp+30h] [rbp-28h]
int v17; // [rsp+34h] [rbp-24h]
v6 = HiiLibReturnZero(*(_QWORD *)(a1 + 32)); /*0x15a8e*/
v7 = *(_QWORD *)(Source + 8); /*0x15a93*/
v8 = *(_BYTE *)(a1 + 48); /*0x15a97*/
v9 = v6; /*0x15a9c*/
if ( v8 ) /*0x15aad*/
v10 = *(_QWORD *)(a1 + 16); /*0x15aaf*/
else
v10 = *(_QWORD *)(a1 + 24); /*0x15ab5*/
if ( v8 ) /*0x15abb*/
v11 = *(_QWORD *)(a1 + 24); /*0x15abd*/
else
v11 = *(_QWORD *)(a1 + 16); /*0x15ac3*/
if ( v7 + *(_DWORD *)(Source + 16) / v6 - 1 < *(_QWORD *)(a1 + 40) ) /*0x15acb*/
{
v12 = v10; /*0x15acd*/
LABEL_11:
RstRaidVolCreateWorker(v12, a2, Source); /*0x15adb*/
return; /*0x15ae6*/
}
if ( v7 >= *(_QWORD *)(a1 + 40) ) /*0x15ad6*/
{
v12 = v11; /*0x15ad8*/
goto LABEL_11; /*0x15ad8*/
}
StrnCpy(&Destination, (const CHAR16 *)Source, 0x20u); /*0x15af6*/
*(_DWORD *)(Source + 16) = v9 * (*(_DWORD *)(a1 + 40) - v7); /*0x15b0f*/
RstRaidVolCreateWorker(v10, a2, Source); /*0x15b13*/
if ( !*(_BYTE *)(a2 + 66) ) /*0x15b18*/
{
v15 = *(_QWORD *)(a1 + 40); /*0x15b2a*/
v13 = *(_DWORD *)(Source + 16); /*0x15b2f*/
v16 -= v13; /*0x15b35*/
v17 += v13; /*0x15b39*/
RstRaidVolCreateWorker(v11, a2, (__int64)&Destination); /*0x15b3d*/
}
*(_DWORD *)(Source + 16) += v16; /*0x15b46*/
}
// Function: RstRaidOpMarkMemberFailed @ 0x15b68 (0x36 bytes)
// Index: 610/906
__int64 __fastcall RstRaidOpMarkMemberFailed(__int64 a1, __int64 a2)
{
__int64 result; // rax
result = RstRaidMemberMarkFailed(*(_QWORD *)(a1 + 16), a2); /*0x15b7c*/
if ( *(_DWORD *)(a1 + 12) == 1 ) /*0x15b85*/
return RstRaidMemberMarkFailed(*(_QWORD *)(a1 + 24), a2); /*0x15b8e*/
return result; /*0x15b98*/
}
// Function: Assert_17 @ 0x15ba0 (0x1b6 bytes)
// Index: 611/906
__int64 __fastcall Assert_17(__int64 a1, __int64 a2, __int64 a3, int a4)
{
__int64 v8; // rdx
__int64 v9; // rcx
unsigned int v10; // ebx
__int64 v11; // rbp
__int64 v12; // rax
__int64 v13; // rdx
__int64 v14; // rax
__int64 v15; // rax
__int64 v16; // rcx
__int64 v17; // rcx
RstBufferEntryInitPtr(); /*0x15bc5*/
*(_QWORD *)(a1 + 32) = a2; /*0x15bca*/
*(_WORD *)(a1 + 74) = 0; /*0x15bd1*/
*(_WORD *)(a1 + 76) = 0; /*0x15bd6*/
*(_WORD *)(a1 + 78) = 32; /*0x15be0*/
*(_WORD *)(a1 + 80) = 32; /*0x15be4*/
*(_BYTE *)(a1 + 82) = *(_BYTE *)(a3 + 16); /*0x15beb*/
*(_QWORD *)(a1 + 56) = *(_QWORD *)(a3 + 24); /*0x15bf2*/
*(_DWORD *)(a1 + 68) = *(_DWORD *)(a3 + 32); /*0x15bf9*/
*(_DWORD *)(a1 + 12) = *(_DWORD *)(a3 + 8); /*0x15bff*/
*(_DWORD *)(a1 + 64) = *(_DWORD *)(a3 + 12); /*0x15c05*/
v10 = RstHelper_7a90(*(_QWORD *)(a3 + 40)); /*0x15c11*/
if ( !v10 && *(_DWORD *)(a1 + 12) ) /*0x15c18*/
v10 = RstHelper_7a90(*(_QWORD *)(a3 + 48)); /*0x15c27*/
if ( (unsigned __int8)RstDebugEnabled(v9, v8) && !v10 ) /*0x15c36*/
DebugAssert("RaidVol.cpp", 0x5Cu, "nBlkSz > 0"); /*0x15c4b*/
if ( a4 ) /*0x15c53*/
v11 = *(_QWORD *)(a3 + 48); /*0x15c5b*/
else
v11 = *(_QWORD *)(a3 + 40); /*0x15c55*/
v12 = Assert_124(a1, v11, v10); /*0x15c68*/
*(_QWORD *)(a1 + 16) = v12; /*0x15c73*/
*(_WORD *)(a1 + 72) = 1 << *(_DWORD *)(v12 + 96); /*0x15c81*/
if ( *(_DWORD *)(a1 + 12) ) /*0x15c89*/
{
v14 = Assert_124(a1, *(_QWORD *)(a3 + 48), v10); /*0x15ca1*/
v13 = 1; /*0x15ca6*/
*(_QWORD *)(a1 + 24) = v14; /*0x15cab*/
LOWORD(v13) = 1 << *(_DWORD *)(v14 + 96); /*0x15cb2*/
*(_WORD *)(a1 + 72) |= v13; /*0x15cb5*/
}
else
{
*(_QWORD *)(a1 + 24) = Assert_124(a1, v11, v10); /*0x15c97*/
}
if ( *(_DWORD *)(a1 + 12) == 1 ) /*0x15cc2*/
{
if ( *(_DWORD *)(*(_QWORD *)(a1 + 24) + 8LL) == 3 ) /*0x15ccb*/
{
v15 = *(_QWORD *)(a1 + 16); /*0x15ccd*/
if ( *(_DWORD *)(v15 + 8) != 3 ) /*0x15cd4*/
{
*(_DWORD *)(v15 + 8) = 3; /*0x15cd6*/
*(_BYTE *)(*(_QWORD *)(a1 + 16) + 92LL) = *(_BYTE *)(*(_QWORD *)(a1 + 24) + 92LL); /*0x15ce4*/
}
}
if ( *(_DWORD *)(a1 + 12) == 1 ) /*0x15ceb*/
{
if ( *(_DWORD *)(a1 + 64) <= 1u ) /*0x15cf1*/
{
v16 = *(_QWORD *)(a1 + 16); /*0x15cf9*/
if ( (*(_DWORD *)(v16 + 8) == 2 || *(_DWORD *)(v16 + 8) == 3) && !(unsigned __int8)RstDeviceCanRemove() ) /*0x15d08*/
{
v17 = *(_QWORD *)(a1 + 16); /*0x15d12*/
*(_DWORD *)(a1 + 12) = 0; /*0x15d18*/
RstDeviceGetMemberIndex(v17, 0); /*0x15d1c*/
}
}
if ( *(_DWORD *)(a1 + 12) == 1 && *(_DWORD *)(a1 + 64) == 1 ) /*0x15d2b*/
{
LOBYTE(v13) = 3; /*0x15d31*/
RstDeviceGetMemberIndex(*(_QWORD *)(a1 + 16), v13); /*0x15d33*/
}
}
}
return a1; /*0x15d4f*/
}
// Function: Assert_4 @ 0x15d58 (0x28f bytes)
// Index: 612/906
__int64 __fastcall Assert_4(__int64 a1)
{
__int64 n6; // rax
bool v3; // r12
__int64 v4; // rdx
int v5; // eax
int v6; // ecx
__int64 v7; // rsi
unsigned __int8 i; // bp
__int64 v9; // rdx
unsigned int n2; // eax
int n23; // eax
__int64 v12; // r13
int v13; // ebx
__int64 v14; // rax
bool v15; // al
bool v16; // zf
__int64 v17; // rax
__int64 v18; // rcx
__int64 v19; // rax
int v20; // ecx
int v21; // edx
int v22; // ebx
__int64 v23; // rax
unsigned __int64 v24; // rcx
char v25; // al
unsigned __int64 v26; // rdx
__int64 v27; // [rsp+30h] [rbp-38h] BYREF
char v28; // [rsp+38h] [rbp-30h]
__int16 v29; // [rsp+3Ah] [rbp-2Eh]
n6 = RstCfgCheckVolumeType(*(_QWORD *)(*(_QWORD *)(a1 + 32) + 144LL)); /*0x15d82*/
v3 = (_DWORD)n6 == 6; /*0x15d8a*/
if ( *(_DWORD *)(a1 + 12) ) /*0x15d91*/
{
v27 = 0; /*0x15da6*/
v28 = 0; /*0x15dab*/
v29 = 1; /*0x15db0*/
RstBufferPoolRealloc((__int64)&v27, 0); /*0x15db6*/
if ( RstDebugEnabled() && !v27 ) /*0x15dca*/
DebugAssert("RaidVol.cpp", 0x106u, "sbuf.ptr()"); /*0x15ddf*/
if ( *(_DWORD *)(a1 + 64) == 3 || v3 ) /*0x15ded*/
{
v7 = v27; /*0x15e26*/
for ( i = 0; ; ++i ) /*0x15e2b*/
{
v9 = *(_QWORD *)(a1 + 16); /*0x15e2e*/
n2 = 2; /*0x15e32*/
if ( *(_BYTE *)(v9 + 42) <= 2u ) /*0x15e3b*/
n2 = *(unsigned __int8 *)(v9 + 42); /*0x15e3d*/
if ( i >= n2 ) /*0x15e47*/
{
RstRaidMemberMarkRemoving(*(_QWORD *)(a1 + 16), 0xFFu); /*0x15fb6*/
goto LABEL_31; /*0x15fb6*/
}
n23 = 23; /*0x15e51*/
if ( i < 0x18u ) /*0x15e56*/
n23 = i; /*0x15e56*/
v12 = *(_QWORD *)(v9 + 16 * (n23 + 7LL)); /*0x15e63*/
if ( (*(_DWORD *)(v12 + 136) & 8) != 0 ) /*0x15e74*/
{
v13 = HiiLibReturnZero(v12); /*0x15e81*/
v14 = RstCountDecrement(v12); /*0x15e83*/
Assert_89(Source_16, v12, 40, v14, v13, v7); /*0x15ea0*/
if ( !*(_WORD *)(Source_16 + 2720) ) /*0x15eac*/
break; /*0x15eac*/
}
}
v15 = RstDeviceCheckCapacityNonZero((_DWORD *)v7, *(_QWORD *)(a1 + 16)) == 0; /*0x15ecd*/
if ( v3 ) /*0x15ed3*/
{
v16 = !v15; /*0x15ed5*/
v17 = *(unsigned int *)(a1 + 68); /*0x15ed8*/
if ( v16 ) /*0x15edb*/
v18 = *(unsigned int *)(v7 + 4 * v17); /*0x15ee3*/
else
v18 = *(_QWORD *)(v7 + 8 * v17); /*0x15edd*/
v19 = *(_QWORD *)(a1 + 16); /*0x15ee6*/
*(_QWORD *)(a1 + 56) = v18; /*0x15eea*/
v20 = *(unsigned __int8 *)(v19 + 93); /*0x15eee*/
LODWORD(v19) = *(unsigned __int16 *)(v19 + 72); /*0x15ef2*/
*(_BYTE *)(a1 + 48) = 1; /*0x15ef6*/
*(_QWORD *)(a1 + 40) = *(_QWORD *)(a1 + 56) * (unsigned int)(v19 * v20); /*0x15f04*/
}
else
{
v21 = *(_DWORD *)(v7 + 8); /*0x15f11*/
if ( (v21 == *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 32) + 144LL) + 248LL) + 24LL) /*0x15f32*/
|| v21 == -1412436263)
&& *(_DWORD *)v7 == 1 )
{
Assert_13((_DWORD *)v7, a1); /*0x15f3a*/
*(_DWORD *)v7 = 0; /*0x15f42*/
v22 = HiiLibReturnZero(v12); /*0x15f4d*/
v23 = RstCountDecrement(v12); /*0x15f4f*/
Assert_89(Source_16, v12, 42, v23, v22, v7); /*0x15f6c*/
RstRaidMemberSetActiveOrRemove(*(_QWORD *)(a1 + 16), i); /*0x15f78*/
}
v24 = *(unsigned int *)(v7 + 4) + ((unsigned __int64)*(unsigned int *)(v7 + 48) << 32); /*0x15f87*/
*(_QWORD *)(a1 + 56) = v24; /*0x15f8a*/
v25 = *(_BYTE *)(v7 + 12); /*0x15f8e*/
*(_BYTE *)(a1 + 48) = v25; /*0x15f91*/
v26 = v24 * *(unsigned int *)(v7 + 16); /*0x15f97*/
*(_QWORD *)(a1 + 40) = v26; /*0x15f9b*/
if ( !v25 ) /*0x15fa2*/
*(_QWORD *)(a1 + 40) = v26 + *(unsigned int *)(v7 + 16); /*0x15faa*/
}
}
else
{
v4 = *(_QWORD *)(a1 + 16); /*0x15def*/
v5 = *(unsigned __int16 *)(v4 + 72); /*0x15df3*/
v6 = *(unsigned __int8 *)(v4 + 93); /*0x15df7*/
*(_BYTE *)(a1 + 48) = 1; /*0x15dfb*/
*(_QWORD *)(a1 + 40) = *(_QWORD *)(a1 + 56) * (unsigned int)(v5 * v6); /*0x15e09*/
if ( *(int *)(v4 + 8) >= 2 && !*(_DWORD *)(a1 + 64) ) /*0x15e17*/
LABEL_31:
*(_DWORD *)(a1 + 12) = 0; /*0x15fbb*/
}
return RstBufferPoolLock(v27); /*0x15fc4*/
}
return n6; /*0x15fda*/
}
// Function: Assert_79 @ 0x15fe8 (0x11d bytes)
// Index: 613/906
void __fastcall Assert_79(__int64 a1, __int64 a2)
{
__int64 Source; // rdx
unsigned __int8 n23_2; // si
__int64 v6; // r11
int n23; // edx
int n23_1; // ecx
__int64 v9; // rax
__int64 v10[20]; // [rsp+20h] [rbp-A8h] BYREF
Source = *(_QWORD *)(a1 + 16); /*0x15ffd*/
n23_2 = *(_BYTE *)(Source + 92); /*0x16008*/
StrnCpy_w(*(CHAR16 **)(a1 + 24), (const CHAR16 *)Source); /*0x1600c*/
v6 = *(_QWORD *)(a1 + 16); /*0x16011*/
n23 = 23; /*0x16018*/
if ( *(_WORD *)(v6 + 40) ) /*0x1601d*/
goto LABEL_5; /*0x1601d*/
n23_1 = 23; /*0x1602c*/
if ( n23_2 < 0x18u ) /*0x1602e*/
n23_1 = n23_2; /*0x1602e*/
if ( a2 != *(_QWORD *)(v6 + 16 * (n23_1 + 7LL)) ) /*0x1603f*/
{
LABEL_5:
v9 = *(_QWORD *)(a1 + 32); /*0x16041*/
*(_QWORD *)(a1 + 56) = 0; /*0x1604a*/
*(_DWORD *)(a1 + 12) = 1; /*0x1604e*/
*(_BYTE *)(a1 + 48) = 1; /*0x16051*/
*(_DWORD *)(a1 + 64) = 1; /*0x16054*/
*(_DWORD *)(v9 + 156) = 1; /*0x16057*/
*(_DWORD *)(*(_QWORD *)(a1 + 16) + 8LL) = 0; /*0x16065*/
if ( n23_2 < 0x18u ) /*0x1606d*/
n23 = n23_2; /*0x1606d*/
*(_BYTE *)(*(_QWORD *)(a1 + 16) + 16LL * n23 + 120) = 0; /*0x1607a*/
if ( n23_2 < 0x18u ) /*0x16086*/
*(_QWORD *)(*(_QWORD *)(a1 + 16) + 16 * (n23_2 + 7LL)) = a2; /*0x16097*/
(***(void (__fastcall ****)(_QWORD))(a1 + 16))(*(_QWORD *)(a1 + 16)); /*0x160a2*/
}
if ( *(_WORD *)(*(_QWORD *)(a1 + 16) + 40LL) == 5 ) /*0x160ad*/
{
if ( (unsigned int)RstDevicePathGetNameFromConfig(a1) == 2 || (unsigned int)RstDevicePathGetNameFromConfig(a1) == 4 ) /*0x160c7*/
{
Assert_52((__int64)v10, a1); /*0x160de*/
Assert_37(v10, a2); /*0x160eb*/
}
else
{
Assert_113(a1, a2); /*0x160cf*/
}
}
}
// Function: RstConfigReadDispatch @ 0x16108 (0x5d bytes)
// Index: 614/906
__int64 __fastcall RstConfigReadDispatch(__int64 a1, __int64 Source)
{
__int64 v4; // rbx
__int64 v5; // rdx
v4 = Source_16 + 32952; /*0x1611f*/
v5 = Source_16 + 32952; /*0x1612a*/
if ( *(_DWORD *)(a1 + 12) ) /*0x16126*/
RstHelper_5a64(a1, v5, Source); /*0x1613a*/
else
RstRaidVolCreateWorker(*(_QWORD *)(a1 + 16), v5, Source); /*0x16133*/
return RstDeviceSetMemberInfo(*(_QWORD *)(a1 + 32), *(_QWORD *)(v4 + 24), *(_BYTE *)(v4 + 66), *(_WORD *)(v4 + 64)); /*0x1615f*/
}
// Function: Assert_90 @ 0x16168 (0xa1 bytes)
// Index: 615/906
__int64 Assert_90__int64 a1)
{
__int64 result; // rax
__int64 v3; // rdx
_QWORD v4[21]; // [rsp+30h] [rbp-A8h] BYREF
__int64 v5; // [rsp+E0h] [rbp+8h] BYREF
char v6; // [rsp+E8h] [rbp+10h] BYREF
Assert_4(a1); /*0x16174*/
result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, char *, __int64 *))(qword_58070 + 312))( /*0x161a3*/
2,
&unk_27950,
0,
&v6,
&v5);
if ( result ) /*0x161ac*/
{
if ( *(_BYTE *)(a1 + 82) > 1u ) /*0x161b2*/
{
Assert_52((__int64)v4, a1); /*0x161bc*/
result = Assert_34(v4); /*0x161c6*/
}
}
else
{
result = *(_QWORD *)(a1 + 32); /*0x161cd*/
*(_BYTE *)(result + 187) = 0; /*0x161d1*/
}
if ( v5 ) /*0x161e3*/
result = (*(__int64 (**)(void))(qword_58070 + 72))(); /*0x161ec*/
if ( *(_BYTE *)(a1 + 82) ) /*0x161ef*/
{
LOBYTE(v3) = 1; /*0x161f9*/
return RstDeviceSetNotificationFlag(*(_QWORD *)(a1 + 32), v3); /*0x161fb*/
}
return result; /*0x16200*/
}
// Function: RstArrayInitAllSlots @ 0x1620c (0x32 bytes)
// Index: 616/906
__int64 __fastcall RstArrayInitAllSlots(__int64 a1)
{
__int64 n144; // rdi
__int64 result; // rax
n144 = 144; /*0x16219*/
do /*0x16231*/
{
result = RstLinkedListNodeInit(a1); /*0x16221*/
a1 += 208; /*0x16226*/
--n144; /*0x1622d*/
}
while ( n144 ); /*0x16231*/
return result; /*0x16238*/
}
// Function: RstArrayAllSlotsEmpty @ 0x16240 (0x44 bytes)
// Index: 617/906
char __fastcall RstArrayAllSlotsEmpty(__int64 a1)
{
__int16 n144; // dx
__int16 v4; // cx
n144 = *(_WORD *)(a1 + 29952); /*0x16240*/
if ( n144 >= 144 ) /*0x16252*/
{
v4 = 0; /*0x1625e*/
while ( !*(_BYTE *)(208LL * v4 + a1 + 152) ) /*0x16277*/
{
if ( ++v4 >= n144 ) /*0x1627f*/
return 1; /*0x16281*/
}
}
return 0; /*0x16256*/
}
// Function: RstConfigArrayAddEntry @ 0x16284 (0x10f bytes)
// Index: 618/906
__int64 __fastcall RstConfigArrayAddEntry(__int64 a1, _BYTE *a2, int a3, __int64 a4)
{
__int16 n144; // r10
__int16 n144_1; // cx
__int16 n144_2; // r11
__int64 v12; // rdi
__int64 v13; // rsi
unsigned __int16 n16_1; // ax
unsigned __int16 n16; // bx
n144 = *(_WORD *)(a1 + 29952); /*0x162a0*/
n144_1 = n144; /*0x162bb*/
n144_2 = 0; /*0x162bf*/
if ( n144 > 0 ) /*0x162c3*/
{
while ( !*(_BYTE *)(208LL * n144_2 + a1 + 152) ) /*0x162d8*/
{
if ( ++n144_2 >= *(__int16 *)(a1 + 29952) ) /*0x162e6*/
goto LABEL_6; /*0x162e6*/
}
n144_1 = n144_2; /*0x162ea*/
}
LABEL_6:
if ( n144_1 == n144 ) /*0x162f2*/
{
if ( n144 == 144 ) /*0x162fd*/
return 0; /*0x16301*/
*(_WORD *)(a1 + 29952) = n144 + 1; /*0x16307*/
}
v12 = 208LL * n144_1; /*0x16313*/
v13 = v12 + a1; /*0x1631a*/
RstLinkedListNodeInit(v12 + a1); /*0x16321*/
n16_1 = StrLenA(a2); /*0x16329*/
n16 = 16; /*0x1632e*/
if ( n16_1 < 0x10u ) /*0x16339*/
n16 = n16_1; /*0x16339*/
RstStringCopyN(v13 + 28, (__int64)&a2[n16_1 - n16], n16); /*0x16350*/
*(_BYTE *)(v12 + n16 + a1 + 28) = 0; /*0x1635f*/
*(_DWORD *)(v13 + 136) = a3; /*0x16364*/
*(_QWORD *)(v13 + 88) = a4; /*0x1636b*/
*(_BYTE *)(v13 + 152) = 0; /*0x1636f*/
return v12 + a1; /*0x16385*/
}
// Function: RstConfigArrayMergeDuplicates @ 0x16394 (0xee bytes)
// Index: 619/906
__int16 __fastcall RstConfigArrayMergeDuplicates(__int64 a1)
{
__int16 i_2; // dx
__int16 v3; // bp
__int16 i; // bx
__int64 v5; // r15
__int16 v6; // r13
__int16 i_1; // si
i_2 = *(_WORD *)(a1 + 29952); /*0x163b5*/
v3 = 0; /*0x163bc*/
for ( i = 0; i < i_2; ++i ) /*0x163c5*/
{
if ( !*(_BYTE *)(a1 + 208LL * i + 152) ) /*0x163d9*/
{
v5 = 0; /*0x163e5*/
v6 = 0; /*0x163e8*/
i_1 = 0; /*0x163ec*/
if ( i_2 > 0 ) /*0x163ef*/
{
do /*0x16433*/
{
if ( !*(_BYTE *)(a1 + 208LL * i_1 + 152) && i != i_1 && RstDeviceCompareEntries(a1 + 208LL * i_1, a1 + 208LL * i, 0) ) /*0x16417*/
{
v5 = a1 + 208LL * i_1; /*0x16422*/
++v6; /*0x16425*/
}
++i_1; /*0x16429*/
}
while ( i_1 < *(__int16 *)(a1 + 29952) ); /*0x16433*/
if ( v6 == 1 ) /*0x1643a*/
{
RstDeviceAddAndJournal(v5, a1 + 208LL * i); /*0x16442*/
++v3; /*0x16447*/
}
}
}
i_2 = *(_WORD *)(a1 + 29952); /*0x1644a*/
}
return v3; /*0x16474*/
}
// Function: RstDeviceArrayFindByName @ 0x16484 (0x88 bytes)
// Index: 620/906
__int64 __fastcall RstDeviceArrayFindByName(__int64 a1, _BYTE *a2)
{
bool v4; // cc
__int16 v5; // bx
__int64 v6; // rax
v4 = *(_WORD *)(a1 + 29952) > 0; /*0x164a0*/
v5 = 0; /*0x164a7*/
while ( v4 ) /*0x164aa*/
{
v6 = 208LL * v5; /*0x164b0*/
if ( !*(_BYTE *)(v6 + a1 + 152) && !StrnCpy16(a2, (_BYTE *)(v6 + a1 + 28), 16) ) /*0x164d7*/
return a1 + 208LL * v5; /*0x164f3*/
v4 = ++v5 < *(_WORD *)(a1 + 29952); /*0x164dc*/
}
return 0; /*0x16506*/
}
// Function: RstPplRecoveryLogInitEx @ 0x1650c (0x35 bytes)
// Index: 621/906
__int64 __fastcall RstPplRecoveryLogInitEx(__int64 a1)
{
__int64 v2; // rcx
__int64 v3; // rax
RstPplRecoveryLogInit((_QWORD *)a1); /*0x16515*/
v2 = *(unsigned int *)(a1 + 20); /*0x1651a*/
*(_QWORD *)a1 = off_23F20; /*0x16524*/
v3 = RstMemPoolAlloc(v2); /*0x16527*/
*(_QWORD *)(a1 + 8) = v3; /*0x1652f*/
RstBufferMetaZero(v3); /*0x16533*/
return a1; /*0x1653b*/
}
// Function: Assert_128 @ 0x16544 (0x61 bytes)
// Index: 622/906
__int64 sub_16544()
{
__int64 result; // rax
_QWORD *i; // rbx
MemZero((_BYTE *)(Source_16 + 2724), 0, 256); /*0x16560*/
Assert_106(Source_16 + 224); /*0x16573*/
result = *(_QWORD *)(Source_16 + 216); /*0x1657f*/
for ( i = *(_QWORD **)(result + 264); i; i = (_QWORD *)*i ) /*0x16586*/
result = Assert_118((__int64)i); /*0x16592*/
return result; /*0x1659f*/
}
// Function: RstStringFormatAppendIndex @ 0x165a8 (0xd8 bytes)
// Index: 623/906
__int64 __fastcall RstStringFormatAppendIndex(__int64 Source, CHAR16 *Destination, __int16 a3)
{
__int16 v5; // r12
__int16 i; // bx
_BYTE v8[24]; // [rsp+20h] [rbp-18h] BYREF
RstHelper_8da8(v8, 10, ":%d", (unsigned int)a3); /*0x165de*/
v5 = StrLenA(v8); /*0x165ed*/
for ( i = 0; i < 16; ++i ) /*0x165f6*/
{
if ( !*((_BYTE *)Destination + i) ) /*0x165fd*/
break; /*0x16600*/
}
if ( i + v5 >= 16 ) /*0x16615*/
{
RstStringCopyN(Source, (char *)Destination + i - (__int16)(16 - v5), (unsigned __int16)(16 - v5)); /*0x1664b*/
return RstStringCopyN(Source + (__int16)(16 - v5), v8, (unsigned __int16)v5); /*0x16660*/
}
else
{
RstStrCopy(Source, Destination); /*0x1661d*/
return RstStrCopy(Source + i, v8); /*0x1662e*/
}
}
// Function: RstDeviceFindByConfig @ 0x16680 (0xcc bytes)
// Index: 624/906
__int64 __fastcall RstDeviceFindByConfig(__int64 a1, CHAR16 *Destination, int a3)
{
__int64 v4; // rsi
__int16 v7; // di
__int64 v8; // rbx
__int64 v9; // rax
__int64 v11; // rax
v4 = Source_16 + 2984; /*0x166aa*/
v7 = 0; /*0x166be*/
if ( *(__int16 *)(Source_16 + 32936) <= 0 ) /*0x166c6*/
return 0; /*0x166c6*/
while ( 1 ) /*0x166d9*/
{
v8 = v4 + 208LL * v7; /*0x166d9*/
v9 = RstDeviceArrayFindByName(v4, Destination); /*0x166e7*/
if ( RstDeviceCompareEntries(v9, v8, 1) ) /*0x166f5*/
break; /*0x166f5*/
if ( ++v7 >= *(__int16 *)(v4 + 29952) ) /*0x1670c*/
return 0; /*0x1670c*/
}
v11 = RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), (_BYTE *)(v8 + 28)); /*0x16738*/
if ( v11 && *(_DWORD *)(v11 + 28) == a3 ) /*0x16745*/
return v4 + 208LL * v7; /*0x16747*/
else
return 0; /*0x1670e*/
}
// Function: RstPplRecoveryLogInit @ 0x1674c (0x4b bytes)
// Index: 625/906
_QWORD *__fastcall RstPplRecoveryLogInit(_QWORD *a1)
{
__int64 v2; // rcx
__int64 v3; // rax
RstBufferInit(a1, 0x2000); /*0x1675a*/
*a1 = off_23F20; /*0x1676b*/
v2 = RstMemPoolAlloc(1384); /*0x16773*/
v3 = 0; /*0x16776*/
if ( v2 ) /*0x1677b*/
v3 = RstConfigArrayAllocPool(); /*0x1677d*/
a1[9] = v3; /*0x16785*/
RstBufferZeroExt(v3); /*0x16789*/
return a1; /*0x16791*/
}
// Function: Assert_42 @ 0x16798 (0xe6 bytes)
// Index: 626/906
__int64 __fastcall Assert_42(__int64 *a1, __int64 a2)
{
__int64 v3; // rcx
__int64 v4; // rax
int v5; // edi
__int64 result; // rax
v3 = *(unsigned int *)(a1[8] + 136); /*0x167a9*/
if ( (v3 & 0x100) != 0 ) /*0x167b6*/
{
v3 = WORD1(v3); /*0x167b8*/
if ( (v3 & 1) == 0 ) /*0x167be*/
{
v4 = a1[1]; /*0x167c0*/
if ( !_bittest((const signed __int32 *)(v4 + 52), 0x1Fu) /*0x167d8*/
|| (v5 = *(_DWORD *)(v4 + 32), v5 == (unsigned int)RstBufferChecksum(a1[1])) )
{
RstDeviceUpdateConfig(a1[9], a1[8], a1[1]); /*0x167f6*/
}
else
{
RstDeviceClearFlags(a1[8], 524544); /*0x167e3*/
}
}
}
result = a1[8]; /*0x167fb*/
if ( (*(_DWORD *)(result + 136) & 0x1000100) == 0 ) /*0x16809*/
{
if ( (unsigned __int8)RstDebugEnabled(v3, a2) ) /*0x1680b*/
{
if ( !*(_DWORD *)(a1[8] + 104) ) /*0x16818*/
DebugAssert("ReadCfgMgr.cpp", 0x10Du, "currDisk->logBlockSize > ( 0 )"); /*0x16831*/
}
*(_DWORD *)(a1[8] + 24) = *(_DWORD *)(a1[8] + 96); /*0x1683d*/
RstEntryBufferAllocSorted(*(_QWORD *)(Source_16 + 216), a1[8]); /*0x16852*/
RstDeviceSetFlags(a1[8], 64); /*0x16860*/
return RstDeviceClearFlags(a1[8], 524323); /*0x1686e*/
}
return result; /*0x16878*/
}
// Function: Assert @ 0x16880 (0x399 bytes)
// Index: 627/906
__int64 __fastcall Assert(__int64 a1, int a2)
{
__int64 v2; // r9
__int64 v4; // rsi
__int64 Source_1; // rax
unsigned int Source_4; // ecx
char v8; // r12
char v9; // r13
__int64 Source; // rbp
__int16 Source_3; // r14
__int64 v12; // rdx
CHAR16 *Destination; // rdi
__int64 v14; // rax
bool v15; // zf
__int64 v16; // rax
__int64 v17; // rdi
__int64 v18; // rax
_QWORD *v19; // rax
_BYTE *v20; // rsi
__int64 v21; // rdx
__int16 Source_2; // si
CHAR16 *Destination_2; // rdi
__int64 v24; // rax
__int64 v25; // rcx
__int64 *v26; // rax
__int64 v27; // rcx
unsigned __int16 v28; // di
__int16 v29; // si
__int64 v30; // rax
CHAR16 Destination_1[8]; // [rsp+20h] [rbp-58h] BYREF
char v32; // [rsp+30h] [rbp-48h]
__int64 v33; // [rsp+80h] [rbp+8h]
v2 = *(_QWORD *)(a1 + 8); /*0x16894*/
v4 = *(_QWORD *)(Source_16 + 216); /*0x168a2*/
Source_1 = *(unsigned __int8 *)(v2 + 56); /*0x168a9*/
Source_4 = 0; /*0x168ae*/
v8 = 0; /*0x168b7*/
v33 = v4; /*0x168bd*/
v9 = 0; /*0x168c5*/
Source = v2 + 48 * Source_1 + 216; /*0x168c8*/
Source_3 = 0; /*0x168d0*/
v12 = v2; /*0x168d4*/
if ( *(_BYTE *)(v2 + 56) ) /*0x168df*/
{
while ( 1 ) /*0x168f4*/
{
Destination = (CHAR16 *)(v12 + 48LL * Source_4 + 216); /*0x168f4*/
if ( !RstStringLastColonIndex(Destination) ) /*0x168ff*/
break; /*0x168ff*/
v14 = RstDeviceFindByConfig(a1, (__int64)Destination, a2); /*0x16912*/
if ( v14 ) /*0x1691a*/
{
v15 = (*(_BYTE *)(v14 + 100) & 8) == 0; /*0x16920*/
goto LABEL_17; /*0x16924*/
}
LABEL_20:
v12 = *(_QWORD *)(a1 + 8); /*0x16a0c*/
++Source_3; /*0x16a10*/
Source_1 = *(unsigned __int8 *)(v12 + 56); /*0x16a14*/
Source_4 = Source_3; /*0x16a18*/
if ( Source_3 >= (int)Source_1 ) /*0x16a1e*/
{
Source_4 = 0; /*0x16a2c*/
goto LABEL_22; /*0x16a2c*/
}
}
v16 = RstDeviceArrayFindByName(Source_16 + 2984, Destination); /*0x16937*/
v17 = v16; /*0x1693c*/
if ( !v16 ) /*0x16942*/
goto LABEL_20; /*0x16942*/
if ( (*(_DWORD *)(v16 + 136) & 0x10) == 0 ) /*0x16954*/
goto LABEL_20; /*0x16954*/
v18 = RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), (_BYTE *)(v16 + 28)); /*0x16962*/
if ( v18 ) /*0x1696a*/
{
if ( *(_DWORD *)(v18 + 28) != a2 ) /*0x16970*/
goto LABEL_20; /*0x16970*/
}
v19 = RstLinkedListFindData(v4, v17); /*0x1697c*/
if ( !RstDeviceIsActive((__int64)v19) ) /*0x1698c*/
{
LABEL_16:
v15 = (*(_BYTE *)(v17 + 100) & 8) == 0; /*0x169f8*/
LABEL_17:
if ( v15 ) /*0x169fc*/
v8 = 1; /*0x16a06*/
else
v9 = 1; /*0x169fe*/
goto LABEL_20; /*0x16a04*/
}
v20 = Assert_51((_BYTE *)(Source_16 + 224), v17, 0); /*0x169a7*/
if ( RstDebugEnabled() ) /*0x169aa*/
{
if ( v20 ) /*0x169b7*/
{
LABEL_15:
v4 = v33; /*0x169f0*/
goto LABEL_16; /*0x169f0*/
}
DebugAssert("ReadCfgMgr.cpp", 0x191u, "pJd"); /*0x169cc*/
}
if ( !v20 ) /*0x169d4*/
{
RstDeviceClearFlags(v17, 33554720); /*0x169de*/
RstDeviceSetFlags(v17, 0x40u); /*0x169eb*/
}
goto LABEL_15; /*0x169eb*/
}
LABEL_22:
if ( ((unsigned __int8)v9 & (unsigned __int8)v8) == 0 || _bittest((const signed __int32 *)(Source + 24), 0xAu) ) /*0x16a3c*/
{
Source_1 = *(_QWORD *)(a1 + 8); /*0x16b15*/
v28 = 0; /*0x16b19*/
if ( *(_BYTE *)(Source_1 + 57) ) /*0x16b1c*/
{
do /*0x16bfb*/
{
RstStringCopyN((__int64)Destination_1, Source, 16); /*0x16b42*/
v32 = 0; /*0x16b47*/
v29 = 1; /*0x16b4c*/
while ( RstLinkedListFindByKey(Source_16, (_BYTE *)Source) ) /*0x16b79*/
RstStringFormatAppendIndex(Source, Destination_1, v29++); /*0x16b5e*/
*(_WORD *)(*(_QWORD *)(a1 + 72) + 1376LL) = 0; /*0x16b85*/
*(_WORD *)(*(_QWORD *)(a1 + 72) + 1378LL) = *(_WORD *)(*(_QWORD *)(a1 + 72) + 1168LL); /*0x16b98*/
v30 = Assert_27(v33, (_BYTE *)Source, a1); /*0x16ba2*/
if ( v30 ) /*0x16baa*/
{
RstArrayStateCopy( /*0x16bd0*/
*(_QWORD *)(*(_QWORD *)(v30 + 8) + 248LL),
*(_QWORD *)(a1 + 8),
*(_QWORD *)(*(_QWORD *)(a1 + 72) + 24LL * *(__int16 *)(*(_QWORD *)(a1 + 72) + 1170LL) - 24));
RstConfigArrayUpdateSequenceCounters(*(_QWORD *)(a1 + 72)); /*0x16bd9*/
}
Source_1 = RstConfigBlockGetDataOffset(Source + 80, 0); /*0x16be4*/
++v28; /*0x16bed*/
Source = Source_1; /*0x16bf5*/
}
while ( v28 < *(unsigned __int8 *)(*(_QWORD *)(a1 + 8) + 57LL) ); /*0x16bfb*/
}
}
else
{
v21 = *(_QWORD *)(a1 + 8); /*0x16a42*/
Source_2 = 0; /*0x16a46*/
if ( *(_BYTE *)(v21 + 56) ) /*0x16a49*/
{
do /*0x16b0a*/
{
Destination_2 = (CHAR16 *)(v21 + 48LL * Source_4 + 216); /*0x16a70*/
if ( RstStringLastColonIndex(Destination_2) ) /*0x16a7b*/
{
v24 = RstDeviceFindByConfig(a1, (__int64)Destination_2, a2); /*0x16a8e*/
if ( v24 ) /*0x16a96*/
{
v25 = RstLinkedListFindByName(v33, (_BYTE *)(v24 + 28))[6]; /*0x16aa4*/
if ( (*(_DWORD *)(v25 + 136) & 0x100) != 0 ) /*0x16ab4*/
RstDeviceSetFlags(v25, 0x10000u); /*0x16ab9*/
}
}
if ( a2 == *(_DWORD *)(RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), Destination_2) + 28) ) /*0x16ace*/
{
v26 = RstLinkedListFindByName(v33, Destination_2); /*0x16ad6*/
if ( v26 ) /*0x16ade*/
{
v27 = v26[6]; /*0x16ae0*/
if ( (*(_DWORD *)(v27 + 136) & 0x100) != 0 ) /*0x16af0*/
RstDeviceSetFlags(v27, 0x10000u); /*0x16af5*/
}
}
v21 = *(_QWORD *)(a1 + 8); /*0x16afa*/
++Source_2; /*0x16afe*/
Source_1 = *(unsigned __int8 *)(v21 + 56); /*0x16b01*/
Source_4 = Source_2; /*0x16b05*/
}
while ( Source_2 < (int)Source_1 ); /*0x16b0a*/
}
}
return Source_1; /*0x16c09*/
}
// Function: RstDeviceClearInitFlags @ 0x16c1c (0x25b bytes)
// Index: 628/906
void __fastcall RstDeviceClearInitFlags(__int64 a1)
{
__int64 *v2; // rbx
__int64 v3; // rdx
__int64 n24_1; // r8
char v5; // r12
unsigned __int8 v6; // r10
int n24; // eax
unsigned __int8 j; // r9
unsigned __int8 n2; // cl
int j_1; // ecx
__int64 v11; // rcx
__int64 v12; // rax
unsigned __int8 i; // di
int n24_2; // ecx
__int64 v15; // rsi
__int64 v16; // rcx
__int64 v17; // rcx
unsigned __int8 k; // di
__int64 v19; // rbx
__int64 v20; // rax
int v21; // edx
if ( !*(_BYTE *)(a1 + 56) ) /*0x16c45*/
{
v2 = *(__int64 **)(*(_QWORD *)(Source_16 + 216) + 264LL); /*0x16c64*/
RstConfigArrayMergeDuplicates(Source_16 + 2984); /*0x16c6b*/
while ( 1 ) /*0x16da0*/
{
if ( !v2 ) /*0x16da3*/
{
RstDeviceListUpdateStatus(*(_QWORD *)(Source_16 + 216)); /*0x16db7*/
goto LABEL_33; /*0x16db7*/
}
v5 = 0; /*0x16c75*/
v6 = 0; /*0x16c78*/
LOBYTE(n24_1) = 0; /*0x16c7b*/
if ( *((_BYTE *)v2 + 20) ) /*0x16c7e*/
{
do /*0x16cbb*/
{
n24 = 24; /*0x16c88*/
if ( (unsigned __int8)n24_1 < 0x19u ) /*0x16c95*/
n24 = (unsigned __int8)n24_1; /*0x16c95*/
v3 = v2[n24 + 3]; /*0x16c9a*/
if ( (*(_BYTE *)(*(_QWORD *)(v3 + 48) + 139LL) & 1) != 0 ) /*0x16caa*/
v6 |= 1 << n24_1; /*0x16cb1*/
LOBYTE(n24_1) = n24_1 + 1; /*0x16cb4*/
}
while ( (unsigned __int8)n24_1 < *((_BYTE *)v2 + 20) ); /*0x16cbb*/
if ( v6 ) /*0x16cc0*/
break; /*0x16cc0*/
}
LABEL_23:
for ( i = 0; i < *((_BYTE *)v2 + 20); ++i ) /*0x16d3d*/
{
n24_2 = 24; /*0x16d47*/
if ( i < 0x19u ) /*0x16d50*/
n24_2 = i; /*0x16d50*/
v15 = v2[n24_2 + 3]; /*0x16d56*/
v16 = *(_QWORD *)(v15 + 48); /*0x16d5b*/
if ( (*(_BYTE *)(v16 + 139) & 1) == 0 ) /*0x16d66*/
{
RstDeviceClearFlags(v16, 0x8000); /*0x16d6d*/
if ( v5 ) /*0x16d75*/
RstDeviceSetFlags(*(_QWORD *)(v15 + 48), 0x80u); /*0x16d80*/
}
}
LOBYTE(v3) = 1; /*0x16d95*/
(**(void (__fastcall ***)(__int64, __int64, __int64))v2[31])(v2[31], v3, n24_1); /*0x16d9b*/
v2 = (__int64 *)*v2; /*0x16d9d*/
}
for ( j = 0; ; ++j ) /*0x16cc2*/
{
n2 = *((_BYTE *)v2 + 224); /*0x16ccb*/
if ( n2 >= 2u ) /*0x16cd0*/
n2 = 2; /*0x16cd2*/
if ( j >= n2 ) /*0x16cda*/
goto LABEL_23; /*0x16cda*/
j_1 = 1; /*0x16ce0*/
if ( j < 2u ) /*0x16ce7*/
j_1 = j; /*0x16ce7*/
n24_1 = v2[j_1 + 29]; /*0x16ced*/
v11 = *(_QWORD *)(*(_QWORD *)(n24_1 + 56) + 40LL); /*0x16cf9*/
if ( *(_DWORD *)v11 == 2 || *(_DWORD *)v11 == 3 ) /*0x16d05*/
{
v3 = ~(unsigned __int8)(1 << *(_BYTE *)(v11 + 41)); /*0x16d1e*/
if ( ((unsigned __int8)~(1 << *(_BYTE *)(v11 + 41)) & v6) == 0 ) /*0x16d23*/
continue; /*0x16d23*/
}
else if ( *(_DWORD *)v11 > 1u ) /*0x16d0a*/
{
continue; /*0x16d0a*/
}
v12 = *(_QWORD *)n24_1; /*0x16d25*/
*(_DWORD *)(n24_1 + 48) |= 0x2000u; /*0x16d28*/
v5 = 1; /*0x16d2e*/
*(_DWORD *)(v12 + 100) |= 4u; /*0x16d31*/
}
}
LABEL_33:
v17 = *(_QWORD *)(a1 + 72); /*0x16dbc*/
for ( k = 0; k < *(__int16 *)(v17 + 1168); ++k ) /*0x16dcb*/
{
v19 = *(_QWORD *)(v17 + 1160) + 48LL * k; /*0x16ddd*/
v20 = RstDeviceArrayFindByName(Source_16 + 2984, (_BYTE *)v19); /*0x16df5*/
if ( (*(_DWORD *)(v19 + 24) & 2) != 0 ) /*0x16e05*/
{
if ( v20 ) /*0x16e0a*/
{
v21 = *(_DWORD *)(v20 + 136); /*0x16e0c*/
if ( (v21 & 0x10) != 0 && (v21 & 0x10000) == 0 && (v21 & 1) == 0 && (v21 & 0x40) == 0 ) /*0x16e31*/
RstDeviceSetFlags(v20, 2u); /*0x16e3b*/
}
}
v17 = *(_QWORD *)(a1 + 72); /*0x16e40*/
}
}
// Function: RstConfigDeviceListAddIfNew @ 0x16e78 (0x52 bytes)
// Index: 629/906
__int64 __fastcall RstConfigDeviceListAddIfNew(__int64 a1, __int64 a2)
{
__int64 result; // rax
__int64 v5; // rcx
CHAR16 i[12]; // [rsp+20h] [rbp-38h] BYREF
int v7; // [rsp+38h] [rbp-20h]
result = RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), (_BYTE *)(a2 + 28)); /*0x16e90*/
if ( !result ) /*0x16e98*/
{
RstDeviceInfoToBuffer((__int64)i, (_DWORD *)a2); /*0x16ea2*/
v5 = *(_QWORD *)(a1 + 72); /*0x16ea7*/
v7 |= 0x80000u; /*0x16eab*/
return RstConfigDeviceListAdd(v5, i, -1); /*0x16eba*/
}
return result; /*0x16ec4*/
}
// Function: RstDeviceFindByScsiId @ 0x16ecc (0x1a8 bytes)
// Index: 630/906
__int64 *__fastcall RstDeviceFindByScsiId(__int64 a1, unsigned int a2)
{
__int64 v3; // rcx
__int64 i; // rbp
__int64 *v5; // rdi
unsigned __int16 v6; // bx
__int64 Source; // rsi
_BYTE *v8; // rax
__int64 v9; // r13
__int64 *v10; // rax
__int16 v11; // r14
bool v12; // r12
int v13; // ecx
int v14; // ebx
unsigned __int8 v15; // al
CHAR16 Destination[8]; // [rsp+20h] [rbp-48h] BYREF
char v18; // [rsp+30h] [rbp-38h]
v3 = *(_QWORD *)(a1 + 72); /*0x16ef2*/
i = *(_QWORD *)(Source_16 + 216); /*0x16ef6*/
v5 = 0; /*0x16f0e*/
v6 = *(_WORD *)(v3 + 1170) - 1; /*0x16f13*/
Source = *(_QWORD *)(a1 + 8) + 48LL * a2 + 216; /*0x16f16*/
v8 = (_BYTE *)RstConfigDeviceListFind(v3, (_BYTE *)Source); /*0x16f21*/
v9 = (__int64)v8; /*0x16f26*/
if ( !v8 ) /*0x16f2c*/
goto LABEL_19; /*0x16f2c*/
v10 = RstLinkedListFindByName(i, v8); /*0x16f38*/
v11 = v6; /*0x16f3d*/
v5 = v10; /*0x16f41*/
v12 = *(_DWORD *)(v9 + 28) == v6 || *(_DWORD *)(v9 + 28) == -1; /*0x16f56*/
if ( !v10 || (v13 = *(_DWORD *)(v10[6] + 136), (v13 & 0x10) == 0) || (v13 & 0x10040) != 0 ) /*0x16f77*/
{
StrnCpy(Destination, (const CHAR16 *)Source, 0x10u); /*0x16fc1*/
v18 = 0; /*0x16fcb*/
if ( RstStringLastColonIndex(Destination) ) /*0x16fd0*/
{
if ( v5 ) /*0x17015*/
goto LABEL_16; /*0x17015*/
}
else
{
do /*0x16ff4*/
RstStringFormatAppendIndex(Source, Destination, v6++); /*0x16fe5*/
while ( RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), (_BYTE *)Source) ); /*0x16ff4*/
v9 = RstConfigDeviceListAdd(*(_QWORD *)(a1 + 72), (const CHAR16 *)Source, v11); /*0x1700d*/
}
v5 = RstDeviceListInsertUnique(i, Source); /*0x17022*/
if ( !v5 ) /*0x17028*/
goto LABEL_17; /*0x17028*/
LABEL_16:
*(_DWORD *)(v5[6] + 96) = -1; /*0x1702a*/
goto LABEL_17; /*0x1702e*/
}
v14 = *(_DWORD *)(Source + 24); /*0x16f79*/
v15 = (unsigned __int8)RstDeviceFindAndRemove((_BYTE *)Source); /*0x16f7f*/
RstDeviceSetFlagsFiltered((__int64)v5, v14, v15 != 0 ? 46269063 : 12714631);
if ( !v12 ) /*0x16fa4*/
*(_BYTE *)(i + 362) = 0; /*0x16faa*/
LABEL_17:
RstConfigArrayFindOrInsertEntry(*(_QWORD *)(a1 + 72), v9); /*0x17032*/
if ( !v5 || (*(_DWORD *)(Source + 24) & 2) == 0 ) /*0x1704a*/
LABEL_19:
*(_BYTE *)(i + 362) = 0; /*0x1704c*/
return v5; /*0x17067*/
}
// Function: RstNotifySpareRebuild @ 0x17074 (0x4d bytes)
// Index: 631/906
__int64 __fastcall RstNotifySpareRebuild(__int64 a1)
{
__int64 result; // rax
_QWORD *i; // rbx
__int64 v4; // rdx
result = Source_16; /*0x1707e*/
for ( i = *(_QWORD **)(*(_QWORD *)(Source_16 + 216) + 16LL); i; i = (_QWORD *)*i ) /*0x1708f*/
{
v4 = i[6]; /*0x17095*/
result = *(_DWORD *)(v4 + 136) >> 15; /*0x1709f*/
if ( (*(_DWORD *)(v4 + 136) & 0x8000) != 0 ) /*0x170a4*/
result = RstConfigDeviceListAddIfNew(a1, v4); /*0x170a9*/
}
return result; /*0x170bb*/
}
// Function: Assert_74 @ 0x170c4 (0x1ca bytes)
// Index: 632/906
__int64 Assert_74__int64 a1)
{
__int64 v2; // rax
__int64 v3; // rdx
__int64 v4; // rax
__int64 v5; // rcx
__int16 v6; // di
__int64 i; // rsi
__int64 v8; // rdi
__int64 v9; // rax
*(_BYTE *)(a1 + 56) = 1; /*0x170db*/
RstNotifySpareRebuild(); /*0x170df*/
v2 = *(_QWORD *)(a1 + 72); /*0x170e4*/
*(_WORD *)(a1 + 58) = 0; /*0x170ea*/
if ( *(__int16 *)(v2 + 1168) > 0 ) /*0x170f5*/
{
do /*0x1719d*/
{
v3 = *(_QWORD *)(*(_QWORD *)(a1 + 72) + 1160LL) + 48LL * *(__int16 *)(a1 + 58); /*0x1710c*/
if ( (*(_DWORD *)(v3 + 24) & 0x80000) != 0 ) /*0x1711b*/
{
v4 = RstDeviceArrayFindByName(Source_16 + 2984, v3); /*0x1712b*/
*(_QWORD *)(a1 + 64) = v4; /*0x17136*/
RstHelper_89a4(a1, v4); /*0x1713a*/
Assert_42(a1); /*0x17142*/
if ( !(unsigned __int8)RstDeviceGetFeatureFlagBit(13) ) /*0x1714c*/
{
v5 = *(_QWORD *)(a1 + 64); /*0x17156*/
if ( *(_WORD *)(v5 + 172) != 0x8086 && (*(_DWORD *)(v5 + 136) & 0x100) != 0 ) /*0x17175*/
{
RstDeviceClearFlags(v5, *(unsigned int *)(v5 + 136)); /*0x17177*/
RstDeviceSetFlags(*(_QWORD *)(a1 + 64), (char *)&loc_1000F + 1); /*0x17185*/
}
}
}
++*(_WORD *)(a1 + 58); /*0x1718a*/
}
while ( *(_WORD *)(a1 + 58) < *(_WORD *)(*(_QWORD *)(a1 + 72) + 1168LL) ); /*0x1719d*/
}
v6 = 0; /*0x171aa*/
for ( i = *(_QWORD *)(Source_16 + 216); v6 < *(__int16 *)(*(_QWORD *)(a1 + 72) + 1168LL); ++v6 ) /*0x171bf*/
RstDeviceListInsertUnique(i, *(_QWORD *)(*(_QWORD *)(a1 + 72) + 1160LL) + 48LL * v6); /*0x171db*/
v8 = RstCfgListFindNextOnlineEntry(*(_QWORD *)(a1 + 72)); /*0x171f9*/
if ( v8 ) /*0x171ff*/
{
do /*0x1726c*/
{
RstHelper_89a4(a1, v8); /*0x17212*/
if ( (*(_DWORD *)(v8 + 136) & 0x100) != 0 /*0x17243*/
&& *(__int16 *)(Source_16 + 192) + *(unsigned __int8 *)(*(_QWORD *)(a1 + 8) + 57LL) <= 24 )
{
v9 = RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), v8 + 28); /*0x1724d*/
Assert(a1, *(_DWORD *)(v9 + 28)); /*0x17258*/
}
v8 = RstCfgListFindNextOnlineEntry(*(_QWORD *)(a1 + 72)); /*0x17266*/
}
while ( v8 ); /*0x1726c*/
}
else
{
RstBufferMetaZero(*(_QWORD *)(a1 + 8)); /*0x17205*/
}
*(_BYTE *)(a1 + 56) = 0; /*0x17271*/
return RstDeviceClearInitFlags(a1); /*0x17284*/
}
// Function: RstAllocTableAlloc @ 0x17290 (0x62 bytes)
// Index: 633/906
__int64 __fastcall RstAllocTableAlloc(_BYTE *i, unsigned __int16 n2, int a3)
{
unsigned __int16 v3; // r9
int v4; // r8d
int v6; // eax
v3 = 0; /*0x17290*/
if ( !a3 ) /*0x17299*/
return 0; /*0x17299*/
v4 = a3 & 0x7FFFFFFF; /*0x1729b*/
if ( !n2 ) /*0x172a4*/
return 0; /*0x172c8*/
while ( (*(_DWORD *)&i[16 * v3] & 0x7FFFFFFF) != v4 ) /*0x172bc*/
{
if ( ++v3 >= n2 ) /*0x172c6*/
return 0; /*0x172c6*/
}
v6 = dword_574D0 + 1; /*0x172d8*/
*(_DWORD *)&i[16 * v3] |= 0x80000000; /*0x172db*/
dword_574D0 = v6; /*0x172e1*/
*(_DWORD *)&i[16 * v3 + 4] = v6; /*0x172e7*/
return *(_QWORD *)&i[16 * v3 + 8]; /*0x172ca*/
}
// Function: RstAllocTableFindMinSeq @ 0x172f4 (0x9b bytes)
// Index: 634/906
__int64 __fastcall RstAllocTableFindMinSeq(_BYTE *i, unsigned __int16 n2, int a3)
{
__int64 result; // rax
unsigned __int16 n2_2; // r8
unsigned __int16 n2_1; // cx
unsigned int v9; // edx
unsigned int *v10; // rax
__int64 v11; // rcx
result = RstAllocTableAlloc(i, n2, a3); /*0x1730c*/
n2_2 = 0; /*0x17311*/
if ( !result ) /*0x17317*/
{
n2_1 = 0; /*0x1731d*/
v9 = -1; /*0x17321*/
if ( !n2 ) /*0x17328*/
return 0; /*0x17328*/
v10 = (unsigned int *)(i + 4); /*0x1732a*/
do /*0x1734e*/
{
if ( !_bittest((const signed __int32 *)v10 - 1, 0x1Fu) && *v10 < v9 ) /*0x1733b*/
{
v9 = *v10; /*0x1733d*/
n2_2 = n2_1; /*0x1733f*/
}
++n2_1; /*0x17343*/
v10 += 4; /*0x17347*/
}
while ( n2_1 < n2 ); /*0x1734e*/
if ( v9 == -1 ) /*0x17353*/
{
return 0; /*0x1737d*/
}
else
{
v11 = 2LL * n2_2; /*0x17363*/
*(_DWORD *)&i[8 * v11 + 4] = ++dword_574D0; /*0x1736f*/
result = *(_QWORD *)&i[16 * n2_2 + 8]; /*0x17373*/
*(_DWORD *)&i[8 * v11] = a3 | 0x80000000; /*0x17378*/
}
}
return result; /*0x17389*/
}
// Function: RstAllocTableAllocBySize @ 0x17390 (0x36 bytes)
// Index: 635/906
__int64 __fastcall RstAllocTableAllocBySize(__int16 n16, int a2)
{
_BYTE *i; // rcx
if ( n16 == 16 ) /*0x1739b*/
{
i = &i__3; /*0x1739d*/
return RstAllocTableAlloc(i, 2u, a2); /*0x173ae*/
}
if ( n16 == 1 ) /*0x173b4*/
{
i = &i__4; /*0x173b6*/
return RstAllocTableAlloc(i, 2u, a2); /*0x173bd*/
}
return 0; /*0x173c1*/
}
// Function: RstAllocTableFindBySize @ 0x173c8 (0x36 bytes)
// Index: 636/906
__int64 __fastcall RstAllocTableFindBySize(__int16 n16, int a2)
{
_BYTE *i; // rcx
if ( n16 == 16 ) /*0x173d3*/
{
i = &i__3; /*0x173d5*/
return RstAllocTableFindMinSeq(i, 2u, a2); /*0x173e6*/
}
if ( n16 == 1 ) /*0x173ec*/
{
i = &i__4; /*0x173ee*/
return RstAllocTableFindMinSeq(i, 2u, a2); /*0x173f5*/
}
return 0; /*0x173f9*/
}
// Function: RstBufferPoolLock @ 0x17400 (0x67 bytes)
// Index: 637/906
__int64 __fastcall RstBufferPoolLock(__int64 a1)
{
unsigned __int16 v1; // dx
unsigned __int16 i; // r8
__int64 result; // rax
v1 = 0; /*0x17400*/
for ( i = 0; i < 2u; ++i ) /*0x17409*/
{
if ( qword_574B8[2 * i] == a1 ) /*0x1741c*/
{
*(_DWORD *)(&i__3 + (_QWORD)&_ImageBase[8 * i]) &= ~0x80000000; /*0x1745c*/
return 2LL * i; /*0x17459*/
}
}
while ( 1 ) /*0x1742c*/
{
result = 2LL * v1; /*0x1742c*/
if ( qword_57498[2 * v1] == a1 ) /*0x17437*/
break; /*0x17437*/
if ( ++v1 >= 2u ) /*0x17440*/
return result; /*0x17440*/
}
*(_DWORD *)(&i__4 + (_QWORD)&_ImageBase[8 * v1]) &= ~0x80000000; /*0x1744a*/
return 2LL * v1; /*0x17442*/
}
// Function: RstBufferPoolInit @ 0x17468 (0x8f bytes)
// Index: 638/906
unsigned __int64 RstBufferPoolInit()
{
__int64 n2; // rdx
unsigned __int64 result; // rax
__int64 *v2; // rcx
__int64 n2_1; // r8
__int64 *v4; // rcx
MemZero(&i__2, 0, (__int64)&loc_2200F + 1); /*0x1747b*/
MemZero(&i__3, 0, 32); /*0x1748d*/
MemZero(&i__4, 0, 32); /*0x1749f*/
dword_574D0 = 0; /*0x174a4*/
n2 = 2; /*0x174b2*/
result = (unsigned __int64)&unk_35490 & 0xFFFFFFFFFFFFFFF0uLL; /*0x174b7*/
v2 = qword_574B8; /*0x174bb*/
n2_1 = 2; /*0x174c2*/
do /*0x174d6*/
{
*v2 = result; /*0x174c5*/
result += 0x10000LL; /*0x174c8*/
v2 += 2; /*0x174ce*/
--n2_1; /*0x174d2*/
}
while ( n2_1 ); /*0x174d6*/
v4 = qword_57498; /*0x174d8*/
do /*0x174f0*/
{
*v4 = result; /*0x174df*/
result += 4096LL; /*0x174e2*/
v4 += 2; /*0x174e8*/
--n2; /*0x174ec*/
}
while ( n2 ); /*0x174f0*/
return result; /*0x174f2*/
}
// Function: RstBufferGetAvailable @ 0x174f8 (0x27 bytes)
// Index: 639/906
__int64 __fastcall RstBufferGetAvailable(__int64 a1)
{
unsigned int v1; // r8d
v1 = (((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(a1 + 16) - 1) /*0x1750d*/
& (((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(a1 + 16) - *(_DWORD *)a1);
if ( (unsigned __int64)v1 > *(_QWORD *)(a1 + 8) ) /*0x17517*/
return 0; /*0x17517*/
return v1; /*0x1751e*/
}
// Function: RstBufferSetRange @ 0x17520 (0xc bytes)
// Index: 640/906
void __fastcall RstBufferSetRange(__int64 a1, unsigned __int64 n3, __int64 a3, int a4)
{
*(_QWORD *)a1 = n3; /*0x17520*/
*(_QWORD *)(a1 + 8) = a3; /*0x17523*/
*(_DWORD *)(a1 + 16) = a4; /*0x17527*/
}
// Function: RstBufferEntryZero @ 0x1752c (0x3e bytes)
// Index: 641/906
__int64 __fastcall RstBufferEntryZero(__int64 a1)
{
_BYTE *v1; // rax
_QWORD *v2; // rdx
__int64 n24; // r8
v1 = (_BYTE *)(a1 + 240); /*0x1752f*/
v2 = (_QWORD *)(a1 + 48); /*0x17536*/
n24 = 24; /*0x1753a*/
*(_WORD *)(a1 + 4) = 0; /*0x1753e*/
*(_DWORD *)a1 = 0; /*0x17543*/
*(_WORD *)(a1 + 16) = 0; /*0x17546*/
*(_QWORD *)(a1 + 24) = 0; /*0x1754b*/
*(_BYTE *)(a1 + 6) = 0; /*0x1754f*/
do /*0x17564*/
{
*v2 = 0; /*0x17553*/
*v1++ = 0; /*0x17556*/
++v2; /*0x1755c*/
--n24; /*0x17560*/
}
while ( n24 ); /*0x17564*/
return a1; /*0x17569*/
}
// Function: RstBufferSetSize @ 0x1756c (0x5 bytes)
// Index: 642/906
void __fastcall RstBufferSetSize(__int64 a1, __int64 a2)
{
*(_QWORD *)(a1 + 8) = a2; /*0x1756c*/
}
// Function: RstRaidConfigFromDiskInfoPopulate @ 0x17574 (0x10b bytes)
// Index: 643/906
char __fastcall RstRaidConfigFromDiskInfoPopulate(__int64 a1, __int64 a2, __int64 a3)
{
__int64 v5; // r12
bool v7; // cc
__int64 v8; // rax
__int16 v9; // di
__int64 v10; // rsi
__int64 v11; // rax
v5 = *(_QWORD *)(Source_16 + 216); /*0x1759e*/
*(_DWORD *)a1 = *(unsigned __int8 *)(a2 + 14); /*0x175ac*/
*(_WORD *)(a1 + 4) = *(unsigned __int8 *)(a2 + 15); /*0x175b2*/
*(_WORD *)(a1 + 16) = *(_WORD *)(a2 + 12); /*0x175ba*/
*(_QWORD *)(a1 + 24) = RstBufferGetBlockOffset(a2); /*0x175c9*/
*(_BYTE *)(a1 + 6) = *(_BYTE *)(a2 + 16); /*0x175d0*/
*(_QWORD *)(a1 + 32) = RstBufferGetBlockCount(a2); /*0x175db*/
*(_BYTE *)(a1 + 40) = *(_BYTE *)(a2 + 17); /*0x175e2*/
v8 = RstBufferGetBlockIndex(a2); /*0x175e5*/
v7 = *(_BYTE *)(a1 + 6) <= 0x18u; /*0x175ea*/
*(_QWORD *)(a1 + 8) = v8; /*0x175ee*/
LOBYTE(v8) = *(_BYTE *)(a2 + 18); /*0x175f2*/
*(_BYTE *)(a1 + 41) = v8; /*0x175f5*/
if ( !v7 ) /*0x175f8*/
*(_BYTE *)(a1 + 6) = 24; /*0x175fa*/
v9 = 0; /*0x17601*/
if ( *(_BYTE *)(a1 + 6) ) /*0x17605*/
{
do /*0x1765e*/
{
v10 = v9; /*0x1760b*/
v11 = RstDeviceFindByScsiId(a3, *(_DWORD *)(a2 + 4LL * v9 + 48) & 0xFFF); /*0x1761c*/
if ( v11 && (*(_DWORD *)(*(_QWORD *)(v11 + 48) + 136LL) & 0x10) != 0 ) /*0x17636*/
++*(_WORD *)(v5 + 360); /*0x17638*/
*(_QWORD *)(a1 + 8LL * v9 + 48) = v11; /*0x17641*/
v8 = (unsigned __int16)v9++; /*0x17646*/
*(_BYTE *)(v10 + a1 + 240) = *(_BYTE *)(a2 + 4 * v8 + 51); /*0x17650*/
LOWORD(v8) = *(unsigned __int8 *)(a1 + 6); /*0x17657*/
}
while ( v9 < (__int16)v8 ); /*0x1765e*/
}
return v8; /*0x17674*/
}
// Function: RstBufferInitEntry @ 0x17680 (0x18 bytes)
// Index: 644/906
__int64 __fastcall RstBufferInitEntry(__int64 a1, __int16 a2)
{
*(_WORD *)(a1 + 4) = a2; /*0x17682*/
*(_DWORD *)a1 = 1; /*0x17686*/
*(_BYTE *)(a1 + 6) = 0; /*0x1768c*/
*(_QWORD *)(a1 + 8) = 0; /*0x1768f*/
*(_WORD *)(a1 + 16) = 0; /*0x17693*/
return 0; /*0x17697*/
}
// Function: RstRaidCalcStripeLayout @ 0x17698 (0x188 bytes)
// Index: 645/906
__int64 __fastcall RstRaidCalcStripeLayout(
__int64 a1,
__int64 *a2,
unsigned __int16 n3,
__int64 a4,
unsigned int a5,
__int64 a6,
__int16 a7)
{
int n5; // edi
unsigned int v12; // esi
unsigned int v13; // ebx
unsigned __int64 v14; // rcx
int n3_1; // eax
unsigned __int64 v16; // r8
unsigned __int64 v17; // r8
__int64 v18; // r8
__int16 v19; // cx
__int64 n3_2; // rdx
__int64 v21; // rax
n5 = *(unsigned __int16 *)(a1 + 4); /*0x176ac*/
*(_QWORD *)(a1 + 24) = 0; /*0x176b6*/
if ( !n5 ) /*0x176ca*/
goto LABEL_11; /*0x176ca*/
if ( n5 == 1 ) /*0x176cf*/
{
n3_1 = *(unsigned __int8 *)(a1 + 40); /*0x17701*/
if ( (__int16)n3 < n3_1 ) /*0x1770c*/
return 9; /*0x17713*/
if ( (__int16)n3 == n3_1 ) /*0x17718*/
*(_QWORD *)(a1 + 24) = a4; /*0x1771a*/
LABEL_11:
v12 = a5; /*0x1771e*/
v13 = ((unsigned int)&loc_1FFFA + 6) / a5; /*0x1772f*/
v14 = ((unsigned int)&loc_1FFFA + 6) / a5 * (__int16)n3; /*0x17731*/
if ( n3 == 1 ) /*0x17738*/
*(_QWORD *)(a1 + 24) = a4; /*0x1773a*/
goto LABEL_13; /*0x1773a*/
}
if ( n5 != 5 ) /*0x176d4*/
return 17; /*0x176da*/
if ( (__int16)n3 < 3 ) /*0x176e4*/
return 9; /*0x176e4*/
v12 = a5; /*0x176e6*/
v13 = ((unsigned int)&loc_1FFFA + 6) / a5; /*0x176fa*/
v14 = ((unsigned int)&loc_1FFFA + 6) / a5 * ((__int16)n3 - 1); /*0x176fc*/
LABEL_13:
v16 = (a4 + (unsigned __int64)(unsigned int)(v14 - 1)) / v14; /*0x1773e*/
if ( (_WORD)n5 == 1 ) /*0x17750*/
v16 *= *(unsigned __int8 *)(a1 + 40); /*0x17757*/
v17 = v13 / a7 * v16; /*0x17770*/
*(_QWORD *)(a1 + 32) = v17; /*0x17774*/
if ( *(_WORD *)(a1 + 4) == 1 ) /*0x1777d*/
*(_QWORD *)(a1 + 32) = v17 / *(unsigned __int8 *)(a1 + 40); /*0x1778c*/
if ( !*(_QWORD *)(a1 + 24) ) /*0x17790*/
*(_QWORD *)(a1 + 24) = v17 * a7; /*0x1779e*/
*(_QWORD *)(a1 + 24) += 0x100000 / v12; /*0x177b2*/
v18 = *a2; /*0x177ba*/
*(_QWORD *)(a1 + 8) = a6; /*0x177be*/
v19 = 1; /*0x177c2*/
*(_WORD *)(a1 + 16) = a7; /*0x177c6*/
*(_BYTE *)(a1 + 6) = 0; /*0x177cb*/
if ( (__int16)n3 > 0 ) /*0x177cf*/
{
n3_2 = n3; /*0x177d1*/
do /*0x17807*/
{
if ( *(_BYTE *)(a1 + 6) < 0x18u ) /*0x177da*/
{
*(_BYTE *)(*(unsigned __int8 *)(a1 + 6) + a1 + 240) = 0; /*0x177e1*/
*(_QWORD *)(a1 + 8LL * (unsigned __int8)(*(_BYTE *)(a1 + 6))++ + 48) = v18; /*0x177ee*/
}
v21 = v19++; /*0x177f7*/
--n3_2; /*0x177ff*/
v18 = a2[v21]; /*0x17802*/
}
while ( n3_2 ); /*0x17807*/
}
return 0; /*0x1781a*/
}
// Function: RstDeviceGetBuffer @ 0x17820 (0x5 bytes)
// Index: 646/906
__int64 __fastcall RstDeviceGetBuffer(__int64 a1)
{
return *(_QWORD *)(a1 + 24); /*0x17824*/
}
// Function: RstRaidArrayCopyState @ 0x17828 (0xee bytes)
// Index: 647/906
char __fastcall RstRaidArrayCopyState(__int64 a1, __int64 a2)
{
__int16 v3; // r8
char v5; // al
__int64 *v6; // rax
unsigned __int8 n23_1; // di
__int64 i; // r12
int n23; // ecx
__int64 v10; // rbp
*(_DWORD *)a1 = *(_DWORD *)(a2 + 8); /*0x1784c*/
v3 = *(_WORD *)(a2 + 40); /*0x1784e*/
*(_WORD *)(a1 + 4) = v3; /*0x17856*/
*(_BYTE *)(a1 + 6) = *(_BYTE *)(a2 + 42); /*0x1785e*/
*(_QWORD *)(a1 + 8) = *(_QWORD *)(a2 + 32); /*0x17865*/
*(_WORD *)(a1 + 16) = *(_WORD *)(a2 + 72); /*0x1786d*/
*(_QWORD *)(a1 + 24) = *(_QWORD *)(a2 + 64); /*0x17875*/
*(_QWORD *)(a1 + 32) = *(_QWORD *)(a2 + 56); /*0x1787d*/
*(_BYTE *)(a1 + 41) = *(_BYTE *)(a2 + 92); /*0x17884*/
if ( v3 == 1 ) /*0x1788b*/
v5 = *(_BYTE *)(a2 + 100); /*0x1788d*/
else
v5 = 1; /*0x17893*/
*(_BYTE *)(a1 + 40) = v5; /*0x17896*/
LOBYTE(v6) = Source_16; /*0x17899*/
n23_1 = 0; /*0x178a0*/
for ( i = *(_QWORD *)(Source_16 + 216); n23_1 < *(_BYTE *)(a1 + 6); ++n23_1 ) /*0x178aa*/
{
n23 = 23; /*0x178b4*/
if ( n23_1 < 0x18u ) /*0x178bd*/
n23 = n23_1; /*0x178bd*/
v10 = 2 * (n23 + 7LL); /*0x178ca*/
v6 = RstLinkedListFindByName(i, (_BYTE *)(*(_QWORD *)(a2 + 16 * (n23 + 7LL)) + 28LL)); /*0x178d5*/
if ( n23_1 < 0x18u ) /*0x178de*/
{
*(_QWORD *)(a1 + 8LL * n23_1 + 48) = v6; /*0x178e4*/
LOBYTE(v6) = *(_BYTE *)(a2 + 8 * v10 + 8); /*0x178e9*/
*(_BYTE *)(n23_1 + a1 + 240) = (_BYTE)v6; /*0x178ed*/
}
}
return (char)v6; /*0x1790c*/
}
// Function: RstRaidMemberFirstActive @ 0x17918 (0x4c bytes)
// Index: 648/906
__int64 __fastcall RstRaidMemberFirstActive(__int64 a1)
{
__int16 i; // dx
unsigned __int8 i_1; // al
int n23; // eax
__int64 result; // rax
for ( i = 0; ; ++i )
{
i_1 = *(_BYTE *)(a1 + 6) > 0x18u ? 24 : *(_BYTE *)(a1 + 6);
if ( i >= (int)i_1 ) /*0x1793e*/
break; /*0x1793e*/
n23 = 23; /*0x17940*/
if ( i < 24 ) /*0x17949*/
n23 = i; /*0x17949*/
result = *(_QWORD *)(*(_QWORD *)(a1 + 8LL * n23 + 48) + 40LL); /*0x17953*/
if ( result ) /*0x1795a*/
return result; /*0x1795a*/
}
return 0; /*0x17963*/
}
// Function: RstArrayGetNextEntry @ 0x17964 (0x21 bytes)
// Index: 649/906
__int64 __fastcall RstArrayGetNextEntry(__int64 a1)
{
__int16 v1; // dx
__int64 result; // rax
v1 = *(_WORD *)(a1 + 44); /*0x17964*/
if ( v1 >= *(unsigned __int8 *)(a1 + 6) ) /*0x1796f*/
return 0; /*0x17982*/
result = *(_QWORD *)(a1 + 8LL * v1 + 48); /*0x17978*/
*(_WORD *)(a1 + 44) = v1 + 1; /*0x1797d*/
return result; /*0x17981*/
}
// Function: Assert_45 @ 0x17988 (0xb7 bytes)
// Index: 650/906
char __fastcall Assert_45(__int64 a1)
{
__int64 v1; // rax
__int64 v2; // rbx
__int64 v3; // rcx
__int64 v4; // rdi
*(_WORD *)(a1 + 44) = 0; /*0x179a1*/
while ( 1 ) /*0x179a5*/
{
v1 = RstArrayGetNextEntry(); /*0x179a5*/
v2 = v1; /*0x179aa*/
if ( !v1 ) /*0x179b0*/
break; /*0x179b0*/
v3 = *(_QWORD *)(v1 + 48); /*0x179b2*/
if ( (*(_DWORD *)(v3 + 136) & 0x10) != 0 ) /*0x179c2*/
{
v4 = *(_QWORD *)(v1 + 40); /*0x179c4*/
if ( (unsigned __int8)RstDebugEnabled(v3, *(_DWORD *)(v3 + 136) >> 4) && !*(_DWORD *)(v4 + 280) ) /*0x179d2*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x179ed*/
if ( *(_DWORD *)(v4 + 280) == 4096 && *(_DWORD *)(*(_QWORD *)(v2 + 48) + 88LL) >= 0x20000000u /*0x17a1d*/
|| (*(_QWORD *)(*(_QWORD *)(v2 + 48) + 88LL) & 0xFFFFFFFF00000000uLL) != 0 )
{
return 1; /*0x17a26*/
}
}
}
return 0; /*0x17a39*/
}
// Function: RstDeviceListScanForType @ 0x17a40 (0x4f bytes)
// Index: 651/906
char __fastcall RstDeviceListScanForType(__int64 a1, unsigned int a2)
{
__int64 v3; // rbx
__int64 v4; // rax
v3 = a1; /*0x17a53*/
*(_WORD *)(a1 + 44) = 0; /*0x17a56*/
while ( 1 ) /*0x17a6f*/
{
v4 = RstArrayGetNextEntry(a1); /*0x17a6f*/
if ( !v4 ) /*0x17a77*/
return 0; /*0x17a79*/
if ( (unsigned __int8)RstHelper_02b4(*(_QWORD *)(v4 + 48), a2) ) /*0x17a62*/
break; /*0x17a62*/
a1 = v3; /*0x17a6c*/
}
return 1; /*0x17a85*/
}
// Function: RstHelper_7a90 @ 0x17a90 (0x58 bytes)
// Index: 652/906
__int64 RstHelper_7a90__int64 a1)
{
__int16 v1; // di
__int64 v2; // rbx
__int64 v3; // rax
__int64 v4; // r8
__int64 v5; // rcx
v1 = *(_WORD *)(a1 + 44); /*0x17a9a*/
v2 = a1; /*0x17aa1*/
*(_WORD *)(a1 + 44) = 0; /*0x17aa4*/
while ( 1 ) /*0x17aa9*/
{
v3 = RstArrayGetNextEntry(a1); /*0x17aa9*/
if ( v3 == v4 ) /*0x17ab1*/
break; /*0x17ab1*/
v5 = *(_QWORD *)(v3 + 48); /*0x17ab3*/
if ( v5 != v4 && (*(_DWORD *)(v5 + 136) & 0x10) != 0 ) /*0x17ac7*/
{
LODWORD(v4) = HiiLibReturnZero(v5); /*0x17ad3*/
break; /*0x17ad3*/
}
a1 = v2; /*0x17ac9*/
}
*(_WORD *)(v2 + 44) = v1; /*0x17ad6*/
return (unsigned int)v4; /*0x17ae2*/
}
// Function: Assert_99 @ 0x17ae8 (0x6d bytes)
// Index: 653/906
__int64 Assert_99__int64 a1, __int64 a2)
{
__int64 v2; // rdi
__int64 result; // rax
v2 = *(_QWORD *)(a2 + 8); /*0x17af7*/
RstMemRangeCoalesce(v2, a2, *(_QWORD *)(a1 + 8), *(_QWORD *)(a1 + 24)); /*0x17b09*/
*(_WORD *)(a1 + 44) = 0; /*0x17b10*/
while ( 1 ) /*0x17b3b*/
{
result = RstArrayGetNextEntry(a1); /*0x17b3b*/
if ( !result ) /*0x17b43*/
break; /*0x17b43*/
if ( (*(_DWORD *)(*(_QWORD *)(result + 48) + 136LL) & 2) == 0 || !*(_QWORD *)(result + 40) ) /*0x17b27*/
Assert_58(v2, result); /*0x17b33*/
}
return result; /*0x17b4f*/
}
// Function: RstBufferPoolRealloc @ 0x17b58 (0x52 bytes)
// Index: 654/906
__int64 __fastcall RstBufferPoolRealloc(__int64 a1, int a2)
{
__int64 v3; // rcx
__int16 n16; // cx
__int64 result; // rax
v3 = *(_QWORD *)a1; /*0x17b65*/
if ( v3 ) /*0x17b6d*/
RstBufferPoolLock(v3); /*0x17b6f*/
n16 = *(_WORD *)(a1 + 10); /*0x17b74*/
*(_BYTE *)(a1 + 8) = 0; /*0x17b7a*/
result = RstAllocTableAllocBySize(n16, a2); /*0x17b7e*/
*(_QWORD *)a1 = result; /*0x17b83*/
if ( result ) /*0x17b89*/
{
*(_BYTE *)(a1 + 8) = 1; /*0x17b8b*/
}
else
{
result = RstAllocTableFindBySize(*(_WORD *)(a1 + 10), a2); /*0x17b97*/
*(_QWORD *)a1 = result; /*0x17b9c*/
}
return result; /*0x17ba4*/
}
// Function: RstHelperInitAndLink @ 0x17bac (0xf bytes)
// Index: 655/906
CHAR16 *__fastcall RstHelperInitAndLink(CHAR16 *p_Destination, int a2, __int64 Destination)
{
*((_DWORD *)p_Destination + 13) = a2; /*0x17bac*/
*(_QWORD *)p_Destination = Destination; /*0x17baf*/
return RstHelper_955c((__int64)(p_Destination + 4));
}
// Function: Assert_111 @ 0x17bbc (0x33 bytes)
// Index: 656/906
bool __fastcall Assert_111(CHAR16 **p_Destination)
{
CHAR16 **v1; // rdi
int v2; // ebx
v1 = p_Destination + 1; /*0x17bc6*/
v2 = *((_DWORD *)p_Destination + 2); /*0x17bcd*/
return v2 == (unsigned int)Assert_46((CHAR16 *)p_Destination + 4) && StrnCpy16_w((__int64)v1); /*0x17be9*/
}
// Function: RstBufferAdvancePtr @ 0x17bf0 (0x5 bytes)
// Index: 657/906
CHAR16 **__fastcall RstBufferAdvancePtr(CHAR16 **p_Destination)
{
return p_Destination + 1; /*0x17bf4*/
}
// Function: RstDeviceGetContext88 @ 0x17bf8 (0x8 bytes)
// Index: 658/906
__int64 __fastcall RstDeviceGetContext88(__int64 a1)
{
return *(_QWORD *)(*(_QWORD *)a1 + 88LL); /*0x17bff*/
}
// Function: RstDeviceDerefPtr @ 0x17c00 (0x4 bytes)
// Index: 659/906
__int64 __fastcall RstDeviceDerefPtr(__int64 a1)
{
return *(_QWORD *)a1; /*0x17c03*/
}
// Function: Assert_54 @ 0x17c04 (0xa8 bytes)
// Index: 660/906
__int64 __fastcall Assert_54(CHAR16 **p_Destination, __int64 a2)
{
__int64 v3; // rdi
int v4; // ebx
__int64 v5; // rbx
__int64 v6; // rdi
__int64 v7; // rbx
if ( (unsigned __int8)RstDebugEnabled(p_Destination, a2) && !*p_Destination ) /*0x17c1f*/
DebugAssert("JdPplMpbMgr.cpp", 0xC3u, "jDisk"); /*0x17c38*/
v3 = *((_QWORD *)*p_Destination + 11); /*0x17c42*/
v4 = RstGetFieldSize(*p_Destination, 0); /*0x17c50*/
v5 = (unsigned int)RstHelper_1d9c(*p_Destination, 0) * v4; /*0x17c5a*/
v6 = (unsigned int)(*((_DWORD *)p_Destination + 13) + 1) * (v5 + 0x1000 / (unsigned int)HiiLibReturnZero(v3)); /*0x17c79*/
v7 = RstHelper_1dfc(*p_Destination) - v6; /*0x17c8b*/
return v7 - (unsigned int)RstHiiStringGetId(*p_Destination); /*0x17ca6*/
}
// Function: Assert_65 @ 0x17cac (0x65 bytes)
// Index: 661/906
__int64 __fastcall Assert_65(CHAR16 **p_Destination, __int64 a2)
{
unsigned int v3; // eax
if ( (unsigned __int8)RstDebugEnabled(p_Destination, a2) && !*p_Destination ) /*0x17cc2*/
DebugAssert("JdPplMpbMgr.cpp", 0xD2u, "jDisk"); /*0x17cdb*/
v3 = HiiLibReturnZero(*((_QWORD *)*p_Destination + 11)); /*0x17ce7*/
return 0x1000 / v3 + Assert_54(p_Destination, 0x1000 % v3); /*0x17d0b*/
}
// Function: Assert_62 @ 0x17d14 (0x7f bytes)
// Index: 662/906
unsigned __int64 __fastcall Assert_62(__int64 p_Destination)
{
int v2; // edi
__int64 v3; // rdx
__int64 v4; // rax
CHAR16 *Destination; // rcx
if ( RstDebugEnabled() && !*(_QWORD *)p_Destination ) /*0x17d2f*/
DebugAssert("JdPplMpbMgr.cpp", 0xDBu, "jDisk"); /*0x17d48*/
v2 = *(_DWORD *)(p_Destination + 52); /*0x17d50*/
*(_DWORD *)(p_Destination + 52) = RstGetFieldCount(*(_QWORD *)p_Destination, 0); /*0x17d5d*/
v4 = Assert_54((CHAR16 **)p_Destination, v3); /*0x17d60*/
Destination = *(CHAR16 **)p_Destination; /*0x17d65*/
*(_DWORD *)(p_Destination + 52) = v2; /*0x17d6b*/
return v4 - (unsigned int)(v2 + 1) * (unsigned __int64)(unsigned int)RstGetFieldBlockSize(Destination); /*0x17d8d*/
}
// Function: Assert_15 @ 0x17d94 (0x1c3 bytes)
// Index: 663/906
char __fastcall Assert_15(CHAR16 **p_Destination, int n23, int a3)
{
unsigned int v6; // esi
unsigned int v7; // ebx
__int64 v8; // rdx
__int64 v9; // r15
unsigned int v10; // r12d
unsigned int v11; // eax
char v12; // bl
unsigned int v13; // r13d
_BYTE *i_1; // rdi
unsigned int v15; // eax
int v16; // eax
unsigned int v18; // esi
__int64 Source; // rax
unsigned int v20; // ebp
_BYTE *i; // [rsp+30h] [rbp-38h] BYREF
char v22; // [rsp+38h] [rbp-30h]
__int16 n16; // [rsp+3Ah] [rbp-2Eh]
v6 = HiiLibReturnZero(*((_QWORD *)*p_Destination + 11)); /*0x17dc9*/
v7 = RstHelper_1d9c(*p_Destination, 1); /*0x17dd3*/
v9 = Assert_65(p_Destination, v8) + n23 * v7; /*0x17de8*/
v10 = 0x1000 / v6; /*0x17df4*/
v11 = v7; /*0x17df7*/
v12 = 0; /*0x17df9*/
i = 0; /*0x17e00*/
v13 = v11 / (0x1000 / v6); /*0x17e05*/
v22 = 0; /*0x17e0b*/
n16 = 16; /*0x17e0f*/
RstBufferPoolRealloc((__int64)&i, 0); /*0x17e14*/
i_1 = i; /*0x17e19*/
if ( RstDebugEnabled() ) /*0x17e1e*/
{
if ( !i_1 ) /*0x17e2a*/
DebugAssert("JdPplMpbMgr.cpp", 0x46u, "pplHdr"); /*0x17e3d*/
}
MemZero(i_1, 0, 4096); /*0x17e4f*/
MemZero(i_1, 255, 512); /*0x17e62*/
*((_DWORD *)i_1 + 128) = a3; /*0x17e67*/
v15 = RstReturnAllOnes(); /*0x17e6d*/
v16 = RstCrc32(v15, (unsigned int *)i_1, 4096); /*0x17e7a*/
*((_DWORD *)i_1 + 133) = RstBitwiseNot(v16); /*0x17e8c*/
Assert_89(Source_16, *((_QWORD *)*p_Destination + 11), 42, v9, 4096, (unsigned int)i_1); /*0x17ea8*/
if ( *(_WORD *)(Source_16 + 2720) ) /*0x17eb4*/
{
RstBufferPoolLock((__int64)i); /*0x17ec3*/
return 0; /*0x17ec8*/
}
else
{
MemZero(i_1, 0, 4096); /*0x17ed4*/
v18 = 1; /*0x17ed9*/
if ( v13 <= 1 ) /*0x17ee1*/
{
LABEL_10:
v12 = 1; /*0x17f2b*/
}
else
{
Source = Source_16; /*0x17ee3*/
v20 = v10; /*0x17eea*/
while ( 1 ) /*0x17f0c*/
{
Assert_89(Source, *((_QWORD *)*p_Destination + 11), 42, v9 + v20, 4096, (unsigned int)i_1); /*0x17f0c*/
Source = Source_16; /*0x17f11*/
if ( *(_WORD *)(Source_16 + 2720) ) /*0x17f18*/
break; /*0x17f18*/
++v18; /*0x17f21*/
v20 += v10; /*0x17f23*/
if ( v18 >= v13 ) /*0x17f29*/
goto LABEL_10; /*0x17f29*/
}
}
RstBufferPoolLock((__int64)i); /*0x17f32*/
return v12; /*0x17f37*/
}
}
// Function: Assert_40 @ 0x17f58 (0xfb bytes)
// Index: 664/906
char __fastcall Assert_40(CHAR16 *p_Destination)
{
char v2; // di
char v3; // al
CHAR16 *Destination_1; // rsi
__int64 v5; // rbx
__int64 v6; // rdx
__int64 v7; // rax
CHAR16 *Destination; // [rsp+30h] [rbp-18h] BYREF
char v10; // [rsp+38h] [rbp-10h]
__int16 n16; // [rsp+3Ah] [rbp-Eh]
Assert_46(p_Destination + 4); /*0x17f73*/
v2 = 0; /*0x17f78*/
Destination = 0; /*0x17f84*/
n16 = 16; /*0x17f89*/
v10 = 0; /*0x17f8e*/
RstBufferPoolRealloc((__int64)&Destination, 0); /*0x17f93*/
v3 = RstDebugEnabled(); /*0x17f98*/
Destination_1 = Destination; /*0x17f9d*/
if ( v3 && !Destination ) /*0x17faa*/
{
DebugAssert("JdPplMpbMgr.cpp", 0x80u, "framebuf.ptr()"); /*0x17fbf*/
Destination_1 = Destination; /*0x17fc4*/
}
StrnCpy(Destination_1, p_Destination + 4, 0x2Au); /*0x17fd6*/
MemZero((_BYTE *)Destination_1 + 42, 0, 4054); /*0x17fe7*/
v5 = *(_QWORD *)(*(_QWORD *)p_Destination + 88LL); /*0x17ff3*/
v7 = Assert_54((CHAR16 **)p_Destination, v6); /*0x17ff7*/
Assert_89(Source_16, v5, 42, v7, 4096, (unsigned int)Destination_1); /*0x18018*/
if ( !*(_WORD *)(Source_16 + 2720) ) /*0x18024*/
v2 = 1; /*0x1802e*/
RstBufferPoolLock((__int64)Destination); /*0x18036*/
return v2; /*0x1804d*/
}
// Function: Assert_43 @ 0x18054 (0xdf bytes)
// Index: 665/906
char __fastcall Assert_43(CHAR16 *p_Destination)
{
char v1; // di
__int64 v3; // rdx
CHAR16 *Source_1; // rbp
__int64 v5; // rbx
__int64 v6; // rax
CHAR16 *Source; // [rsp+30h] [rbp-18h] BYREF
char v9; // [rsp+38h] [rbp-10h]
__int16 n16; // [rsp+3Ah] [rbp-Eh]
v1 = 0; /*0x18068*/
Source = 0; /*0x18072*/
v9 = 0; /*0x18076*/
n16 = 16; /*0x1807f*/
RstBufferPoolRealloc((__int64)&Source, 0); /*0x18084*/
if ( RstDebugEnabled() && !Source ) /*0x18098*/
DebugAssert("JdPplMpbMgr.cpp", 0x93u, "framebuf.ptr()"); /*0x180ad*/
Source_1 = Source; /*0x180b5*/
v5 = *(_QWORD *)(*(_QWORD *)p_Destination + 88LL); /*0x180bd*/
v6 = Assert_54((CHAR16 **)p_Destination, v3); /*0x180c1*/
Assert_89(Source_16, v5, 40, v6, 4096, (unsigned int)Source); /*0x180e6*/
if ( !*(_WORD *)(Source_16 + 2720) ) /*0x180f2*/
{
StrnCpy(p_Destination + 4, Source_1, 0x2Au); /*0x18109*/
v1 = 1; /*0x1810e*/
}
RstBufferPoolLock((__int64)Source); /*0x18116*/
return v1; /*0x1812d*/
}
// Function: Assert_64 @ 0x18134 (0x6c bytes)
// Index: 666/906
char __fastcall Assert_64(__int64 p_Destination)
{
unsigned int v2; // ebx
v2 = 0; /*0x18146*/
if ( RstDebugEnabled() && !*(_QWORD *)p_Destination ) /*0x1814c*/
DebugAssert("JdPplMpbMgr.cpp", 0x2Eu, "jDisk"); /*0x18162*/
if ( (unsigned int)RstGetFieldSize(*(CHAR16 **)p_Destination, 1) ) /*0x1816c*/
{
do /*0x18191*/
Assert_15((CHAR16 **)p_Destination, v2++, *(_DWORD *)(p_Destination + 44)); /*0x1817e*/
while ( v2 < (unsigned int)RstGetFieldSize(*(CHAR16 **)p_Destination, 1) ); /*0x18191*/
}
return 1; /*0x1819a*/
}
// Function: RstBufferEntryInit @ 0x181a0 (0x19 bytes)
// Index: 667/906
__int64 __fastcall RstBufferEntryInit(__int64 a1)
{
*(_WORD *)(a1 + 2) = 0; /*0x181a2*/
*(_WORD *)(a1 + 4) = 0; /*0x181a6*/
*(_WORD *)(a1 + 8) = 0; /*0x181aa*/
*(_BYTE *)(a1 + 10) = 0; /*0x181b1*/
*(_WORD *)(a1 + 6) = 1; /*0x181b4*/
return 1; /*0x181b8*/
}
// Function: RstBufferEntryInitPtr @ 0x181bc (0x1c bytes)
// Index: 668/906
__int64 __fastcall RstBufferEntryInitPtr(__int64 a1)
{
*(_WORD *)(a1 + 2) = 0; /*0x181be*/
*(_WORD *)(a1 + 4) = 0; /*0x181c2*/
*(_WORD *)(a1 + 8) = 0; /*0x181c6*/
*(_BYTE *)(a1 + 10) = 0; /*0x181cd*/
*(_WORD *)(a1 + 6) = 1; /*0x181d0*/
return a1; /*0x181d7*/
}
// Function: RstBufferMetaZero @ 0x181d8 (0x2e bytes)
// Index: 669/906
_BYTE *__fastcall RstBufferMetaZero(__int64 a1)
{
_BYTE *i; // rcx
i = (_BYTE *)(a1 + 80); /*0x181da*/
*((_DWORD *)i - 12) = 0; /*0x181e0*/
*((_DWORD *)i - 11) = 0; /*0x181e3*/
*(i - 24) = 0; /*0x181e6*/
*(i - 23) = 0; /*0x181e9*/
*((_DWORD *)i - 10) = 0; /*0x181ec*/
*((_DWORD *)i - 4) = 0; /*0x181ef*/
*((_DWORD *)i - 9) = 0; /*0x181f2*/
*(i - 22) = 0; /*0x181f5*/
*((_DWORD *)i - 2) = 0; /*0x181f8*/
return MemZero(i, 0, 136);
}
// Function: RstBufferChecksum @ 0x18208 (0x29 bytes)
// Index: 670/906
__int64 __fastcall RstBufferChecksum(_DWORD *a1)
{
__int64 result; // rax
bool v2; // zf
_DWORD *v3; // r8
unsigned __int64 v4; // rdx
result = 0; /*0x18208*/
v2 = (a1[9] & 0xFFFFFFFC) == 0; /*0x1820a*/
v3 = a1 + 8; /*0x18211*/
a1[8] = 0; /*0x18215*/
if ( !v2 ) /*0x18218*/
{
v4 = (unsigned __int64)(unsigned int)a1[9] >> 2; /*0x1821d*/
do /*0x1822b*/
{
result = (unsigned int)(*a1++ + result); /*0x18221*/
--v4; /*0x18227*/
}
while ( v4 ); /*0x1822b*/
}
*v3 = result; /*0x1822d*/
return result; /*0x18230*/
}
// Function: RstDevicePathFindName @ 0x18234 (0x97 bytes)
// Index: 671/906
_BYTE *__fastcall RstDevicePathFindName(__int64 a1, _BYTE *a2)
{
unsigned __int16 v4; // bp
_BYTE *v5; // rbx
if ( !a2 ) /*0x18259*/
return 0; /*0x18259*/
v4 = 0; /*0x1825f*/
v5 = (_BYTE *)(a1 + 48LL * *(unsigned __int8 *)(a1 + 56) + 216); /*0x1826a*/
if ( !*(_BYTE *)(a1 + 57) ) /*0x18272*/
return 0; /*0x182a9*/
while ( StrnCpy16(a2, v5, 16) ) /*0x1828d*/
{
++v4; /*0x1829e*/
v5 = (_BYTE *)RstConfigBlockGetDataOffset(v5 + 80, 0); /*0x182a1*/
if ( v4 >= *(unsigned __int8 *)(a1 + 57) ) /*0x182a7*/
return 0; /*0x182a7*/
}
return v5; /*0x182bf*/
}
// Function: RstRaidSuperblockFind @ 0x182cc (0x63 bytes)
// Index: 672/906
_DWORD *__fastcall RstRaidSuperblockFind(__int64 a1)
{
__int64 v1; // rbx
__int16 v3; // si
_DWORD *v4; // rax
v1 = 0; /*0x182df*/
v3 = 0; /*0x182e8*/
v4 = (_DWORD *)(a1 + 48LL * *(unsigned __int8 *)(a1 + 56) + 216); /*0x182ee*/
if ( *(_BYTE *)(a1 + 57) ) /*0x182f6*/
{
do /*0x18310*/
{
v4 = (_DWORD *)RstConfigBlockGetDataOffset(v4 + 20, 0); /*0x18301*/
++v3; /*0x1830a*/
}
while ( v3 < *(unsigned __int8 *)(a1 + 57) ); /*0x18310*/
}
if ( *v4 == -1414680308 ) /*0x1831d*/
return v4; /*0x1831d*/
return (_DWORD *)v1; /*0x18329*/
}
// Function: RstDeviceValidatePath @ 0x18330 (0x15d bytes)
// Index: 673/906
char __fastcall RstDeviceValidatePath(__int64 a1)
{
char v2; // bl
unsigned __int16 v3; // si
char *v4; // rbp
__int64 v5; // r9
int v6; // edx
__int64 v7; // rcx
v2 = 0; /*0x1834e*/
v3 = 0; /*0x1835e*/
v4 = (char *)RstGetGlobalContext(); /*0x18369*/
v5 = a1 + 48LL * *(unsigned __int8 *)(a1 + 56) + 216; /*0x1836c*/
if ( !*(_BYTE *)(a1 + 57) ) /*0x18374*/
return 1; /*0x1846d*/
while ( 1 ) /*0x1837e*/
{
v6 = *(_DWORD *)(v4 + 26); /*0x1837e*/
v7 = v5 + 80; /*0x18381*/
if ( (v6 & 1) == 0 ) /*0x18388*/
{
if ( *(_BYTE *)(v5 + 127) ) /*0x1838a*/
{
if ( *(_BYTE *)(v5 + 88) == 1 /*0x183b2*/
&& !*(_BYTE *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 95)
&& *(_BYTE *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 96) > 1u )
{
v2 = 1; /*0x183b2*/
}
}
else
{
v2 = 1; /*0x18390*/
}
}
if ( (v6 & 4) == 0 && *(_BYTE *)(v5 + 127) == 1 && *(_BYTE *)(v5 + 128) > 3u ) /*0x183c8*/
v2 = 1; /*0x183c8*/
if ( (v6 & 2) == 0 /*0x18407*/
&& (*(_BYTE *)(v5 + 127) == 1 && *(_BYTE *)(v5 + 128) < 4u && !_bittest((const signed __int32 *)(v5 + 24), 0xAu)
|| *(_BYTE *)(v5 + 88) == 1
&& *(_BYTE *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 95) == 1
&& *(_BYTE *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 96) < 4u
&& !_bittest((const signed __int32 *)(v5 + 24), 0xAu)) )
{
v2 = 1; /*0x18409*/
}
if ( (v6 & 0x10) == 0 /*0x18426*/
&& (*(_BYTE *)(v5 + 127) == 5
|| *(_BYTE *)(v5 + 88) == 1 && *(_BYTE *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 95) == 5) )
{
v2 = 1; /*0x18428*/
}
if ( *(unsigned __int8 *)(v5 + 128) > (unsigned int)*((_WORD *)v4 + 10) /*0x18448*/
|| *(_BYTE *)(v5 + 88) == 1
&& *(unsigned __int8 *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 96) > (unsigned int)*((_WORD *)v4 + 10) )
{
v2 = 1; /*0x1844a*/
}
if ( v2 ) /*0x18450*/
break; /*0x18450*/
++v3; /*0x1845d*/
v5 = RstConfigBlockGetDataOffset(v7, 0); /*0x18461*/
if ( v3 >= *(unsigned __int8 *)(a1 + 57) ) /*0x18467*/
return 1; /*0x18467*/
}
return 0; /*0x1847f*/
}
// Function: RstHelper_8490 @ 0x18490 (0x41 bytes)
// Index: 674/906
bool RstHelper_8490_BYTE *a1)
{
__int16 v2; // ax
v2 = StrLenA("Intel Raid ISM Cfg Sig. "); /*0x184a0*/
return !byte_574D4 && StrnCpy16("Intel Raid ISM Cfg Sig. ", a1, v2) == 0; /*0x184ae*/
}
// Function: RstHelper_84d4 @ 0x184d4 (0x44 bytes)
// Index: 675/906
bool __fastcall RstHelper_84d4(__int64 a1)
{
__int16 n31; // ax
n31 = StrLenA("Intel Raid ISM Cfg Sig. "); /*0x184e4*/
return n31 <= 31 && StrnCpy16("2.0.00", (_BYTE *)(a1 + n31), 0xFFFF) == 0; /*0x18512*/
}
// Function: RstHelper_8518 @ 0x18518 (0x15b bytes)
// Index: 676/906
bool __fastcall RstHelper_8518(__int64 a1)
{
__int16 n31; // ax
_BYTE *v4; // rdi
void *v5; // rsi
n31 = StrLenA("Intel Raid ISM Cfg Sig. "); /*0x18536*/
if ( n31 > 31 ) /*0x1853f*/
return 0; /*0x1853f*/
v4 = (_BYTE *)(a1 + n31); /*0x1854c*/
v5 = RstGetGlobalContext(); /*0x18557*/
if ( !RstHelper_8490((_BYTE *)a1) ) /*0x1855a*/
return 0; /*0x18541*/
if ( !StrnCpy16("1.0.00", v4, 0xFFFF) /*0x1862b*/
|| !StrnCpy16("1.0.00", v4, 0xFFFF) && *(_BYTE *)(a1 + 56) == 1 && !*(_BYTE *)(a1 + 57)
|| !StrnCpy16("1.1.00", v4, 0xFFFF)
|| !StrnCpy16("1.2.00", v4, 0xFFFF)
|| !StrnCpy16("1.2.02", v4, 0xFFFF)
|| !StrnCpy16("1.2.04", v4, 0xFFFF) && *((_WORD *)v5 + 10) > 4u
|| !StrnCpy16("1.2.01", v4, 0xFFFF) && *((_WORD *)v5 + 10) > 2u )
{
return 1; /*0x1857f*/
}
if ( StrnCpy16("1.3.00", v4, 0xFFFF) ) /*0x1863e*/
return RstHelper_84d4(a1); /*0x18659*/
return (*(_DWORD *)(a1 + 52) & *(_DWORD *)((_BYTE *)v5 + 26)) == *(_DWORD *)(a1 + 52); /*0x1866d*/
}
// Function: RstBufferReset @ 0x18674 (0x17 bytes)
// Index: 677/906
__int64 __fastcall RstBufferReset(__int64 a1)
{
*(_DWORD *)(a1 + 24) = 0; /*0x18676*/
*(_DWORD *)(a1 + 28) = 0; /*0x18679*/
*(_DWORD *)(a1 + 48) = 0; /*0x1867c*/
*(_WORD *)(a1 + 32) = 0; /*0x1867f*/
*(_DWORD *)(a1 + 36) = 0; /*0x18683*/
*(_QWORD *)(a1 + 40) = 0; /*0x18686*/
return 0; /*0x1868a*/
}
// Function: RstArrayStateCopy @ 0x1868c (0x5c bytes)
// Index: 678/906
__int64 __fastcall RstArrayStateCopy(__int64 a1, __int64 Source, __int64 a3)
{
__int64 result; // rax
CHAR16 *Destination; // rcx
unsigned int Length; // eax
*(_DWORD *)(a1 + 24) = *(_DWORD *)(Source + 40); /*0x18698*/
*(_DWORD *)(a1 + 28) = *(_DWORD *)(Source + 64); /*0x1869e*/
*(_DWORD *)(a1 + 48) = *(_DWORD *)(Source + 44); /*0x186a4*/
*(_WORD *)(a1 + 32) = *(_WORD *)(Source + 76); /*0x186ab*/
result = *(unsigned int *)(Source + 72); /*0x186af*/
*(_QWORD *)(a1 + 40) = a3; /*0x186b2*/
*(_DWORD *)(a1 + 36) = result; /*0x186b6*/
Destination = *(CHAR16 **)(a1 + 8); /*0x186b9*/
if ( Destination != (CHAR16 *)Source ) /*0x186c0*/
{
Length = *(_DWORD *)(a1 + 20); /*0x186c2*/
if ( *(_DWORD *)(Source + 36) < Length ) /*0x186c8*/
Length = *(_DWORD *)(Source + 36); /*0x186c8*/
*(_DWORD *)(a1 + 16) = Length; /*0x186cf*/
StrnCpy(Destination, (const CHAR16 *)Source, Length); /*0x186d2*/
result = *(unsigned int *)(a1 + 16); /*0x186db*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 36LL) = result; /*0x186de*/
}
return result; /*0x186e2*/
}
// Function: RstHelper_86e8 @ 0x186e8 (0x148 bytes)
// Index: 679/906
char __fastcall RstHelper_86e8(__int64 a1, __int64 a2)
{
char Source; // al
unsigned int v5; // r13d
__int64 v6; // r11
unsigned int v7; // eax
unsigned int v8; // ebx
unsigned int v9; // esi
__int64 v10; // rax
int n12747655; // edx
Source = Source_16; /*0x18700*/
if ( !*(_WORD *)(Source_16 + 2720) )
{
if ( !RstHelper_8518(*(_QWORD *)(a1 + 8)) || *(_DWORD *)(*(_QWORD *)(a1 + 8) + 36LL) > 0x2000u )
{
if ( !RstHelper_8490(*(_BYTE **)(a1 + 8)) ) /*0x18801*/
{
n12747655 = 12747655; /*0x1880a*/
return RstDeviceClearFlags(a2, n12747655); /*0x1880a*/
}
LABEL_8:
RstDeviceSetFlags(a2, 0x10100u); /*0x187d3*/
n12747655 = RstHelper_84d4(*(_QWORD *)(a1 + 8)) ? 46269063 : 12714631;
return RstDeviceClearFlags(a2, n12747655); /*0x18812*/
}
v5 = HiiLibReturnZero(a2); /*0x1874e*/
RstDeviceSetFlags(a2, 0x100u); /*0x18751*/
v6 = *(_QWORD *)(a1 + 8); /*0x18756*/
v7 = *(_DWORD *)(v6 + 36); /*0x1875b*/
if ( v7 > v5 ) /*0x18762*/
{
v8 = v5 + v6; /*0x18771*/
v9 = (v7 + v5 - 1) / v5 - 1; /*0x18776*/
v10 = RstCountDecrementBy2(a2); /*0x1877f*/
Assert_89(Source_16, a2, 40, v10 - v9, v5 * v9, v8); /*0x187a1*/
if ( *(_WORD *)(Source_16 + 2720) ) /*0x187ad*/
RstDeviceClearFlags(a2, 256); /*0x187c0*/
}
Source = RstDeviceValidatePath(*(_QWORD *)(a1 + 8)); /*0x187ca*/
if ( !Source ) /*0x187d1*/
goto LABEL_8; /*0x187d1*/
}
return Source; /*0x18826*/
}
// Function: RstHelper_8830 @ 0x18830 (0x6a bytes)
// Index: 680/906
__int64 __fastcall RstHelper_8830(__int64 a1)
{
__int64 n80; // rcx
__int64 n34; // rdx
__int64 result; // rax
RstStrCopy(*(_BYTE **)(a1 + 8), "Intel Raid ISM Cfg Sig. "); /*0x18844*/
RstStrCopy((_BYTE *)(*(_QWORD *)(a1 + 8) + 24LL), "1.0.00"); /*0x18858*/
*(_BYTE *)(*(_QWORD *)(a1 + 8) + 56LL) = 0; /*0x18864*/
n80 = 80; /*0x1886c*/
*(_BYTE *)(*(_QWORD *)(a1 + 8) + 57LL) = 0; /*0x18870*/
n34 = 34; /*0x18878*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) = 0x80000000; /*0x1887b*/
do /*0x18892*/
{
result = *(_QWORD *)(a1 + 8); /*0x18882*/
*(_DWORD *)(n80 + result) = 0; /*0x18886*/
n80 += 4; /*0x1888a*/
--n34; /*0x1888e*/
}
while ( n34 ); /*0x18892*/
return result; /*0x18894*/
}
// Function: Assert_135 @ 0x1889c (0x46 bytes)
// Index: 681/906
__int64 Assert_135__int64 a1, __int64 a2)
{
int v4; // eax
v4 = RstCountDecrementBy2(a2, a2); /*0x188af*/
return Assert_89(Source_16, a2, 42, v4, *(_DWORD *)(a1 + 16), *(_DWORD *)(a1 + 8)); /*0x188dc*/
}
// Function: RstProgressUpdate @ 0x188e4 (0x91 bytes)
// Index: 682/906
__int64 __fastcall RstProgressUpdate(__int64 a1)
{
__int64 v1; // rdx
int v2; // eax
__int64 result; // rax
__int64 v5; // rax
__int64 v6; // rbx
int v7; // edx
__int64 v8; // rcx
v1 = *(_QWORD *)(a1 + 8); /*0x188ee*/
v2 = *(_DWORD *)(a1 + 24); /*0x188f2*/
++*(_DWORD *)(a1 + 48); /*0x188f5*/
*(_DWORD *)(v1 + 40) = v2; /*0x188f8*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 64LL) = *(_DWORD *)(a1 + 28); /*0x18902*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 44LL) = *(_DWORD *)(a1 + 48); /*0x1890c*/
*(_WORD *)(*(_QWORD *)(a1 + 8) + 76LL) = *(_WORD *)(a1 + 32); /*0x1891a*/
result = RstBufferChecksum(*(_QWORD *)(a1 + 8)); /*0x18922*/
if ( !*(_DWORD *)(a1 + 24) ) /*0x1892a*/
{
v5 = *(_QWORD *)(a1 + 8); /*0x18930*/
*(_DWORD *)(a1 + 48) = 0; /*0x18934*/
*(_DWORD *)(v5 + 44) = 0; /*0x18938*/
v6 = *(_QWORD *)(a1 + 8); /*0x1893c*/
v7 = RstGetUefiTime() + *(_DWORD *)(v6 + 32); /*0x18948*/
*(_DWORD *)(a1 + 24) = v7; /*0x1894b*/
*(_DWORD *)(v6 + 40) = v7; /*0x1894e*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 64LL) = *(_DWORD *)(a1 + 24); /*0x18958*/
v8 = *(_QWORD *)(a1 + 8); /*0x1895e*/
*(_DWORD *)(a1 + 28) = *(_DWORD *)(a1 + 24); /*0x18962*/
return RstBufferChecksum(v8); /*0x18965*/
}
return result; /*0x1896f*/
}
// Function: RstBufferInit @ 0x18978 (0x2a bytes)
// Index: 683/906
__int64 __fastcall RstBufferInit(__int64 a1, __int16 n4096)
{
*(_QWORD *)a1 = off_23F20; /*0x1897f*/
*(_DWORD *)(a1 + 20) = n4096; /*0x18985*/
*(_DWORD *)(a1 + 24) = 0; /*0x1898a*/
*(_DWORD *)(a1 + 28) = 0; /*0x1898d*/
*(_DWORD *)(a1 + 48) = 0; /*0x18990*/
*(_WORD *)(a1 + 32) = 0; /*0x18993*/
*(_DWORD *)(a1 + 36) = 0; /*0x18997*/
*(_QWORD *)(a1 + 40) = 0; /*0x1899a*/
return a1; /*0x189a1*/
}
// Function: RstHelper_89a4 @ 0x189a4 (0x63 bytes)
// Index: 684/906
char RstHelper_89a4__int64 a1, __int64 a2)
{
int v4; // ebx
__int64 v5; // rdx
int v6; // eax
v4 = HiiLibReturnZero(a2); /*0x189c4*/
v6 = RstCountDecrementBy2(a2, v5); /*0x189c6*/
Assert_89(Source_16, a2, 40, v6, v4, *(_DWORD *)(a1 + 8)); /*0x189e8*/
return RstHelper_86e8(a1, a2); /*0x189fd*/
}
// Function: Assert_134 @ 0x18a08 (0x4d bytes)
// Index: 685/906
__int64 Assert_134__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
int v5; // edx
char v6; // al
Assert_112(a1, a2, a3, a4); /*0x18a11*/
v5 = *(unsigned __int8 *)(a1 + 42); /*0x18a16*/
*(_DWORD *)(a1 + 96) = 1; /*0x18a26*/
*(_WORD *)(a1 + 40) = 5; /*0x18a2d*/
v6 = *(_BYTE *)(a1 + 43); /*0x18a31*/
*(_QWORD *)a1 = off_23FE8; /*0x18a34*/
*(_BYTE *)(a1 + 93) = v6; /*0x18a37*/
*(_DWORD *)(a1 + 84) *= v5; /*0x18a40*/
*(_DWORD *)(a1 + 88) *= v5; /*0x18a49*/
return a1; /*0x18a4f*/
}
// Function: RstBufferXor @ 0x18a58 (0x23 bytes)
// Index: 686/906
__int64 __fastcall RstBufferXor(unsigned int a1, _BYTE *i, __int64 ia, _BYTE *a4)
{
unsigned int v4; // ecx
__int64 v5; // rdx
__int64 v6; // r8
__int64 result; // rax
v4 = a1 >> 2; /*0x18a58*/
if ( v4 ) /*0x18a5d*/
{
v5 = i - a4; /*0x18a5f*/
v6 = ia - (_QWORD)a4; /*0x18a62*/
do /*0x18a77*/
{
result = (unsigned int)(*(_DWORD *)&a4[v5] ^ *(_DWORD *)&a4[v6]); /*0x18a69*/
*(_DWORD *)a4 = result; /*0x18a6d*/
a4 += 4; /*0x18a70*/
--v4; /*0x18a74*/
}
while ( v4 ); /*0x18a77*/
}
return result; /*0x18a79*/
}
// Function: RstXorBufferTransform @ 0x18a7c (0x2f bytes)
// Index: 687/906
__int64 __fastcall RstXorBufferTransform(unsigned int a1, __int64 a2, _DWORD *a3, __int64 a4, __int64 a5)
{
unsigned int v5; // ecx
__int64 v6; // rdx
__int64 v7; // r10
__int64 v8; // r9
__int64 result; // rax
v5 = a1 >> 2; /*0x18a7c*/
if ( v5 ) /*0x18a81*/
{
v6 = a2 - (_QWORD)a3; /*0x18a88*/
v7 = a5 - (_QWORD)a3; /*0x18a8b*/
v8 = a4 - (_QWORD)a3; /*0x18a8e*/
do /*0x18aa7*/
{
result = *a3 ^ (unsigned int)(*(_DWORD *)((char *)a3 + v6) ^ *(_DWORD *)((char *)a3 + v8)); /*0x18a99*/
*(_DWORD *)((char *)a3++ + v7) = result; /*0x18a9c*/
--v5; /*0x18aa4*/
}
while ( v5 ); /*0x18aa7*/
}
return result; /*0x18aa9*/
}
// Function: RstRaidStripeMapLogical @ 0x18aac (0x89 bytes)
// Index: 688/906
unsigned __int64 __fastcall RstRaidStripeMapLogical(__int64 a1, unsigned __int64 a2, _BYTE *a3, _QWORD *a4)
{
__int16 v5; // cx
unsigned __int64 v7; // r10
__int16 v8; // r8
unsigned __int64 result; // rax
unsigned __int64 v10; // rdx
v5 = *(_WORD *)(a1 + 74); /*0x18ac6*/
v7 = (a2 >> v5) / *(unsigned __int8 *)(a1 + 43); /*0x18ae0*/
*a4 = (v7 << v5) + (a2 & *(_WORD *)(a1 + 76)); /*0x18af7*/
v8 = *(unsigned __int8 *)(a1 + 43) - v7 % *(unsigned __int8 *)(a1 + 42); /*0x18b0d*/
result = (a2 >> v5) / *(unsigned __int8 *)(a1 + 43); /*0x18b13*/
v10 = (a2 >> v5) % *(unsigned __int8 *)(a1 + 43); /*0x18b13*/
*a3 = v10; /*0x18b19*/
if ( v8 <= (unsigned __int8)v10 ) /*0x18b1f*/
*a3 = v10 + 1; /*0x18b23*/
return result; /*0x18b34*/
}
// Function: RstRaidStripeMapPhysical @ 0x18b38 (0x63 bytes)
// Index: 689/906
unsigned __int64 __fastcall RstRaidStripeMapPhysical(__int64 a1, unsigned __int64 a2, _BYTE *a3, _QWORD *a4)
{
unsigned __int64 v5; // r9
unsigned __int64 v7; // rtt
v5 = *(unsigned __int8 *)(a1 + 42); /*0x18b60*/
v7 = (a2 >> *(_BYTE *)(a1 + 74)) / *(unsigned __int8 *)(a1 + 43); /*0x18b74*/
*a3 = *(_BYTE *)(a1 + 43) - v7 % v5; /*0x18b7a*/
*a4 = (v7 << *(_BYTE *)(a1 + 74)) + (a2 & *(_WORD *)(a1 + 76)); /*0x18b92*/
return v7 / v5; /*0x18b9a*/
}
// Function: RstRaidCountActiveMembers @ 0x18b9c (0x8e bytes)
// Index: 690/906
void __fastcall RstRaidCountActiveMembers(__int64 a1)
{
__int16 v2; // di
unsigned __int16 i; // si
v2 = 0; /*0x18bb7*/
for ( i = 0; i < *(unsigned __int8 *)(a1 + 42); ++i ) /*0x18bbf*/
{
if ( *(_BYTE *)(a1 + 16 * (i + 7LL) + 8) || RstDeviceCheckOnline(*(_QWORD *)(a1 + 16 * (i + 7LL))) ) /*0x18bda*/
++v2; /*0x18be4*/
}
if ( *(_DWORD *)(a1 + 8) != 3 ) /*0x18bf7*/
{
if ( v2 == 1 ) /*0x18bfd*/
{
*(_DWORD *)(a1 + 8) = 2; /*0x18bff*/
}
else if ( v2 > 1 ) /*0x18c08*/
{
RstRaidMemberMarkRemoving(a1, 0xFFu); /*0x18c0f*/
}
}
}
// Function: RstRaidStateTransition @ 0x18c2c (0x65 bytes)
// Index: 691/906
char __fastcall RstRaidStateTransition(__int64 a1, __int64 a2)
{
int n3; // eax
n3 = *(_DWORD *)(a1 + 8); /*0x18c32*/
if ( n3 >= 0 ) /*0x18c3a*/
{
if ( n3 <= 2 ) /*0x18c3f*/
{
RstHelper_54e8(a1, a2); /*0x18c50*/
Assert_120(a2 + 96, 40, 0, *(_QWORD *)(a2 + 704), *(_DWORD *)(a2 + 712), *(_DWORD *)(a2 + 716), 255); /*0x18c7e*/
LOBYTE(n3) = Assert_127(a2); /*0x18c86*/
}
else if ( n3 == 3 ) /*0x18c44*/
{
LOBYTE(n3) = RstRaidOpSetRetryState(a2); /*0x18c49*/
}
}
return n3; /*0x18c8b*/
}
// Function: Assert_78 @ 0x18c94 (0x121 bytes)
// Index: 692/906
__int64 __fastcall Assert_78(__int64 a1, __int64 a2)
{
unsigned __int64 v2; // rbx
unsigned __int64 v5; // rbp
int v6; // eax
unsigned int n0x2000; // edx
unsigned int n0x2000_1; // eax
int v9; // eax
int v10; // eax
__int64 result; // rax
__int64 Source; // rbx
__int64 v13; // rcx
unsigned __int64 v14; // rbx
unsigned __int64 v15; // rax
v2 = *(_QWORD *)(a2 + 704); /*0x18ca8*/
v5 = *(_DWORD *)(a2 + 712) / (unsigned int)RstHelper_525c(a1) + v2 - 1; /*0x18cce*/
LODWORD(v2) = RstRaidMapTranslateAddress((unsigned __int16 *)a1, v2); /*0x18cdb*/
v6 = RstHelper_525c(a1); /*0x18cdd*/
n0x2000 = 0x2000; /*0x18ce2*/
n0x2000_1 = *(_DWORD *)(a1 + 44) - v6 * v2; /*0x18ced*/
if ( n0x2000_1 < 0x2000 ) /*0x18cf1*/
n0x2000 = n0x2000_1; /*0x18cf1*/
if ( *(_DWORD *)(a2 + 712) > n0x2000 ) /*0x18cfa*/
RstTransferBlockSizeInit(a2, n0x2000); /*0x18cff*/
RstArrayIoAdvance((_DWORD *)a2); /*0x18d07*/
v9 = *(_DWORD *)(a1 + 8); /*0x18d0c*/
if ( !v9 ) /*0x18d11*/
{
if ( !RstCfgRaidDevCheckFlagBit4(*(_QWORD *)(a1 + 24)) ) /*0x18d64*/
{
v14 = RstSizeToBlocks(a1, *(_QWORD *)(a2 + 704)); /*0x18d85*/
v15 = RstSizeToBlocks(a1, v5); /*0x18d88*/
v13 = a2; /*0x18d8d*/
if ( v14 != v15 || *(_BYTE *)(a1 + 42) != 3 ) /*0x18d99*/
return RstHelper_197c(a2); /*0x18d9b*/
return Assert_12(v13); /*0x18d6e*/
}
LABEL_12:
v13 = a2; /*0x18d66*/
return Assert_12(v13); /*0x18d66*/
}
v10 = v9 - 1; /*0x18d13*/
if ( !v10 ) /*0x18d16*/
goto LABEL_12; /*0x18d16*/
result = (unsigned int)(v10 - 1); /*0x18d18*/
if ( (_DWORD)result ) /*0x18d1b*/
{
if ( (_DWORD)result == 1 ) /*0x18d20*/
return RstRaidOpSetRetryState(a2); /*0x18d25*/
}
else
{
*(_BYTE *)(a2 + 68) = *(_BYTE *)(a1 + 92); /*0x18d32*/
Source = Source_16; /*0x18d35*/
RstConfigBlockCopyState(a2, Source_16 + 33680); /*0x18d43*/
return Assert_20(Source + 33680, a2); /*0x18d52*/
}
return result; /*0x18daf*/
}
// Function: RstCallbackAddMenuEntry @ 0x18db8 (0xaf bytes)
// Index: 693/906
CHAR16 *__fastcall RstCallbackAddMenuEntry(__int64 a1, __int64 Source, unsigned __int8 a3, __int16 n3, char a5)
{
__int64 Source_1; // rdi
__int64 *v9; // rcx
CHAR16 *result; // rax
__int64 v11; // rax
CHAR16 *Destination; // rcx
Source_1 = Source; /*0x18dd8*/
if ( a5 ) /*0x18dde*/
{
v9 = *(__int64 **)(Source + 48); /*0x18de0*/
LOBYTE(Source) = a3; /*0x18de8*/
RstDeviceIncrementEvent(*v9, Source, n3); /*0x18dee*/
}
++*(_WORD *)(a1 + 74); /*0x18df3*/
*(_WORD *)(Source_1 + 2) = n3; /*0x18df7*/
*(_WORD *)Source_1 = a3; /*0x18dff*/
*(_QWORD *)(*(_QWORD *)(a1 + 32) + 40LL) = a1; /*0x18e06*/
LOBYTE(Source) = *(_BYTE *)(Source_1 + 72); /*0x18e0a*/
result = (CHAR16 *)RstBufferAddByteUnique(*(_QWORD *)(a1 + 32), Source); /*0x18e11*/
if ( !*(_QWORD *)(a1 + 16) ) /*0x18e16*/
{
v11 = Source_16 + 34096; /*0x18e2d*/
*(_QWORD *)(Source_16 + 34152) = a1; /*0x18e33*/
*(_QWORD *)(a1 + 80) = v11; /*0x18e37*/
Destination = (CHAR16 *)(Source_16 + 34176); /*0x18e42*/
*(_QWORD *)(a1 + 16) = Source_16 + 34176; /*0x18e49*/
return StrnCpy(Destination, (const CHAR16 *)Source_1, 0x50u); /*0x18e4d*/
}
return result; /*0x18e61*/
}
// Function: RstCallbackIoHandler @ 0x18e68 (0x7a bytes)
// Index: 694/906
char __fastcall RstCallbackIoHandler(__int64 a1, __int64 Source)
{
__int64 v3; // rcx
int v5; // eax
__int64 v6; // rcx
v3 = *(_QWORD *)(Source + 48); /*0x18e75*/
if ( (*(_BYTE *)(v3 + 8) || (LOBYTE(v5) = RstDeviceCheckOnline(*(_QWORD *)v3), (_BYTE)v5)) /*0x18eab*/
&& (*(_WORD *)(*(_QWORD *)(a1 + 40) + 40LL)
|| (v6 = **(_QWORD **)(Source + 48), v5 = *(_DWORD *)(v6 + 136) >> 3, (*(_DWORD *)(v6 + 136) & 8) == 0)) )
{
LOBYTE(v5) = (unsigned __int8)RstCallbackAddMenuEntry(a1, Source, 0, 0, 0); /*0x18ed2*/
}
else if ( *(_BYTE *)Source ) /*0x18ead*/
{
LOBYTE(v5) = (unsigned __int8)RstCallbackAddMenuEntry(a1, Source, *(_BYTE *)Source, *(_WORD *)(Source + 2), 1); /*0x18ebf*/
}
return v5; /*0x18edc*/
}
// Function: Assert_120 @ 0x18ee4 (0x126 bytes)
// Index: 695/906
char __fastcall Assert_120(__int64 a1, char a2, int a3, __int64 a4, int a5, int a6, char a7)
{
__int64 v11; // rcx
int v12; // eax
__int64 n23_4; // rcx
__int64 v14; // rax
__int64 Source; // rdi
int n23; // ecx
__int64 *v17; // rbx
unsigned __int8 n23_2; // r11
__int64 n23_3; // rdx
_BYTE v21[56]; // [rsp+30h] [rbp-68h] BYREF
__int64 v22; // [rsp+68h] [rbp-30h]
__int64 v23; // [rsp+A0h] [rbp+8h] BYREF
unsigned __int8 n23_1; // [rsp+A8h] [rbp+10h] BYREF
RstConfigBlockZero((__int64)v21); /*0x18f03*/
v11 = *(_QWORD *)(*(_QWORD *)(a1 + 32) + 32LL); /*0x18f17*/
v12 = a5; /*0x18f1b*/
*(_BYTE *)(a1 + 48) = a2; /*0x18f22*/
*(_DWORD *)(a1 + 64) = v12; /*0x18f25*/
*(_DWORD *)(a1 + 92) = a6; /*0x18f31*/
*(_BYTE *)(a1 + 72) = a7; /*0x18f3d*/
*(_QWORD *)(a1 + 40) = v11; /*0x18f45*/
*(_QWORD *)(a1 + 80) = v21; /*0x18f49*/
*(_DWORD *)(a1 + 24) = a3; /*0x18f55*/
*(_QWORD *)(a1 + 56) = a4; /*0x18f58*/
*(_WORD *)(a1 + 74) = 0; /*0x18f5c*/
*(_DWORD *)(a1 + 68) = 0; /*0x18f60*/
v22 = a1; /*0x18f68*/
RstVtableDispatch34(v11, a3, a4, (__int64)&n23_1, (__int64)&v23); /*0x18f6d*/
n23_4 = n23_1; /*0x18f72*/
v14 = *(_QWORD *)(a1 + 80); /*0x18f7a*/
*(_QWORD *)(a1 + 16) = 0; /*0x18f7e*/
*(_QWORD *)(a1 + 8 * n23_4 + 96) = v14; /*0x18f82*/
Source = *(_QWORD *)(a1 + 8LL * n23_1 + 96); /*0x18f92*/
n23 = 23; /*0x18fa3*/
if ( n23_1 < 0x18u ) /*0x18fb0*/
n23 = n23_1; /*0x18fb0*/
v17 = (__int64 *)(*(_QWORD *)(a1 + 40) + 16 * (n23 + 7LL)); /*0x18fc5*/
RstConfigBlockInit(Source, *v17, *(_BYTE *)(a1 + 48), v23, *(_DWORD *)(a1 + 64), *(_DWORD *)(a1 + 92)); /*0x18fcc*/
n23_2 = n23_1; /*0x18fd1*/
*(_QWORD *)(Source + 48) = v17; /*0x18fd9*/
*(_BYTE *)(Source + 72) = n23_2; /*0x18fdd*/
LOBYTE(n23_3) = *(_BYTE *)(a1 + 48); /*0x18fe1*/
Assert_88(Source, n23_3); /*0x18fe7*/
return RstCallbackIoHandler(a1, Source); /*0x18fff*/
}
// Function: Assert_117 @ 0x1900c (0x17b bytes)
// Index: 696/906
__int64 __fastcall Assert_117(
__int64 a1,
char n40,
_BYTE *p_n0xFF,
__int16 a4,
char n255,
__int64 i,
int a7,
unsigned int *p_i)
{
__int64 v12; // rax
__int64 v13; // r10
__int64 result; // rax
__int16 j; // di
int n23; // ecx
__int64 n0xFF; // rdx
int n23_1; // eax
_WORD Source[24]; // [rsp+30h] [rbp-78h] BYREF
__int64 v21; // [rsp+60h] [rbp-48h]
__int64 v22; // [rsp+68h] [rbp-40h]
char n0xFF_1; // [rsp+78h] [rbp-30h]
RstConfigBlockZero((__int64)Source); /*0x1903c*/
v12 = *(_QWORD *)(a1 + 32); /*0x19041*/
v22 = a1; /*0x19045*/
v13 = *(_QWORD *)(v12 + 32); /*0x1904a*/
result = 0; /*0x1904e*/
*(_QWORD *)(a1 + 40) = v13; /*0x19053*/
*(_DWORD *)(a1 + 68) = 0; /*0x19057*/
*(_WORD *)(a1 + 74) = 0; /*0x1905a*/
for ( j = 0; a4 > 0; *p_n0xFF = ((unsigned __int8)*p_n0xFF + 1) % *(unsigned __int8 *)(*(_QWORD *)(a1 + 40) + 42LL) ) /*0x19064*/
{
if ( *p_n0xFF != n255 ) /*0x19085*/
{
n23 = 23; /*0x190a6*/
if ( *p_n0xFF < 0x18u ) /*0x190b3*/
n23 = (unsigned __int8)*p_n0xFF; /*0x190b3*/
RstConfigBlockInit((__int64)Source, *(_QWORD *)(*(_QWORD *)(a1 + 40) + 16 * (n23 + 7LL)), n40, i, a7, *p_i); /*0x190c9*/
n0xFF = (unsigned __int8)*p_n0xFF; /*0x190ce*/
n23_1 = 23; /*0x190d1*/
n0xFF_1 = n0xFF; /*0x190d6*/
++p_i; /*0x190da*/
if ( (unsigned __int8)n0xFF < 0x18u ) /*0x190e1*/
n23_1 = n0xFF; /*0x190e1*/
LOBYTE(n0xFF) = n40; /*0x190e9*/
v21 = *(_QWORD *)(a1 + 40) + 16 * (n23_1 + 7LL); /*0x190fa*/
Assert_88((__int64)Source, n0xFF); /*0x190ff*/
RstCallbackIoHandler(a1, (__int64)Source); /*0x1910c*/
result = 0; /*0x19111*/
--a4; /*0x19113*/
if ( LOBYTE(Source[0]) && Source[1] != 2 ) /*0x19124*/
break; /*0x19124*/
if ( Source[1] == 2 ) /*0x1912b*/
++j; /*0x1912d*/
}
result = 0; /*0x19142*/
}
if ( *(__int16 *)(a1 + 74) > 0 && j == *(_WORD *)(a1 + 74) ) /*0x1915c*/
{
result = *(_QWORD *)(a1 + 16); /*0x1915e*/
*(_WORD *)(result + 2) = 2; /*0x19162*/
}
return result; /*0x1917a*/
}
// Function: Assert_139 @ 0x19188 (0x3b bytes)
// Index: 697/906
__int64 Assert_139(__int64 a1, char n42, char n0xFF, __int64 i, int a5, ...)
{
char n0xFF_1; // [rsp+60h] [rbp+18h] BYREF
va_list va; // [rsp+78h] [rbp+30h] BYREF
va_start(va, a5);
n0xFF_1 = n0xFF; /*0x1918b*/
return Assert_117(a1, n42, &n0xFF_1, 1, 255, i, a5, (unsigned int *)va); /*0x191be*/
}
// Function: RstBufferAddByteUnique @ 0x191c4 (0x2d bytes)
// Index: 698/906
__int64 __fastcall RstBufferAddByteUnique(__int64 a1, __int64 Source)
{
__int16 v2; // r9
__int64 result; // rax
v2 = 0; /*0x191c4*/
if ( *(_BYTE *)(a1 + 67) ) /*0x191c7*/
{
while ( 1 ) /*0x191cd*/
{
result = v2; /*0x191cd*/
if ( *(_BYTE *)(v2 + a1 + 68) == (_BYTE)Source ) /*0x191d5*/
break; /*0x191d5*/
if ( ++v2 >= *(unsigned __int8 *)(a1 + 67) ) /*0x191e3*/
goto LABEL_4; /*0x191e3*/
}
}
else
{
LABEL_4:
result = *(unsigned __int8 *)(a1 + 67); /*0x191e5*/
*(_BYTE *)(result + a1 + 68) = Source; /*0x191e9*/
++*(_BYTE *)(a1 + 67); /*0x191ed*/
}
return result; /*0x191f0*/
}
// Function: RstBufferProcessByteArray @ 0x191f4 (0x38 bytes)
// Index: 699/906
__int64 __fastcall RstBufferProcessByteArray(__int64 a1, __int64 Source)
{
__int16 v2; // r8
__int64 Source_1; // r10
__int64 v4; // r11
__int64 result; // rax
__int16 v6; // r8
v2 = 0; /*0x191f8*/
Source_1 = Source; /*0x191fb*/
v4 = a1; /*0x191fe*/
if ( *(_BYTE *)(Source + 67) ) /*0x19201*/
{
do /*0x19225*/
{
LOBYTE(Source) = *(_BYTE *)(v2 + Source_1 + 68); /*0x1920e*/
RstBufferAddByteUnique(v4, Source); /*0x19213*/
result = *(unsigned __int8 *)(Source_1 + 67); /*0x19218*/
v2 = v6 + 1; /*0x1921d*/
}
while ( v2 < (__int16)result ); /*0x19225*/
}
return result; /*0x19227*/
}
// Function: RstReturnAllOnes @ 0x1922c (0x4 bytes)
// Index: 700/906
__int64 RstReturnAllOnes()
{
return 0xFFFFFFFFLL; /*0x1922f*/
}
// Function: RstCrc32 @ 0x19230 (0x34 bytes)
// Index: 701/906
__int64 __fastcall RstCrc32(unsigned int a1, unsigned int *a2, int n4)
{
int n4_1; // ebx
unsigned int v5; // eax
bool v6; // zf
n4_1 = n4; /*0x1923a*/
if ( n4 ) /*0x19243*/
{
do /*0x19255*/
{
v5 = mm_crc32_u32_w(a1, *a2++); /*0x19247*/
v6 = n4_1 == 4; /*0x19250*/
n4_1 -= 4; /*0x19250*/
a1 = v5; /*0x19253*/
}
while ( !v6 ); /*0x19255*/
}
return a1; /*0x1925e*/
}
// Function: RstBitwiseNot @ 0x19264 (0x5 bytes)
// Index: 702/906
__int64 __fastcall RstBitwiseNot(int a1)
{
return (unsigned int)~a1; /*0x19268*/
}
// Function: RstDeviceNodeInit @ 0x1926c (0x4c bytes)
// Index: 703/906
_QWORD *__fastcall RstDeviceNodeInit(_QWORD *a1, __int64 a2)
{
RstBufferInit(a1, 4096); /*0x19281*/
a1[7] = a2; /*0x19286*/
*a1 = &off_24010; /*0x19296*/
a1[1] = *(_QWORD *)(*(_QWORD *)(Source_16 + 208) + 8LL); /*0x192ab*/
return a1; /*0x192b2*/
}
// Function: RstHelper_92b8 @ 0x192b8 (0xf6 bytes)
// Index: 704/906
__int64 RstHelper_92b8__int64 a1)
{
__int64 result; // rax
__int64 v3; // rdi
RstHelper_8830(a1); /*0x192c5*/
result = *(_QWORD *)(a1 + 56); /*0x192ca*/
v3 = *(_QWORD *)(result + 48); /*0x192ce*/
if ( v3 ) /*0x192d5*/
{
*(_DWORD *)(a1 + 16) = HiiLibReturnZero(*(_QWORD *)(result + 48)); /*0x192e3*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 36LL) = 264; /*0x192ea*/
if ( (((unsigned int)&loc_202A4 + 1) & *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 56) + 48LL) + 136LL)) != 0 ) /*0x19303*/
{
RstDeviceSetFlags(v3, 256); /*0x1930d*/
RstDeviceClearFlags(v3, 32770); /*0x1931a*/
RstDeviceInfoCopy((CHAR16 *)(*(_QWORD *)(a1 + 8) + 216LL), *(_QWORD *)(a1 + 56)); /*0x1932e*/
*(_BYTE *)(*(_QWORD *)(a1 + 8) + 56LL) = 1; /*0x19337*/
if ( (unsigned __int8)RstDeviceIsActive(*(_QWORD *)(a1 + 56)) ) /*0x19340*/
RstStrCopy(*(_QWORD *)(a1 + 8) + 24LL, "2.0.00"); /*0x19358*/
RstProgressUpdate(a1); /*0x19360*/
}
else
{
if ( (*(_DWORD *)(v3 + 136) & 0x118930) != 0x110 ) /*0x19377*/
return (*(__int64 (__fastcall **)(__int64, __int64))(*(_QWORD *)a1 + 8LL))(a1, v3); /*0x193a0*/
RstDeviceClearFlags(v3, 259); /*0x1937f*/
**(_BYTE **)(a1 + 8) = 0; /*0x19388*/
}
Assert_135(a1, v3); /*0x19392*/
return (*(__int64 (__fastcall **)(__int64, __int64))(*(_QWORD *)a1 + 8LL))(a1, v3); /*0x19392*/
}
return result; /*0x193a8*/
}
// Function: j_nullsub_1 @ 0x193b0 (0x5 bytes)
// Index: 705/906
// attributes: thunk
__int64 __fastcall j_nullsub_1(__int64 a1)
{
return nullsub_1(a1);
}
// Function: RstDeviceInfoToBuffer @ 0x193b8 (0x65 bytes)
// Index: 706/906
__int64 __fastcall RstDeviceInfoToBuffer(__int64 i, _DWORD *a2)
{
__int64 result; // rax
MemZero((_BYTE *)i, 0, 16); /*0x193ce*/
RstStringCopyN(i, (__int64)(a2 + 7), 16); /*0x193e0*/
*(_DWORD *)(i + 16) = a2[22]; /*0x193e8*/
*(_DWORD *)(i + 32) = HIDWORD(*((_QWORD *)a2 + 11)); /*0x193f3*/
*(_DWORD *)(i + 20) = a2[24]; /*0x193f9*/
result = (unsigned int)a2[34]; /*0x193fc*/
*(_DWORD *)(i + 28) = -1; /*0x19402*/
*(_DWORD *)(i + 24) = result; /*0x1940b*/
*(_QWORD *)(i + 36) = 0; /*0x1940e*/
*(_DWORD *)(i + 44) = 0; /*0x19413*/
return result; /*0x19417*/
}
// Function: RstBufferCombine32to64 @ 0x19420 (0xe bytes)
// Index: 707/906
unsigned __int64 __fastcall RstBufferCombine32to64(__int64 Source)
{
return *(unsigned int *)(Source + 16) + ((unsigned __int64)*(unsigned int *)(Source + 32) << 32); /*0x1942d*/
}
// Function: RstDeviceSetJournalMode @ 0x19430 (0x57 bytes)
// Index: 708/906
__int64 __fastcall RstDeviceSetJournalMode(__int64 a1, char a2)
{
__int64 result; // rax
__int64 v5; // rax
__int64 v6; // rdx
result = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), a1); /*0x19451*/
if ( result ) /*0x19459*/
{
v5 = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), a1); /*0x1946c*/
LOBYTE(v6) = a2; /*0x19471*/
return RstJournalDeviceSetMode(v5, v6); /*0x19477*/
}
return result; /*0x19481*/
}
// Function: RstDeviceFindAndRemove @ 0x19488 (0x48 bytes)
// Index: 709/906
__int64 *__fastcall RstDeviceFindAndRemove(_BYTE *Source)
{
__int64 *result; // rax
__int64 *v3; // rax
result = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), Source); /*0x194a2*/
if ( result ) /*0x194aa*/
{
v3 = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), Source); /*0x194bd*/
return (__int64 *)RstDeviceIsActive(v3); /*0x194c5*/
}
return result; /*0x194ca*/
}
// Function: RstDeviceInfoCopy @ 0x194d0 (0x73 bytes)
// Index: 710/906
__int64 __fastcall RstDeviceInfoCopy(CHAR16 *Destination, __int64 i)
{
__int64 result; // rax
MemZero(Destination, 0, 16); /*0x194e6*/
RstStringCopyN(Destination, i + 18, 16); /*0x194f8*/
*((_DWORD *)Destination + 4) = *(_DWORD *)(*(_QWORD *)(i + 48) + 88LL); /*0x19505*/
*((_DWORD *)Destination + 8) = HIDWORD(*(_QWORD *)(*(_QWORD *)(i + 48) + 88LL)); /*0x19515*/
*((_DWORD *)Destination + 5) = *(_DWORD *)(*(_QWORD *)(i + 48) + 96LL); /*0x1951f*/
result = *(_QWORD *)(i + 48); /*0x19522*/
*((_DWORD *)Destination + 6) = *(_DWORD *)(result + 136); /*0x19531*/
*(_QWORD *)(Destination + 18) = 0; /*0x19534*/
*((_DWORD *)Destination + 11) = 0; /*0x19539*/
return result; /*0x1953d*/
}
// Function: RstBufferSetTriple @ 0x19544 (0xc bytes)
// Index: 711/906
void __fastcall RstBufferSetTriple(_QWORD *a1, __int64 a2, __int64 a3, __int64 a4)
{
*a1 = a2; /*0x19544*/
a1[1] = a3; /*0x19547*/
a1[2] = a4; /*0x1954b*/
}
// Function: RstBufferSetDouble @ 0x19550 (0x9 bytes)
// Index: 712/906
void __fastcall RstBufferSetDouble(__int64 a1, __int64 a2, __int64 a3)
{
*(_QWORD *)(a1 + 8) = a2; /*0x19550*/
*(_QWORD *)(a1 + 16) = a3; /*0x19554*/
}
// Function: RstHelper_955c @ 0x1955c (0x2c bytes)
// Index: 713/906
CHAR16 *RstHelper_955cnt64 a1)
{
CHAR16 *result; // rax
*(_DWORD *)a1 = 0; /*0x19562*/
result = StrnCpy((CHAR16 *)(a1 + 4), "Intel Raid ISM Journaling Sig ", 0x20u); /*0x19579*/
*(_DWORD *)(a1 + 36) = 0; /*0x1957e*/
return result; /*0x19582*/
}
// Function: RstBufferCopyEntry @ 0x19588 (0x19 bytes)
// Index: 714/906
__int64 __fastcall RstBufferCopyEntry(__int64 a1, __int64 a2, __int64 a3)
{
__int64 result; // rax
*(_DWORD *)(a1 + 36) = *(_DWORD *)(a2 + 64); /*0x1958b*/
result = *(unsigned __int16 *)(*(_QWORD *)(*(_QWORD *)a3 + 136LL) + 64LL); /*0x19598*/
*(_WORD *)(a1 + 40) = result; /*0x1959c*/
return result; /*0x195a0*/
}
// Function: StrnCpy16_w @ 0x195a4 (0x25 bytes)
// Index: 715/906
bool StrnCpy16_w__int64 a1)
{
return StrnCpy16("Intel Raid ISM Journaling Sig ", (_BYTE *)(a1 + 4), 32) == 0; /*0x195c4*/
}
// Function: Assert_46 @ 0x195cc (0xb7 bytes)
// Index: 716/906
__int64 __fastcall Assert_46(CHAR16 *Source)
{
char v2; // al
CHAR16 *i_1; // rbx
unsigned int v4; // eax
int v5; // eax
unsigned int v6; // eax
_BYTE *i_2; // rcx
unsigned int v8; // ebx
_BYTE *i; // [rsp+20h] [rbp-18h] BYREF
char v11; // [rsp+28h] [rbp-10h]
__int16 n16; // [rsp+2Ah] [rbp-Eh]
*(_DWORD *)Source = 0; /*0x195d6*/
i = 0; /*0x195d9*/
v11 = 0; /*0x195ee*/
n16 = 16; /*0x195f3*/
RstBufferPoolRealloc((__int64)&i, 0); /*0x195f8*/
v2 = RstDebugEnabled(); /*0x195fd*/
i_1 = (CHAR16 *)i; /*0x19602*/
if ( v2 && !i ) /*0x1960e*/
{
DebugAssert("JdPplMpb.cpp", 0x43u, "framebuf.ptr()"); /*0x19621*/
i_1 = (CHAR16 *)i; /*0x19626*/
}
MemZero(i_1, 0, 4096); /*0x19636*/
StrnCpy(i_1, Source, 0x2Au); /*0x19647*/
v4 = RstReturnAllOnes(); /*0x1964c*/
v5 = RstCrc32(v4, (unsigned int *)i_1, 4096); /*0x1965c*/
v6 = RstBitwiseNot(v5); /*0x19663*/
i_2 = i; /*0x19668*/
v8 = v6; /*0x1966d*/
*(_DWORD *)Source = v6; /*0x1966f*/
RstBufferPoolLock((__int64)i_2); /*0x19671*/
return v8; /*0x1967d*/
}
// Function: RstJournalSuperblockInit @ 0x19684 (0x4c bytes)
// Index: 717/906
_QWORD *__fastcall RstJournalSuperblockInit(_QWORD *a1, __int64 a2)
{
RstBufferInit(a1, 0x2000); /*0x19699*/
a1[7] = a2; /*0x1969e*/
*a1 = off_24058; /*0x196ae*/
a1[1] = *(_QWORD *)(*(_QWORD *)(Source_16 + 208) + 8LL); /*0x196c3*/
return a1; /*0x196ca*/
}
// Function: RstHelper_96d0 @ 0x196d0 (0x10e bytes)
// Index: 718/906
__int64 __fastcall RstHelper_96d0(__int64 a1, __int64 a2)
{
int v4; // esi
int v5; // esi
__int64 v6; // rbx
int v7; // edi
__int64 v8; // rax
int v9; // edi
int v10; // ebx
__int64 v11; // rax
_BYTE *i; // [rsp+20h] [rbp-68h]
_BYTE Source[80]; // [rsp+30h] [rbp-58h] BYREF
RstConfigBlockZero((__int64)Source); /*0x196f6*/
if ( *(_DWORD *)(a1 + 16) > (unsigned int)HiiLibReturnZero(a2) ) /*0x19708*/
{
v4 = *(_DWORD *)(a1 + 8); /*0x1970a*/
v5 = HiiLibReturnZero(a2) + v4; /*0x1971a*/
v6 = *(_DWORD *)(a1 + 16) / (unsigned int)HiiLibReturnZero(a2) - 1; /*0x19731*/
v7 = *(_DWORD *)(a1 + 16) - HiiLibReturnZero(a2); /*0x19741*/
v8 = RstCountDecrementBy2(a2); /*0x19743*/
LODWORD(i) = v5; /*0x19764*/
RstConfigBlockInitFrom(Source_16, 42, v8 - v6, v7, i, Source); /*0x19768*/
j_Assert_18(a2, (__int64)Source); /*0x19775*/
}
v9 = *(_DWORD *)(a1 + 8); /*0x1977a*/
v10 = HiiLibReturnZero(a2); /*0x1978a*/
v11 = RstCountDecrementBy2(a2); /*0x1978c*/
LODWORD(i) = v9; /*0x197aa*/
RstConfigBlockInitFrom(Source_16, 42, v11, v10, i, Source); /*0x197ae*/
return j_Assert_18(a2, (__int64)Source); /*0x197d8*/
}
// Function: RstDeviceNotifyRemoved @ 0x197e0 (0x7f bytes)
// Index: 719/906
__int64 *__fastcall RstDeviceNotifyRemoved(__int64 a1, __int64 a2)
{
__int64 *result; // rax
__int64 v4; // rdi
__int64 i; // rbx
int v6; // ecx
result = (__int64 *)Source_16; /*0x197ef*/
v4 = *(_QWORD *)(Source_16 + 216); /*0x197f9*/
for ( i = *(_QWORD *)(v4 + 16); ; i = *result ) /*0x19800*/
{
*(_QWORD *)(v4 + 8) = i; /*0x19846*/
if ( !i ) /*0x1984d*/
break; /*0x1984d*/
if ( *(_QWORD *)(i + 40) == *(_QWORD *)(a1 + 56) ) /*0x1980e*/
{
v6 = *(_DWORD *)(*(_QWORD *)(i + 48) + 136LL); /*0x19814*/
if ( (v6 & 2) == 0 ) /*0x19820*/
{
if ( (v6 & 8) != 0 ) /*0x19828*/
{
LOBYTE(a2) = 1; /*0x1982e*/
(***(void (__fastcall ****)(_QWORD, __int64))(i + 64))(*(_QWORD *)(i + 64), a2); /*0x19833*/
}
RstDeviceListEntrySetActive(i, 0); /*0x1983a*/
}
}
result = *(__int64 **)(v4 + 8); /*0x1983f*/
}
return result; /*0x19859*/
}
// Function: RstDevicePathUpdateStatus @ 0x19860 (0x5e bytes)
// Index: 720/906
__int64 __fastcall RstDevicePathUpdateStatus(__int64 a1)
{
__int64 v2; // rcx
_BYTE *v3; // rax
char v5; // [rsp+30h] [rbp+8h] BYREF
v2 = *(_QWORD *)(a1 + 56); /*0x1986d*/
v5 = 0; /*0x19871*/
while ( 1 ) /*0x1989e*/
{
v3 = (_BYTE *)RstLargeArrayPop(v2, &v5); /*0x1989e*/
if ( !v3 ) /*0x198a9*/
break; /*0x198a9*/
*(_BYTE *)(*(_QWORD *)(*(_QWORD *)v3 + 160LL) + 82LL) = RstDevicePathFindName(*(_QWORD *)(a1 + 8), v3 + 16)[90]; /*0x19892*/
v2 = *(_QWORD *)(a1 + 56); /*0x19895*/
}
return nullsub_1(a1); /*0x198b8*/
}
// Function: RstDeviceSetOnlineFlags @ 0x198c0 (0xb7 bytes)
// Index: 721/906
__int64 __fastcall RstDeviceSetOnlineFlags(__int64 a1)
{
__int64 v1; // rdx
__int64 result; // rax
__int64 v3; // rbp
unsigned __int16 v5; // bx
__int64 v6; // rax
__int64 v7; // rsi
int v8; // edx
v1 = *(_QWORD *)(a1 + 8); /*0x198d9*/
result = Source_16; /*0x198dd*/
v3 = *(_QWORD *)(Source_16 + 216); /*0x198e7*/
v5 = 0; /*0x198f1*/
if ( *(_BYTE *)(v1 + 56) ) /*0x198f5*/
{
do /*0x1995a*/
{
v6 = RstLinkedListFindByName(v3, v1 + 48LL * v5 + 216); /*0x19910*/
if ( v6 ) /*0x19918*/
{
v7 = *(_QWORD *)(v6 + 48); /*0x1991a*/
v8 = *(_DWORD *)(v7 + 136); /*0x1991e*/
if ( (v8 & 8) != 0 && (v8 & 2) != 0 ) /*0x19932*/
{
RstHelper_96d0(a1, v7); /*0x1993a*/
RstDeviceSetFlags(v7, 256); /*0x19947*/
}
}
v1 = *(_QWORD *)(a1 + 8); /*0x1994c*/
++v5; /*0x19950*/
result = *(unsigned __int8 *)(v1 + 56); /*0x19953*/
}
while ( v5 < (unsigned __int16)result ); /*0x1995a*/
}
return result; /*0x19970*/
}
// Function: Assert_0 @ 0x19978 (0x345 bytes)
// Index: 722/906
__int64 *__fastcall Assert_0(__int64 a1)
{
__int64 v2; // rcx
UINTN Length; // rbx
const CHAR16 *Source; // rax
__int64 v5; // rcx
CHAR16 *Destination; // rsi
unsigned __int8 v7; // bl
__int64 i; // rax
__int64 v9; // rax
__int16 n5; // r13
__int64 v11; // r11
unsigned __int8 n2; // cl
__int16 n2_1; // r12
unsigned __int8 n24; // al
int n24_1; // ebx
char *_1.0.00; // r12
_BYTE *v17; // rbx
__int64 Destination_1; // rax
__int64 v19; // rax
__int64 v20; // rbp
__int64 v21; // rcx
__int64 v22; // rbx
int n4096; // eax
unsigned int n6144; // eax
unsigned int n6144_1; // ecx
__int64 v26; // rdx
unsigned __int8 v28; // [rsp+50h] [rbp+8h] BYREF
if ( *(_DWORD *)(a1 + 36) ) /*0x1999a*/
{
RstHelper_89a4(a1, *(_QWORD *)(a1 + 40)); /*0x199a4*/
v2 = *(_QWORD *)(a1 + 8); /*0x199a9*/
Length = *(unsigned __int16 *)(v2 + 72); /*0x199ad*/
Source = (const CHAR16 *)RstRaidSuperblockFind(v2); /*0x199b1*/
StrnCpy(&Destination, Source, Length); /*0x199c3*/
}
RstHelper_8830(a1); /*0x199cb*/
v5 = *(_QWORD *)(a1 + 56); /*0x199d4*/
Destination = (CHAR16 *)(*(_QWORD *)(a1 + 8) + 216LL); /*0x199dd*/
v7 = 0; /*0x199e4*/
v28 = 0; /*0x199e7*/
for ( i = RstSmallArrayPop(v5, &v28); i; i = RstSmallArrayPop(*(_QWORD *)(a1 + 56), &v28) ) /*0x199ec*/
{
*(_WORD *)(i + 16) = v7; /*0x199ff*/
RstDeviceInfoCopy(Destination, i); /*0x19a06*/
++v7; /*0x19a14*/
Destination += 24; /*0x19a17*/
}
*(_BYTE *)(*(_QWORD *)(a1 + 8) + 56LL) = v7; /*0x19a29*/
v28 = 0; /*0x19a2c*/
while ( 1 ) /*0x19bbe*/
{
v19 = RstLargeArrayPop(*(_QWORD *)(a1 + 56), &v28); /*0x19bbe*/
v20 = v19; /*0x19bc3*/
if ( !v19 ) /*0x19bc9*/
break; /*0x19bc9*/
if ( RstLinkedListFindByKey(Source_16, (_BYTE *)(v19 + 16)) ) /*0x19a41*/
{
v9 = RstDeviceGetParentOrSpare(v20, 0); /*0x19a54*/
n5 = *(_WORD *)(v9 + 4); /*0x19a63*/
v11 = v9; /*0x19a68*/
n2 = *(_BYTE *)(*(_QWORD *)(a1 + 56) + 224LL); /*0x19a6b*/
if ( n2 >= 2u ) /*0x19a71*/
n2 = 2; /*0x19a73*/
n2_1 = n2; /*0x19a7c*/
if ( *(_BYTE *)(v9 + 6) > 0x18u ) /*0x19a80*/
n24 = 24; /*0x19a88*/
else
n24 = *(_BYTE *)(v9 + 6); /*0x19a82*/
n24_1 = n24; /*0x19a90*/
if ( Assert_45(v11) ) /*0x19a93*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 0x4000000u; /*0x19aa1*/
if ( HIDWORD(*(_QWORD *)(v20 + 40)) ) /*0x19aaa*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 0x20000000u; /*0x19ab7*/
if ( *(_DWORD *)(a1 + 36) ) /*0x19abc*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 0x8000000u; /*0x19ac6*/
if ( n2_1 <= 1 && *(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) == 0x80000000 ) /*0x19ad5*/
{
_1.0.00 = "1.0.00"; /*0x19ae9*/
if ( n5 == 1 ) /*0x19af0*/
_1.0.00 = "1.1.00"; /*0x19af0*/
if ( n24_1 >= 3 ) /*0x19afe*/
_1.0.00 = "1.2.01"; /*0x19afe*/
if ( n5 == 5 ) /*0x19b0e*/
_1.0.00 = "1.2.02"; /*0x19b0e*/
if ( n24_1 >= 5 ) /*0x19b1c*/
_1.0.00 = "1.2.04"; /*0x19b1c*/
goto LABEL_38; /*0x19b1c*/
}
_1.0.00 = "1.3.00"; /*0x19b22*/
if ( !n5 ) /*0x19b2d*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 1u; /*0x19b33*/
if ( n5 != 1 ) /*0x19b3b*/
goto LABEL_36; /*0x19b3b*/
if ( (__int16)n24_1 < 4 ) /*0x19b45*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 2u; /*0x19b4b*/
if ( n24_1 > 3 ) /*0x19b52*/
{
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 4u; /*0x19b58*/
LABEL_36:
if ( n5 == 5 ) /*0x19b60*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 0x10u; /*0x19b66*/
}
LABEL_38:
v17 = (_BYTE *)(*(_QWORD *)(a1 + 8) + 24LL); /*0x19b6a*/
if ( StrnCpy16(_1.0.00, v17, 0xFFFF) > 0 ) /*0x19b87*/
RstStrCopy(v17, _1.0.00); /*0x19b8f*/
RstDeviceCopyToConfigEntry(Destination, v20); /*0x19b9a*/
Destination_1 = RstConfigBlockGetDataOffset((__int64)(Destination + 40), 0); /*0x19ba5*/
++*(_BYTE *)(*(_QWORD *)(a1 + 8) + 57LL); /*0x19bae*/
Destination = (CHAR16 *)Destination_1; /*0x19bb2*/
}
}
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 72LL) = *(_DWORD *)(a1 + 36); /*0x19bd6*/
v21 = *(_QWORD *)(a1 + 8); /*0x19bd9*/
*(_DWORD *)(a1 + 16) = (_DWORD)Destination + *(_DWORD *)(v21 + 72) - v21; /*0x19be4*/
if ( *(_DWORD *)(a1 + 36) ) /*0x19be7*/
StrnCpy(Destination, &Destination, *(unsigned __int16 *)(v21 + 72)); /*0x19bfc*/
*(_DWORD *)(*(_QWORD *)(a1 + 8) + 36LL) = *(_DWORD *)(a1 + 16); /*0x19c08*/
RstProgressUpdate(a1); /*0x19c0e*/
v22 = *(_QWORD *)(a1 + 56); /*0x19c13*/
if ( RstDebugEnabled() && !*(_DWORD *)(v22 + 280) ) /*0x19c21*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x19c3d*/
n4096 = *(_DWORD *)(v22 + 280); /*0x19c42*/
if ( n4096 == 512 ) /*0x19c4d*/
{
n6144 = 6144; /*0x19c6f*/
n6144_1 = (*(_DWORD *)(a1 + 16) + 511) & 0xFFFFFE00; /*0x19c7a*/
LABEL_51:
if ( n6144_1 < n6144 ) /*0x19c82*/
n6144 = n6144_1; /*0x19c82*/
*(_DWORD *)(a1 + 16) = n6144; /*0x19c85*/
}
else if ( n4096 == 4096 ) /*0x19c54*/
{
n6144 = 0x2000; /*0x19c59*/
n6144_1 = (*(_DWORD *)(a1 + 16) + 4095) & 0xFFFFF000; /*0x19c64*/
goto LABEL_51; /*0x19c6a*/
}
RstDeviceSetOnlineFlags(a1); /*0x19c8b*/
RstDevicePathUpdateStatus(a1); /*0x19c93*/
return RstDeviceNotifyRemoved(a1, v26); /*0x19caf*/
}
// Function: Assert_97 @ 0x19cc0 (0x7f bytes)
// Index: 723/906
__int64 *__fastcall Assert_97(__int64 a1)
{
__int64 v1; // r9
unsigned __int8 i; // r8
unsigned __int8 n2; // al
int i_1; // ecx
__int64 v6; // rcx
__int64 *result; // rax
v1 = *(_QWORD *)(a1 + 56); /*0x19cca*/
for ( i = 0; ; ++i ) /*0x19cd4*/
{
n2 = *(_BYTE *)(v1 + 224); /*0x19cd7*/
if ( n2 >= 2u ) /*0x19ce3*/
n2 = 2; /*0x19ce5*/
if ( i >= n2 ) /*0x19ced*/
break; /*0x19ced*/
i_1 = 1; /*0x19cf3*/
if ( i < 2u ) /*0x19cfc*/
i_1 = i; /*0x19cfc*/
v6 = *(_QWORD *)(v1 + 8LL * i_1 + 232); /*0x19d02*/
result = (__int64 *)(*(_DWORD *)(v6 + 48) >> 13); /*0x19d0d*/
if ( (*(_DWORD *)(v6 + 48) & 0x2000) != 0 ) /*0x19d12*/
return result; /*0x19d12*/
}
Assert_123(v1); /*0x19d1c*/
return Assert_0(a1); /*0x19d39*/
}
// Function: RstRaidConfigFromHiiEntry @ 0x19d40 (0xa0 bytes)
// Index: 724/906
char __fastcall RstRaidConfigFromHiiEntry(__int64 a1, __int64 a2, __int64 a3, char a4)
{
__int64 v8; // rax
__int64 v9; // rcx
__int64 v10; // rdx
*(_DWORD *)(a1 + 8) = *(unsigned __int8 *)(a2 + 8); /*0x19d5e*/
*(_DWORD *)(a1 + 12) = *(unsigned __int8 *)(a2 + 9); /*0x19d68*/
*(_BYTE *)(a1 + 16) = *(_BYTE *)(a2 + 10); /*0x19d71*/
v8 = RstBufferCombineLowHigh(a2); /*0x19d77*/
v9 = *(_QWORD *)(a1 + 40); /*0x19d7c*/
*(_QWORD *)(a1 + 24) = v8; /*0x19d84*/
*(_DWORD *)(a1 + 32) = *(_DWORD *)(a2 + 4); /*0x19d8e*/
*(_WORD *)(a1 + 36) = *(_WORD *)(a2 + 12); /*0x19d95*/
*(_WORD *)(a1 + 38) = *(_WORD *)(a2 + 14); /*0x19d9d*/
RstRaidConfigFromDiskInfoPopulate(v9, a2 + 32, a3); /*0x19da1*/
if ( a4 || *(_DWORD *)(a1 + 8) ) /*0x19dab*/
v10 = a2 + 4LL * *(unsigned __int8 *)(a2 + 48) + 80; /*0x19dbb*/
else
v10 = a2 + 32; /*0x19db1*/
return RstRaidConfigFromDiskInfoPopulate(*(_QWORD *)(a1 + 48), v10, a3); /*0x19dd6*/
}
// Function: RstRaidConfigFromDiskInfo @ 0x19de0 (0x5f bytes)
// Index: 725/906
char __fastcall RstRaidConfigFromDiskInfo(__int64 a1, __int64 a2)
{
__int64 v4; // rax
__int64 v5; // rcx
char result; // al
*(_DWORD *)(a1 + 8) = *(_DWORD *)(a2 + 12); /*0x19df3*/
*(_DWORD *)(a1 + 12) = *(_DWORD *)(a2 + 64); /*0x19df9*/
*(_BYTE *)(a1 + 16) = *(_BYTE *)(a2 + 82); /*0x19dff*/
v4 = RstDeviceGetDataPtr(a2); /*0x19e05*/
v5 = *(_QWORD *)(a1 + 40); /*0x19e0a*/
*(_QWORD *)(a1 + 24) = v4; /*0x19e0e*/
*(_DWORD *)(a1 + 32) = *(_DWORD *)(a2 + 68); /*0x19e15*/
result = RstRaidArrayCopyState(v5, *(_QWORD *)(a2 + 16)); /*0x19e1c*/
if ( *(_DWORD *)(a1 + 8) ) /*0x19e21*/
return RstRaidArrayCopyState(*(_QWORD *)(a1 + 48), *(_QWORD *)(a2 + 24)); /*0x19e2f*/
return result; /*0x19e39*/
}
// Function: RstRaidMemberIsNvme @ 0x19e40 (0x51 bytes)
// Index: 726/906
char __fastcall RstRaidMemberIsNvme(__int64 a1)
{
char v2; // bl
__int64 v3; // rcx
v2 = 0; /*0x19e5d*/
if ( (unsigned __int8)RstDeviceListScanForType(*(_QWORD *)(a1 + 40)) ) /*0x19e58*/
return 1; /*0x19e58*/
if ( *(_DWORD *)(a1 + 8) == 1 ) /*0x19e67*/
{
v3 = *(_QWORD *)(a1 + 48); /*0x19e69*/
if ( v3 ) /*0x19e70*/
{
if ( (unsigned __int8)RstDeviceListScanForType(v3) ) /*0x19e74*/
return 1; /*0x19e7d*/
}
}
return v2; /*0x19e8b*/
}
// Function: RstRaidConfigInfoInit @ 0x19e94 (0x65 bytes)
// Index: 727/906
__int64 __fastcall RstRaidConfigInfoInit(__int64 a1)
{
__int64 v2; // rax
__int64 v3; // rax
__int64 v4; // rax
__int64 v5; // rax
v2 = RstMemPoolAlloc(264); /*0x19ea2*/
if ( v2 ) /*0x19eaa*/
v3 = RstBufferEntryZero(v2); /*0x19eaf*/
else
v3 = 0; /*0x19eb6*/
*(_QWORD *)(a1 + 40) = v3; /*0x19ebd*/
v4 = RstMemPoolAlloc(264); /*0x19ec1*/
if ( v4 ) /*0x19ec9*/
v5 = RstBufferEntryZero(v4); /*0x19ece*/
else
v5 = 0; /*0x19ed5*/
*(_QWORD *)a1 = 0; /*0x19ed7*/
*(_DWORD *)(a1 + 8) = 0; /*0x19edb*/
*(_DWORD *)(a1 + 12) = 0; /*0x19edf*/
*(_QWORD *)(a1 + 24) = 0; /*0x19ee3*/
*(_QWORD *)(a1 + 48) = v5; /*0x19ee8*/
*(_BYTE *)(a1 + 16) = 0; /*0x19eec*/
return a1; /*0x19ef3*/
}
// Function: RstRaidEntryReset @ 0x19efc (0x41 bytes)
// Index: 728/906
__int64 __fastcall RstRaidEntryReset(__int64 a1)
{
*(_DWORD *)(a1 + 8) = 0; /*0x19f0e*/
*(_DWORD *)(a1 + 12) = 0; /*0x19f11*/
*(_BYTE *)(a1 + 16) = 0; /*0x19f14*/
*(_QWORD *)(a1 + 24) = 0; /*0x19f17*/
*(_DWORD *)(a1 + 32) = 0; /*0x19f1b*/
RstBufferInitEntry(*(_QWORD *)(a1 + 40)); /*0x19f22*/
return RstBufferInitEntry(*(_QWORD *)(a1 + 48)); /*0x19f33*/
}
// Function: RstBufferSetHeader @ 0x19f40 (0xd bytes)
// Index: 729/906
void __fastcall RstBufferSetHeader(__int64 Source, __int16 n5, __int16 n8, int a4)
{
*(_WORD *)Source = n5; /*0x19f40*/
*(_WORD *)(Source + 2) = n8; /*0x19f43*/
*(_DWORD *)(Source + 4) = a4; /*0x19f48*/
}
// Function: RstBufferSetPointer @ 0x19f50 (0x8 bytes)
// Index: 730/906
void __fastcall RstBufferSetPointer(__int64 a1, __int64 a2)
{
*(_QWORD *)a1 = a2; /*0x19f50*/
*(_BYTE *)(a1 + 8) = 0; /*0x19f53*/
}
// Function: Assert_112 @ 0x19f58 (0x30 bytes)
// Index: 731/906
__int64 Assert_112int64 a1, __int64 a2, __int64 a3, unsigned int a4)
{
Assert_8(a1, a2, a3, a4); /*0x19f61*/
*(_WORD *)(a1 + 40) = 0; /*0x19f68*/
*(_DWORD *)(a1 + 96) = 0; /*0x19f6c*/
*(_BYTE *)(a1 + 93) = *(_BYTE *)(a1 + 42); /*0x19f79*/
*(_QWORD *)a1 = off_24068; /*0x19f7f*/
return a1; /*0x19f82*/
}
// Function: RstRaidMemberMapLinearIndex @ 0x19f88 (0x42 bytes)
// Index: 732/906
unsigned __int64 __fastcall RstRaidMemberMapLinearIndex(__int64 a1, unsigned __int64 a2, _BYTE *a3, _QWORD *a4)
{
unsigned __int64 v4; // rax
unsigned __int64 result; // rax
v4 = (a2 >> *(_BYTE *)(a1 + 74)) / *(unsigned __int8 *)(a1 + 42); /*0x19fa9*/
*a3 = (a2 >> *(_BYTE *)(a1 + 74)) % *(unsigned __int8 *)(a1 + 42); /*0x19fac*/
result = v4 << *(_BYTE *)(a1 + 74); /*0x19fbb*/
*a4 = result + (a2 & *(_WORD *)(a1 + 76)); /*0x19fc1*/
return result; /*0x19fc9*/
}
// Function: RstProtocolCallEntry @ 0x19fcc (0x7 bytes)
// Index: 733/906
__int64 __fastcall RstProtocolCallEntry(__int64 a1)
{
return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 24LL))(a1);
}
// Function: RstRaidConfigUpdateDevices @ 0x19fd4 (0x61 bytes)
// Index: 734/906
void __fastcall RstRaidConfigUpdateDevices(__int64 a1)
{
unsigned __int16 i; // di
for ( i = 0; i < *(unsigned __int8 *)(a1 + 42); ++i ) /*0x19feb*/
{
if ( RstDeviceCheckOnline(*(_QWORD *)(a1 + 16 * (i + 7LL))) && *(_DWORD *)(a1 + 8) != 3 ) /*0x1a00d*/
RstRaidMemberMarkRemoving(a1, 0xFFu); /*0x1a014*/
}
}
// Function: RstRaidEntryFinalizeFromConfig @ 0x1a038 (0x60 bytes)
// Index: 735/906
__int64 __fastcall RstRaidEntryFinalizeFromConfig(__int64 a1, __int64 a2)
{
if ( *(_DWORD *)(a1 + 8) == 3 ) /*0x1a045*/
return RstRaidOpSetRetryState(a2); /*0x1a04a*/
if ( *(_BYTE *)(a1 + 93) > 1u ) /*0x1a055*/
RstHelper_54e8(a1, a2); /*0x1a057*/
Assert_120(a2 + 96, 40, 0, *(_QWORD *)(a2 + 704), *(_DWORD *)(a2 + 712), *(_DWORD *)(a2 + 716), 255); /*0x1a085*/
return RstRaidEntryFinalizeWithSize(a2); /*0x1a092*/
}
// Function: RstRaidEntryFinalizeWithAssert @ 0x1a098 (0x60 bytes)
// Index: 736/906
__int64 __fastcall RstRaidEntryFinalizeWithAssert(__int64 a1, __int64 a2)
{
if ( *(_DWORD *)(a1 + 8) == 3 ) /*0x1a0a5*/
return RstRaidOpSetRetryState(a2); /*0x1a0aa*/
if ( *(_BYTE *)(a1 + 93) > 1u ) /*0x1a0b5*/
RstHelper_54e8(a1, a2); /*0x1a0b7*/
Assert_120(a2 + 96, 42, 0, *(_QWORD *)(a2 + 704), *(_DWORD *)(a2 + 712), *(_DWORD *)(a2 + 716), 255); /*0x1a0e5*/
return RstRaidEntryFinalizeWithSize(a2); /*0x1a0f2*/
}
// Function: Assert_100 @ 0x1a0f8 (0x60 bytes)
// Index: 737/906
__int64 Assert_100__int64 a1, __int64 a2, __int64 a3, unsigned int a4)
{
int v6; // ecx
int v7; // edx
Assert_8(a1, a2, a3, a4); /*0x1a108*/
v6 = *(_DWORD *)(a1 + 88); /*0x1a10d*/
*(_WORD *)(a1 + 40) = 1; /*0x1a118*/
*(_DWORD *)(a1 + 96) = 0; /*0x1a123*/
*(_QWORD *)a1 = off_24090; /*0x1a127*/
v7 = *(unsigned __int8 *)(a3 + 40); /*0x1a12a*/
*(_DWORD *)(a1 + 88) = v7 * v6; /*0x1a136*/
LOBYTE(v6) = *(_BYTE *)(a1 + 42); /*0x1a139*/
*(_BYTE *)(a1 + 100) = v7; /*0x1a13e*/
*(_WORD *)(a1 + 108) = 0; /*0x1a141*/
*(_BYTE *)(a1 + 93) = v6; /*0x1a149*/
*(_BYTE *)(a1 + 110) = (_BYTE)v6 != (unsigned __int8)v7; /*0x1a14c*/
return a1; /*0x1a152*/
}
// Function: RstRaidMemberMapContinuousIndex @ 0x1a158 (0x4b bytes)
// Index: 738/906
unsigned __int64 __fastcall RstRaidMemberMapContinuousIndex(__int64 a1, unsigned __int64 a2, _BYTE *a3, _QWORD *a4)
{
unsigned __int64 v4; // rax
unsigned __int64 v5; // rtt
unsigned __int64 result; // rax
v5 = *(unsigned __int8 *)(a1 + 100) * (a2 >> *(_BYTE *)(a1 + 74)); /*0x1a182*/
v4 = v5 / *(unsigned __int8 *)(a1 + 42); /*0x1a182*/
*a3 = v5 % *(unsigned __int8 *)(a1 + 42); /*0x1a185*/
result = v4 << *(_BYTE *)(a1 + 74); /*0x1a194*/
*a4 = result + (a2 & *(_WORD *)(a1 + 76)); /*0x1a19a*/
return result; /*0x1a1a2*/
}
// Function: RstRaidMemberMapStripedIndex @ 0x1a1a4 (0x56 bytes)
// Index: 739/906
unsigned __int64 __fastcall RstRaidMemberMapStripedIndex(__int64 a1, unsigned __int64 a2, _BYTE *a3, _QWORD *a4)
{
unsigned __int64 v5; // r9
unsigned __int64 v6; // rtt
unsigned __int64 result; // rax
v5 = *(unsigned __int8 *)(a1 + 42); /*0x1a1c7*/
v6 = *(unsigned __int8 *)(a1 + 100) * (a2 >> *(_BYTE *)(a1 + 74)) + 1; /*0x1a1d6*/
*a3 = v6 % v5; /*0x1a1d9*/
result = (v6 / v5) << *(_BYTE *)(a1 + 74); /*0x1a1eb*/
*a4 = result + (a2 & *(_WORD *)(a1 + 76)); /*0x1a1f1*/
return result; /*0x1a1f9*/
}
// Function: RstRaidMemberOnlineCount @ 0x1a1fc (0xf8 bytes)
// Index: 740/906
__int64 __fastcall RstRaidMemberOnlineCount(__int64 a1)
{
unsigned __int8 v1; // r8
__int64 result; // rax
unsigned __int16 v4; // di
unsigned __int8 v5; // r13
int v6; // esi
unsigned __int16 v7; // bp
unsigned __int8 v8; // r12
int v9; // edx
int v10; // et2
__int64 v11; // rcx
v1 = *(_BYTE *)(a1 + 100); /*0x1a219*/
result = *(unsigned __int8 *)(a1 + 42); /*0x1a21e*/
v4 = 0; /*0x1a22b*/
v5 = 0; /*0x1a22f*/
if ( (int)(result * v1) > 0 ) /*0x1a238*/
{
v6 = 0; /*0x1a23a*/
do /*0x1a2ab*/
{
v7 = 0; /*0x1a241*/
v8 = v5; /*0x1a245*/
if ( v6 < v6 + v1 ) /*0x1a24c*/
{
v9 = v6; /*0x1a24e*/
do /*0x1a28a*/
{
v10 = v9 % *(unsigned __int8 *)(a1 + 42); /*0x1a257*/
v11 = 2 * (v10 + 7LL); /*0x1a260*/
if ( *(_BYTE *)(a1 + 16 * (v10 + 7LL) + 8) || RstDeviceCheckOnline(*(_QWORD *)(a1 + 8 * v11)) ) /*0x1a26e*/
++v7; /*0x1a278*/
v9 = ++v8; /*0x1a284*/
}
while ( v8 < v6 + *(unsigned __int8 *)(a1 + 100) ); /*0x1a28a*/
}
v1 = *(_BYTE *)(a1 + 100); /*0x1a28c*/
result = *(unsigned __int8 *)(a1 + 42); /*0x1a290*/
if ( v4 < v7 ) /*0x1a297*/
v4 = v7; /*0x1a297*/
v5 += v1; /*0x1a29b*/
v6 = v5; /*0x1a2a2*/
}
while ( v5 < (int)(result * v1) ); /*0x1a2ab*/
}
if ( *(_DWORD *)(a1 + 8) != 3 ) /*0x1a2b1*/
{
result = *(unsigned __int8 *)(a1 + 100); /*0x1a2b3*/
if ( v4 == (_WORD)result ) /*0x1a2ba*/
{
return RstRaidMemberMarkRemoving(a1, 0xFFu); /*0x1a2c1*/
}
else if ( v4 ) /*0x1a2cc*/
{
*(_DWORD *)(a1 + 8) = 2; /*0x1a2ce*/
}
}
return result; /*0x1a2e9*/
}
// Function: RstRaidEntryFinalizeTransferEx @ 0x1a2f4 (0x32 bytes)
// Index: 741/906
__int64 __fastcall RstRaidEntryFinalizeTransferEx(__int64 a1, __int64 a2)
{
if ( *(_DWORD *)(a1 + 8) == 3 ) /*0x1a301*/
return RstRaidOpSetRetryState(a2); /*0x1a306*/
if ( *(_BYTE *)(a1 + 110) ) /*0x1a30d*/
RstHelper_54e8(a1, a2); /*0x1a313*/
return RstRaidEntryFinalizeTransfer(a2); /*0x1a320*/
}
// Function: RstRaidMapTransferEntry @ 0x1a328 (0x177 bytes)
// Index: 742/906
__int64 __fastcall RstRaidMapTransferEntry(__int64 a1, __int64 a2)
{
int n3; // eax
int v6; // ebx
unsigned int v7; // eax
unsigned __int16 v8; // bp
unsigned __int64 i; // r12
__int16 v10; // cx
unsigned __int64 i_1; // rbx
unsigned __int8 v12; // al
__int16 v13; // ax
unsigned __int8 v14; // [rsp+60h] [rbp+8h] BYREF
char v15; // [rsp+70h] [rbp+18h] BYREF
if ( *(_BYTE *)(a1 + 110) ) /*0x1a347*/
RstHelper_54e8(a1, a2); /*0x1a34d*/
n3 = *(_DWORD *)(a1 + 8); /*0x1a352*/
if ( n3 >= 0 ) /*0x1a358*/
{
if ( n3 <= 1 ) /*0x1a367*/
{
v13 = *(unsigned __int8 *)(a1 + 100); /*0x1a468*/
if ( ++*(_WORD *)(a1 + 108) == v13 ) /*0x1a475*/
*(_WORD *)(a1 + 108) = 0; /*0x1a477*/
}
else if ( n3 == 2 ) /*0x1a370*/
{
v6 = RstRaidMapTranslateAddress((unsigned __int16 *)a1, *(_QWORD *)(a2 + 704)); /*0x1a39a*/
v7 = RstHelper_525c(a1); /*0x1a39c*/
v8 = 0; /*0x1a3bf*/
for ( i = RstSizeToBlocks(a1, v6 + *(_DWORD *)(a2 + 712) / v7 + *(unsigned __int16 *)(a1 + 76)); /*0x1a3c6*/
v8 < *(unsigned __int8 *)(a1 + 100);
++v8 )
{
v10 = *(unsigned __int8 *)(a1 + 100); /*0x1a3d0*/
if ( ++*(_WORD *)(a1 + 108) == v10 ) /*0x1a3dd*/
*(_WORD *)(a1 + 108) = 0; /*0x1a3df*/
RstVtableDispatch34(a1, *(unsigned __int16 *)(a1 + 108), *(_QWORD *)(a2 + 704), (__int64)&v14, (__int64)&v15); /*0x1a401*/
i_1 = 0; /*0x1a406*/
if ( i ) /*0x1a40c*/
{
v12 = v14; /*0x1a40e*/
do /*0x1a44e*/
{
if ( *(_BYTE *)(a1 + 16 * (v12 + 7LL) + 8) || RstDeviceCheckOnline(*(_QWORD *)(a1 + 16 * (v12 + 7LL))) ) /*0x1a427*/
break; /*0x1a42f*/
v12 = *(_BYTE *)(a1 + 100) + v14; /*0x1a435*/
v14 = v12; /*0x1a438*/
if ( v12 >= *(_BYTE *)(a1 + 42) ) /*0x1a43f*/
{
v12 -= *(_BYTE *)(a1 + 42); /*0x1a441*/
v14 = v12; /*0x1a444*/
}
++i_1; /*0x1a448*/
}
while ( i_1 < i ); /*0x1a44e*/
}
if ( i_1 == i ) /*0x1a453*/
break; /*0x1a453*/
}
}
else if ( n3 == 3 ) /*0x1a375*/
{
return RstRaidOpSetRetryState(a2); /*0x1a383*/
}
}
return RstRaidStatusAssertAndDetermine(a2, *(_WORD *)(a1 + 108)); /*0x1a492*/
}
// Function: Assert_52 @ 0x1a4a0 (0xad bytes)
// Index: 743/906
__int64 __fastcall Assert_52(__int64 a1, __int64 a2)
{
__int64 v2; // r8
__int64 v4; // rdx
unsigned __int64 v5; // rcx
__int64 v6; // rbx
*(_DWORD *)(a1 + 76) = 0; /*0x1a4aa*/
*(_QWORD *)(a1 + 80) = 0; /*0x1a4ae*/
*(_QWORD *)(a1 + 88) = 0; /*0x1a4b3*/
*(_QWORD *)a1 = a2; /*0x1a4b8*/
v2 = *(_QWORD *)(a2 + 16); /*0x1a4bb*/
*(_QWORD *)(a1 + 8) = v2; /*0x1a4c2*/
if ( *(_DWORD *)(a2 + 12) ) /*0x1a4c6*/
v2 = *(_QWORD *)(a2 + 24); /*0x1a4cc*/
v4 = *(_QWORD *)(a1 + 8); /*0x1a4d0*/
*(_QWORD *)(a1 + 16) = v2; /*0x1a4d4*/
v5 = *(_QWORD *)(v2 + 32) + *(_QWORD *)(v2 + 56) * *(unsigned __int16 *)(v2 + 72); /*0x1a4e6*/
if ( *(_QWORD *)(v4 + 32) + *(_QWORD *)(v4 + 56) * (unsigned __int64)*(unsigned __int16 *)(v4 + 72) >= v5 ) /*0x1a4f6*/
v6 = *(_QWORD *)(v4 + 32) + *(_QWORD *)(v4 + 56) * *(unsigned __int16 *)(v4 + 72); /*0x1a511*/
else
v6 = *(_QWORD *)(v2 + 32) + *(_QWORD *)(v2 + 56) * *(unsigned __int16 *)(v2 + 72); /*0x1a502*/
if ( (unsigned __int8)RstDebugEnabled(v5, v4) && (v6 & 7) != 0 ) /*0x1a521*/
DebugAssert("DsMgr.cpp", 0x58u, "( dsRecPba & (U64)7 ) == 0"); /*0x1a536*/
*(_QWORD *)(a1 + 32) = v6; /*0x1a53b*/
return a1; /*0x1a547*/
}
// Function: RstRaidCollectActiveDisks @ 0x1a550 (0xc7 bytes)
// Index: 744/906
__int64 __fastcall RstRaidCollectActiveDisks(__int64 *Length, _BYTE *a2, __int64 a3)
{
__int64 result; // rax
unsigned __int8 i; // di
int n23; // ecx
__int64 v9; // rbp
unsigned __int8 v10; // cl
_UNKNOWN *retaddr; // [rsp+28h] [rbp+0h] BYREF
result = (__int64)&retaddr; /*0x1a550*/
for ( i = 0; i < *(_BYTE *)(a3 + 42); ++i ) /*0x1a575*/
{
n23 = 23; /*0x1a583*/
if ( i < 0x18u ) /*0x1a588*/
n23 = i; /*0x1a588*/
result = 2 * (n23 + 7LL); /*0x1a592*/
v9 = *(_QWORD *)(a3 + 16 * (n23 + 7LL)); /*0x1a595*/
if ( (*(_BYTE *)(v9 + 136) & 0x18) != 0 ) /*0x1a5a0*/
{
if ( *(_DWORD *)(a3 + 8) != 2 /*0x1a5cc*/
|| !RstRaidMemberCheckActive(a3, *(_QWORD *)(a3 + 16 * (n23 + 7LL)))
|| (*(_DWORD *)(v9 + 136) & 4) != 0
|| (result = *(_QWORD *)(a3 + 16), *(_DWORD *)(result + 12) == 1) )
{
v10 = 0; /*0x1a5ce*/
if ( *a2 ) /*0x1a5d0*/
{
while ( 1 ) /*0x1a5d4*/
{
result = v10; /*0x1a5d4*/
if ( Length[v10] == v9 ) /*0x1a5db*/
break; /*0x1a5db*/
if ( ++v10 >= *a2 ) /*0x1a5e1*/
goto LABEL_12; /*0x1a5e1*/
}
}
else
{
LABEL_12:
if ( *a2 >= 0x18u ) /*0x1a5e6*/
{
while ( 1 ) /*0x1a615*/
; /*0x1a615*/
}
result = (unsigned __int8)*a2; /*0x1a5e8*/
Length[result] = v9; /*0x1a5eb*/
++*a2; /*0x1a5ef*/
}
}
}
}
return result; /*0x1a60e*/
}
// Function: RstRaidMemberFindAndSetActive @ 0x1a618 (0x50 bytes)
// Index: 745/906
void __fastcall RstRaidMemberFindAndSetActive(__int64 a1, __int64 a2)
{
unsigned __int8 n23_1; // dl
int n23; // r8d
n23_1 = 0; /*0x1a621*/
if ( *(_BYTE *)(a1 + 42) ) /*0x1a626*/
{
while ( 1 ) /*0x1a631*/
{
n23 = 23; /*0x1a631*/
if ( n23_1 < 0x18u ) /*0x1a637*/
n23 = n23_1; /*0x1a637*/
if ( *(_QWORD *)(a1 + 16 * (n23 + 7LL)) == a2 ) /*0x1a649*/
break; /*0x1a649*/
if ( ++n23_1 >= *(_BYTE *)(a1 + 42) ) /*0x1a650*/
return; /*0x1a650*/
}
RstRaidSetMemberActive(a1, n23_1); /*0x1a654*/
(**(void (__fastcall ***)(__int64))a1)(a1); /*0x1a65f*/
}
}
// Function: RstRaidMemberNotifyChange @ 0x1a668 (0x52 bytes)
// Index: 746/906
__int64 __fastcall RstRaidMemberNotifyChange(_QWORD *a1)
{
__int64 v2; // rdx
__int64 v3; // rcx
__int64 (__fastcall ***v4)(_QWORD, __int64); // rcx
RstRaidMemberFindAndSetActive(a1[1]); /*0x1a67c*/
v3 = a1[2]; /*0x1a681*/
if ( a1[1] != v3 ) /*0x1a689*/
RstRaidMemberFindAndSetActive(v3); /*0x1a68e*/
LOBYTE(v2) = 1; /*0x1a696*/
v4 = *(__int64 (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(*(_QWORD *)(*a1 + 32LL) + 144LL) + 248LL); /*0x1a6a3*/
return (**v4)(v4, v2);
}
// Function: Assert_37 @ 0x1a6bc (0x100 bytes)
// Index: 747/906
void __fastcall Assert_37(__int64 *a1, __int64 a2)
{
int v4; // ebp
unsigned __int8 n23_3; // bl
__int64 v6; // r8
int n23_1; // edx
__int64 v8; // r9
int n23; // ecx
_QWORD *v10; // rax
__int64 v11; // rdx
int n23_2; // ecx
_QWORD *v13; // rax
v4 = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(*a1 + 32) + 144LL) + 248LL) + 28LL); /*0x1a6eb*/
n23_3 = 0; /*0x1a6f4*/
if ( RstDebugEnabled() && !a2 ) /*0x1a6fd*/
DebugAssert("DsMgr.cpp", 0x153u, "a_pDisk"); /*0x1a712*/
v6 = *a1; /*0x1a717*/
LOBYTE(n23_1) = 0; /*0x1a71a*/
v8 = *(_QWORD *)(*a1 + 16); /*0x1a722*/
if ( *(_BYTE *)(v8 + 42) ) /*0x1a726*/
{
while ( 1 ) /*0x1a732*/
{
n23 = 23; /*0x1a732*/
if ( (unsigned __int8)n23_1 < 0x18u ) /*0x1a735*/
n23 = (unsigned __int8)n23_1; /*0x1a735*/
v10 = (_QWORD *)(v8 + 16 * (n23 + 7LL)); /*0x1a743*/
if ( v10 ) /*0x1a746*/
{
if ( *v10 == a2 ) /*0x1a74b*/
break; /*0x1a74b*/
}
LOBYTE(n23_1) = n23_1 + 1; /*0x1a74d*/
if ( (unsigned __int8)n23_1 >= *(_BYTE *)(v8 + 42) ) /*0x1a753*/
goto LABEL_10; /*0x1a753*/
}
n23_1 = (unsigned __int8)n23_1; /*0x1a788*/
}
else
{
LABEL_10:
v11 = *(_QWORD *)(v6 + 24); /*0x1a755*/
if ( !*(_BYTE *)(v11 + 42) ) /*0x1a75c*/
return; /*0x1a75c*/
while ( 1 ) /*0x1a764*/
{
n23_2 = 23; /*0x1a764*/
if ( n23_3 < 0x18u ) /*0x1a767*/
n23_2 = n23_3; /*0x1a767*/
v13 = (_QWORD *)(v11 + 16 * (n23_2 + 7LL)); /*0x1a775*/
if ( v13 ) /*0x1a778*/
{
if ( *v13 == a2 ) /*0x1a77d*/
break; /*0x1a77d*/
}
if ( ++n23_3 >= *(_BYTE *)(v11 + 42) ) /*0x1a784*/
return; /*0x1a784*/
}
n23_1 = n23_3; /*0x1a78d*/
}
Assert_15(*(CHAR16 ***)(*(_QWORD *)(*(_QWORD *)(v6 + 32) + 136LL) + 72LL), n23_1, v4); /*0x1a7a2*/
}
// Function: Assert_126 @ 0x1a7bc (0x62 bytes)
// Index: 748/906
char Assert_126__int64 a1, __int64 a2, __int64 Length)
{
Assert_89(Source_16, Length, 40, a2, 4096, *(_DWORD *)(a1 + 104)); /*0x1a7eb*/
if ( !*(_WORD *)(Source_16 + 2720) ) /*0x1a7f7*/
return 1; /*0x1a811*/
RstRaidMemberNotifyChange((_QWORD *)a1); /*0x1a808*/
return 0; /*0x1a818*/
}
// Function: Assert_61 @ 0x1a820 (0x80 bytes)
// Index: 749/906
void __fastcall Assert_61(_QWORD *a1)
{
__int64 v2; // rdi
__int64 v3; // rcx
CHAR16 *Destination; // rax
v2 = *(_QWORD *)(*(_QWORD *)(*a1 + 32LL) + 136LL); /*0x1a834*/
if ( v2 && (v3 = *(_QWORD *)(v2 + 72)) != 0 && RstDeviceDerefPtr(v3) ) /*0x1a849*/
{
Destination = (CHAR16 *)RstDeviceDerefPtr(*(_QWORD *)(v2 + 72)); /*0x1a857*/
a1[14] = (unsigned int)RstHelper_1d9c(Destination, 1); /*0x1a869*/
}
else
{
if ( RstDebugEnabled() ) /*0x1a86f*/
DebugAssert("DsMgr.cpp", 0x18Au, "((BOOLEAN)(0==1))"); /*0x1a88b*/
a1[14] = 0; /*0x1a890*/
}
}
// Function: Assert_3 @ 0x1a8a0 (0x29a bytes)
// Index: 750/906
void __fastcall Assert_3(_QWORD *a1)
{
unsigned __int8 n2_1; // r14
__int64 v3; // rbp
__int64 v4; // rdi
unsigned int v5; // ebx
unsigned __int64 v6; // r12
char v7; // r15
unsigned __int64 v8; // r13
unsigned __int8 n2; // cl
int n2_2; // ecx
__int64 v11; // rdx
__int64 v12; // rdx
__int64 v13; // rcx
unsigned __int64 v14; // r8
unsigned __int64 v15; // rbx
unsigned __int64 v16; // rax
unsigned int v17; // ebx
unsigned __int64 v18; // rdi
__int64 v19; // rax
unsigned __int64 v20; // rdi
n2_1 = 0; /*0x1a8bf*/
v3 = *(_QWORD *)(*(_QWORD *)(*a1 + 32LL) + 136LL); /*0x1a8c9*/
if ( !v3 || !*(_QWORD *)(v3 + 8) ) /*0x1a8d5*/
{
if ( RstDebugEnabled() ) /*0x1a8db*/
DebugAssert("DsMgr.cpp", 0x195u, "((BOOLEAN)(0==1))"); /*0x1a8f8*/
a1[14] = 0; /*0x1a8fd*/
}
v4 = *(_QWORD *)(v3 + 8); /*0x1a901*/
if ( RstDebugEnabled() && !*(_DWORD *)(v4 + 280) ) /*0x1a91c*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x1a932*/
v5 = *(_DWORD *)(v4 + 280); /*0x1a937*/
if ( RstDebugEnabled() && !*(_DWORD *)(v4 + 280) ) /*0x1a947*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x1a95d*/
v6 = 0x1000 / v5 + ((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(v4 + 280); /*0x1a97b*/
if ( RstDebugEnabled() && !*(_DWORD *)(v4 + 280) ) /*0x1a988*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x1a99e*/
v7 = 0; /*0x1a9aa*/
v8 = 0x100000u / *(_DWORD *)(v4 + 280); /*0x1a9b3*/
while ( 1 ) /*0x1a9bc*/
{
n2 = *(_BYTE *)(v4 + 224); /*0x1a9bc*/
if ( n2 >= 2u ) /*0x1a9c1*/
n2 = 2; /*0x1a9c3*/
if ( n2_1 >= n2 ) /*0x1a9cb*/
break; /*0x1a9cb*/
n2_2 = 1; /*0x1a9d9*/
if ( n2_1 < 2u ) /*0x1a9de*/
n2_2 = n2_1; /*0x1a9de*/
v11 = *(_QWORD *)(v4 + 8LL * n2_2 + 232); /*0x1a9e4*/
if ( v11 != v3 ) /*0x1a9ef*/
{
v12 = *(_QWORD *)(v11 + 56); /*0x1a9f5*/
v13 = *(_QWORD *)(v12 + 48); /*0x1a9f9*/
if ( v13 ) /*0x1aa00*/
v14 = *(_QWORD *)(v13 + 8); /*0x1aa02*/
else
v14 = *(_QWORD *)(*(_QWORD *)(v12 + 40) + 8LL); /*0x1aa0c*/
v15 = *(_QWORD *)(*(_QWORD *)(v12 + 40) + 8LL); /*0x1aa14*/
if ( v15 >= v14 && v13 ) /*0x1aa20*/
v15 = *(_QWORD *)(v13 + 8); /*0x1aa22*/
if ( v15 > a1[4] ) /*0x1aa2a*/
{
v7 = 1; /*0x1aa2f*/
v16 = v15 - a1[4]; /*0x1aa32*/
if ( v16 >= v8 ) /*0x1aa39*/
{
a1[14] = v8; /*0x1aa71*/
}
else if ( v16 >= v6 ) /*0x1aa3e*/
{
a1[14] = v6; /*0x1aa6b*/
}
else
{
if ( RstDebugEnabled() ) /*0x1aa40*/
DebugAssert("DsMgr.cpp", 0x1ADu, "((BOOLEAN)(0==1))"); /*0x1aa5c*/
a1[14] = v15 - a1[4]; /*0x1aa65*/
}
}
}
++n2_1; /*0x1aa75*/
}
if ( !v7 ) /*0x1aa80*/
{
if ( RstDebugEnabled() && !*(_DWORD *)(v4 + 280) ) /*0x1aa8f*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x1aaab*/
v17 = *(_DWORD *)(v4 + 280); /*0x1aab0*/
v18 = RstJournalFindMinLba(v4); /*0x1aac0*/
v19 = a1[4]; /*0x1aad0*/
v20 = v18 - (((unsigned int)&loc_1FFFA + 6) / v17 + 161); /*0x1aad8*/
if ( v19 + v8 <= v20 ) /*0x1aade*/
{
a1[14] = v8; /*0x1ab19*/
}
else if ( v6 + v19 <= v20 ) /*0x1aae6*/
{
a1[14] = v6; /*0x1ab13*/
}
else
{
if ( RstDebugEnabled() ) /*0x1aae8*/
DebugAssert("DsMgr.cpp", 0x1C6u, "((BOOLEAN)(0==1))"); /*0x1ab04*/
a1[14] = v20 - a1[4]; /*0x1ab0d*/
}
}
}
// Function: RstHelper_ab3c @ 0x1ab3c (0xd6 bytes)
// Index: 751/906
__int64 RstHelper_ab3c_QWORD *a1, __int64 a2, __int64 Length, _BYTE *a4)
{
unsigned int v7; // eax
unsigned int v8; // edx
__int64 v9; // r12
__int64 v10; // rbp
__int64 v11; // rax
int v12; // ebx
__int64 v13; // rcx
unsigned int v14; // eax
unsigned int v15; // eax
__int64 v16; // rax
__int64 result; // rax
unsigned __int64 v18; // rdx
v7 = HiiLibReturnZero(Length); /*0x1ab60*/
v8 = 0x1000 % v7; /*0x1ab65*/
v9 = 0; /*0x1ab6f*/
v10 = 0x1000 / v7; /*0x1ab75*/
v11 = a1[13]; /*0x1ab77*/
v12 = *(_DWORD *)(v11 + 532); /*0x1ab7b*/
*(_DWORD *)(v11 + 532) = 0; /*0x1ab81*/
v14 = RstReturnAllOnes(v13, v8); /*0x1ab88*/
v15 = RstCrc32(v14, (unsigned int *)a1[13], 4096); /*0x1ab99*/
if ( v12 == (unsigned int)RstBitwiseNot(v15) ) /*0x1aba7*/
{
*a4 = 1; /*0x1abd2*/
v18 = a1[4] + a1[14]; /*0x1abdf*/
result = -1; /*0x1abe3*/
a1[16] = a2; /*0x1abee*/
if ( a2 + v10 + v10 <= v18 ) /*0x1abf5*/
return a2 + v10; /*0x1abf5*/
}
else
{
v16 = a1[4]; /*0x1aba9*/
if ( a2 == v16 ) /*0x1abb4*/
{
return 0; /*0x1abb6*/
}
else
{
if ( a2 + 1 + v10 <= (unsigned __int64)(v16 + a1[14]) ) /*0x1abc9*/
return a2 + 1; /*0x1abc9*/
return v9; /*0x1abcd*/
}
}
return result; /*0x1ac08*/
}
// Function: Assert_138 @ 0x1ac14 (0xe8 bytes)
// Index: 752/906
bool __fastcall Assert_138(_QWORD *a1, __int64 Length)
{
__int64 v2; // rbp
unsigned __int64 v4; // r12
_QWORD *v5; // rbx
__int64 Length_1; // r8
__int64 v7; // rsi
__int64 v8; // rdx
char v9; // di
__int64 v11; // rax
char v12; // [rsp+40h] [rbp+8h] BYREF
a1[17] = 0; /*0x1ac2c*/
v2 = a1[4]; /*0x1ac34*/
v4 = 0; /*0x1ac3b*/
v5 = a1; /*0x1ac3e*/
Length_1 = Length; /*0x1ac41*/
while ( 1 ) /*0x1acbe*/
{
v9 = Assert_126((__int64)a1, v2, Length_1); /*0x1acbe*/
if ( !v9 ) /*0x1acc3*/
return 0; /*0x1acc3*/
v7 = v2; /*0x1ac54*/
v12 = 0; /*0x1ac57*/
v2 = RstHelper_ab3c(v5, v2, Length, &v12); /*0x1ac61*/
if ( !v2 ) /*0x1ac67*/
break; /*0x1ac67*/
v8 = v5[13]; /*0x1ac6c*/
if ( *(_DWORD *)(v8 + 512) == *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(*v5 + 32LL) + 144LL) + 248LL) + 28LL) /*0x1ac97*/
&& *(_QWORD *)(v8 + 520) > v4 )
{
if ( v12 ) /*0x1ac9e*/
{
v4 = *(_QWORD *)(v8 + 520); /*0x1aca0*/
v5[17] = v7; /*0x1aca3*/
}
}
if ( v2 == -1 ) /*0x1acae*/
return v9 != 0; /*0x1acae*/
Length_1 = Length; /*0x1acb0*/
a1 = v5; /*0x1acb3*/
}
v11 = v5[4]; /*0x1ace0*/
if ( v7 == v11 ) /*0x1ace7*/
{
v9 = 0; /*0x1ace9*/
v5[17] = v11; /*0x1acec*/
}
return v9 != 0; /*0x1acf6*/
}
// Function: RstHelper_acfc @ 0x1acfc (0xe1 bytes)
// Index: 753/906
__int64 __fastcall RstHelper_acfc(__int64 a1, int a2, __int64 a3, unsigned int n4, __int64 Length, unsigned int *i)
{
unsigned int v9; // r12d
unsigned int v10; // ebx
unsigned int n4_2; // r14d
unsigned int n4_1; // edi
v9 = RstReturnAllOnes(); /*0x1ad2e*/
v10 = 0; /*0x1ad36*/
n4_2 = HiiLibReturnZero(Length); /*0x1ad38*/
if ( !n4 ) /*0x1ad3d*/
return 1; /*0x1ad3f*/
while ( 1 ) /*0x1ad5b*/
{
n4_1 = n4_2; /*0x1ad5b*/
if ( n4 < n4_2 ) /*0x1ad67*/
n4_1 = n4; /*0x1ad67*/
Assert_89(Source_16, Length, 40, a3, n4_1, (unsigned int)i); /*0x1ad72*/
if ( *(_WORD *)(Source_16 + 2720) ) /*0x1ad7e*/
break; /*0x1ad7e*/
v9 = RstCrc32(v9, i, n4_1); /*0x1ad98*/
a3 += n4_1 / n4_2; /*0x1ada2*/
n4 -= n4_1; /*0x1ada5*/
if ( !n4 ) /*0x1ada7*/
{
LOBYTE(v10) = (unsigned int)RstBitwiseNot(v9) == a2; /*0x1adb4*/
return v10; /*0x1adb9*/
}
}
return 2; /*0x1adcf*/
}
// Function: RstConfigBlockSetActive @ 0x1ade0 (0x3f bytes)
// Index: 754/906
__int64 __fastcall RstConfigBlockSetActive(__int64 *a1, __int64 a2)
{
__int64 v2; // rax
__int64 (__fastcall ***v3)(_QWORD, __int64); // rcx
v2 = *a1; /*0x1ade0*/
if ( (_BYTE)a2 ) /*0x1ade8*/
{
*(_BYTE *)(v2 + 82) = 0; /*0x1adea*/
}
else
{
*(_BYTE *)(v2 + 82) = 1; /*0x1adf0*/
*(_BYTE *)(*(_QWORD *)(*a1 + 32) + 187LL) = 0; /*0x1adfb*/
}
LOBYTE(a2) = 1; /*0x1ae05*/
v3 = *(__int64 (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(*(_QWORD *)(*a1 + 32) + 144LL) + 248LL); /*0x1ae12*/
return (**v3)(v3, a2);
}
// Function: Assert_22 @ 0x1ae20 (0x184 bytes)
// Index: 755/906
__int64 __fastcall Assert_22(_QWORD *a1, __int64 a2)
{
unsigned int v4; // ebp
unsigned __int64 v5; // rdi
_BYTE *i_1; // rsi
unsigned int v7; // eax
int v8; // eax
unsigned int v9; // ebx
__int64 v10; // rdi
_BYTE *i; // [rsp+30h] [rbp-28h] BYREF
char v13; // [rsp+38h] [rbp-20h]
__int16 n16; // [rsp+3Ah] [rbp-1Eh]
Assert_3(a1); /*0x1ae43*/
i = 0; /*0x1ae50*/
v13 = 0; /*0x1ae69*/
v4 = 0x1000 / (unsigned int)HiiLibReturnZero(a2); /*0x1ae73*/
v5 = a1[14] / (unsigned __int64)v4; /*0x1ae7f*/
n16 = 16; /*0x1ae87*/
RstBufferPoolRealloc((__int64)&i, 0); /*0x1ae8c*/
i_1 = i; /*0x1ae91*/
if ( RstDebugEnabled() && !i_1 ) /*0x1aea2*/
DebugAssert("DsMgr.cpp", 0x12Au, "pplHdr"); /*0x1aeb7*/
MemZero(i_1, 0, 4096); /*0x1aec4*/
MemZero(i_1, 255, 512); /*0x1aed7*/
*((_DWORD *)i_1 + 128) = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(*a1 + 32LL) + 144LL) + 248LL) + 28LL); /*0x1aef5*/
v7 = RstReturnAllOnes(); /*0x1aefb*/
v8 = RstCrc32(v7, (unsigned int *)i_1, 4096); /*0x1af08*/
*((_DWORD *)i_1 + 133) = RstBitwiseNot(v8); /*0x1af1a*/
Assert_89(Source_16, a2, 42, a1[4], 4096, (unsigned int)i_1); /*0x1af35*/
MemZero(i_1, 0, 4096); /*0x1af42*/
if ( (unsigned int)v5 > 1 ) /*0x1af4a*/
{
v9 = v4; /*0x1af4c*/
v10 = (unsigned int)(v5 - 1); /*0x1af4e*/
do /*0x1af79*/
{
Assert_89(Source_16, a2, 42, a1[4] + v9, 4096, (unsigned int)i_1); /*0x1af6e*/
v9 += v4; /*0x1af73*/
--v10; /*0x1af75*/
}
while ( v10 ); /*0x1af79*/
}
return RstBufferPoolLock((__int64)i); /*0x1af99*/
}
// Function: RstAssertFormat @ 0x1afa4 (0x8f4 bytes)
// Index: 756/906
char __fastcall RstAssertFormat(__int64 *a1, __int64 a2, __int64 Length, __int64 a4)
{
__int64 Length_1; // rbx
char v8; // r12
unsigned int v9; // eax
__int64 v10; // r14
__int64 v11; // rcx
char v12; // al
unsigned int *i_1; // rsi
char v14; // r15
unsigned int v15; // eax
unsigned int *p_n4; // r13
int n2; // eax
unsigned __int64 Source__1; // rbx
unsigned int v19; // r8d
__int64 v20; // rcx
__int64 v21; // r12
unsigned __int64 Source__2; // rax
__int64 Source__4; // rbx
__int64 Source__13; // rax
__int64 Source__5; // r8
__int64 Source__16; // r9
__int64 v27; // rcx
bool v28; // zf
unsigned int n4; // eax
unsigned __int64 Source__14; // rbx
unsigned __int64 v31; // rbx
__int64 Source__15; // rax
unsigned __int64 v33; // rbx
unsigned int Source__8; // ebx
unsigned __int64 Source__11; // rbx
__int16 v36; // cx
int n23_1; // ecx
__int64 v38; // r12
char v39; // al
int n23_5; // ecx
__int64 Length_2; // rbx
__int64 v42; ... [11961 chars total]
// Function: Assert_96 @ 0x1b898 (0x82 bytes)
// Index: 757/906
__int64 Assert_96_QWORD *a1)
{
__int64 v1; // r8
__int64 result; // rax
__int64 *v4; // rbx
__int64 v5; // rdi
_BYTE v6[192]; // [rsp+20h] [rbp-C8h] BYREF
unsigned __int8 v7; // [rsp+F0h] [rbp+8h] BYREF
v1 = a1[1]; /*0x1b8ab*/
v7 = 0; /*0x1b8bb*/
RstRaidCollectActiveDisks((__int64)v6, &v7, v1); /*0x1b8bf*/
result = RstRaidCollectActiveDisks((__int64)v6, &v7, a1[2]); /*0x1b8d5*/
if ( v7 ) /*0x1b8e5*/
{
v4 = (__int64 *)v6; /*0x1b8e7*/
v5 = v7; /*0x1b8ec*/
do /*0x1b903*/
{
result = Assert_22(a1, *v4++); /*0x1b8f6*/
--v5; /*0x1b8ff*/
}
while ( v5 ); /*0x1b903*/
}
return result; /*0x1b915*/
}
// Function: Assert_80 @ 0x1b91c (0xfb bytes)
// Index: 758/906
char __fastcall Assert_80(__int64 a1, __int64 p_Destination, __int64 a3, __int64 Length)
{
__int64 v5; // rdx
char result; // al
unsigned int v9; // ebx
__int64 v10; // rdx
__int64 v11; // rax
char v12; // bl
__int64 v13[6]; // [rsp+30h] [rbp-38h] BYREF
v5 = *(_QWORD *)(a1 + 136); /*0x1b933*/
*(_QWORD *)(a1 + 120) = v5; /*0x1b940*/
if ( !v5 ) /*0x1b947*/
return 1; /*0x1b9ff*/
result = Assert_126(a1, v5, Length); /*0x1b950*/
if ( result ) /*0x1b957*/
{
RstBufferListInitExt((__int64)v13); /*0x1b962*/
v9 = RstGetFieldBlockSize(*(CHAR16 **)(a1 + 88)); /*0x1b973*/
v11 = Assert_62(p_Destination, v10); /*0x1b975*/
if ( RstPplRecoveryLogAddEntry((__int64)v13, Length, v11, v9, *(_QWORD *)(a1 + 144)) ) /*0x1b994*/
{
RstConfigStreamWriteNewline((__int64)v13); /*0x1b9a2*/
RstConfigStreamWriteFieldMeta((__int64)v13, *(CHAR16 **)(a1 + 88)); /*0x1b9b0*/
RstConfigStreamWriteBuffer((__int64)v13, *(_QWORD *)(a1 + 80)); /*0x1b9be*/
}
RstConfigStreamWriteField((__int64)v13, *(_DWORD *)(a1 + 76), *(_QWORD *)(a1 + 120), Length); /*0x1b9d2*/
v12 = RstAssertFormat((__int64 *)a1, (__int64)v13, Length, *(_QWORD *)(a1 + 104)); /*0x1b9f4*/
RstConfigStreamWriteArrayEntry((__int64)v13, *(_QWORD *)(a1 + 120)); /*0x1b9f6*/
return v12; /*0x1b9fb*/
}
return result; /*0x1ba12*/
}
// Function: RstAssertFormatEntry @ 0x1ba18 (0x56 bytes)
// Index: 759/906
char __fastcall RstAssertFormatEntry(__int64 *a1, __int64 a2, __int64 Length)
{
__int64 v3; // rdx
char result; // al
__int64 v7[7]; // [rsp+20h] [rbp-38h] BYREF
v3 = a1[17]; /*0x1ba22*/
a1[15] = v3; /*0x1ba2f*/
if ( !v3 ) /*0x1ba36*/
return 1; /*0x1ba61*/
result = Assert_126((__int64)a1, v3, Length); /*0x1ba38*/
if ( result ) /*0x1ba3f*/
{
RstBufferListInit((__int64)v7); /*0x1ba46*/
return RstAssertFormat(a1, (__int64)v7, Length, a1[13]); /*0x1ba5a*/
}
return result; /*0x1ba68*/
}
// Function: Assert_81 @ 0x1ba70 (0xed bytes)
// Index: 760/906
__int64 __fastcall Assert_81(__int64 a1)
{
__int64 v1; // r8
char v3; // di
__int64 v4; // rdx
unsigned __int8 v5; // si
char v6; // bp
__int64 Length_1; // r12
__int64 v9[6]; // [rsp+20h] [rbp-108h] BYREF
__int64 Length[24]; // [rsp+50h] [rbp-D8h] BYREF
unsigned __int8 v11; // [rsp+130h] [rbp+8h] BYREF
v1 = *(_QWORD *)(a1 + 8); /*0x1ba86*/
v3 = 0; /*0x1ba96*/
v11 = 0; /*0x1ba99*/
RstRaidCollectActiveDisks((__int64)Length, &v11, v1); /*0x1ba9d*/
RstRaidCollectActiveDisks((__int64)Length, &v11, *(_QWORD *)(a1 + 16)); /*0x1bab3*/
RstBufferListInit((__int64)v9); /*0x1babd*/
v5 = 0; /*0x1bac2*/
*(_BYTE *)(a1 + 96) = 0; /*0x1bac5*/
v6 = 1; /*0x1bac9*/
if ( !v11 ) /*0x1bad4*/
goto LABEL_11; /*0x1bad4*/
while ( 1 ) /*0x1bad9*/
{
Assert_3((_QWORD *)a1); /*0x1bad9*/
Length_1 = Length[v5]; /*0x1bae5*/
if ( Assert_138((_QWORD *)a1, Length_1) ) /*0x1baed*/
{
v3 = RstAssertFormatEntry((__int64 *)a1, (__int64)v9, Length_1); /*0x1bb18*/
if ( !v3 ) /*0x1bb1d*/
goto LABEL_9; /*0x1bb1d*/
goto LABEL_6; /*0x1bb1d*/
}
if ( *(_QWORD *)(a1 + 136) != *(_QWORD *)(a1 + 32) ) /*0x1bb01*/
break; /*0x1bb01*/
v6 = 0; /*0x1bb03*/
LABEL_6:
if ( ++v5 >= v11 ) /*0x1bb2a*/
goto LABEL_9; /*0x1bb2a*/
}
v3 = 0; /*0x1bb2e*/
LABEL_9:
if ( v6 ) /*0x1bb34*/
{
LABEL_11:
LOBYTE(v4) = v3; /*0x1bb3a*/
return RstConfigBlockSetActive((__int64 *)a1, v4); /*0x1bb3a*/
}
v4 = 0; /*0x1bb36*/
return RstConfigBlockSetActive((__int64 *)a1, v4); /*0x1bb55*/
}
// Function: Assert_32 @ 0x1bb60 (0x124 bytes)
// Index: 761/906
char __fastcall Assert_32(__int64 *a1, CHAR16 **p_Destination, __int64 a3)
{
__int64 Length; // r12
CHAR16 **v8; // rdi
__int64 v9; // rdx
__int64 v10; // rax
__int64 v11; // rcx
__int64 v12; // rdi
char v13; // bp
Length = *(_QWORD *)(a1[11] + 88); /*0x1bb82*/
if ( !Length ) /*0x1bb8c*/
return 0; /*0x1bb8e*/
if ( RstDebugEnabled() && !p_Destination ) /*0x1bba1*/
DebugAssert("DsMgr.cpp", 0x2B2u, "a_pJdPplMpbMgr"); /*0x1bbb6*/
v8 = RstBufferAdvancePtr(p_Destination); /*0x1bbc3*/
if ( RstDebugEnabled() ) /*0x1bbc6*/
{
if ( !v8 ) /*0x1bbd2*/
DebugAssert("DsMgr.cpp", 0x2B4u, "pJdPplMpb"); /*0x1bbe7*/
}
v10 = Assert_65(p_Destination, v9); /*0x1bbef*/
*((_DWORD *)a1 + 19) = 0; /*0x1bbf4*/
v11 = *a1; /*0x1bbf8*/
a1[4] = v10; /*0x1bbfb*/
v12 = v10; /*0x1bc03*/
v13 = 1; /*0x1bc0a*/
if ( *(_BYTE *)(*(_QWORD *)(v11 + 24) + 42LL) ) /*0x1bc06*/
{
do /*0x1bc66*/
{
v12 += a1[14]; /*0x1bc0f*/
if ( Assert_138(a1, Length) ) /*0x1bc19*/
{
if ( !Assert_80((__int64)a1, (__int64)p_Destination, a3, Length) ) /*0x1bc35*/
return 0; /*0x1bc35*/
}
else
{
if ( a1[17] != a1[4] ) /*0x1bc48*/
return 0; /*0x1bc48*/
v13 = 0; /*0x1bc4e*/
}
++*((_DWORD *)a1 + 19); /*0x1bc51*/
a1[4] = v12; /*0x1bc54*/
}
while ( *((_DWORD *)a1 + 19) < (unsigned int)*(unsigned __int8 *)(*(_QWORD *)(*a1 + 24) + 42LL) ); /*0x1bc66*/
}
return v13; /*0x1bc7a*/
}
// Function: Assert_98 @ 0x1bc84 (0x7b bytes)
// Index: 762/906
CHAR16 *__fastcall Assert_98(__int64 *a1)
{
__int64 v2; // rdx
CHAR16 **p_Destination; // rbx
CHAR16 *result; // rax
__int64 v5; // rdx
char v6; // bl
__int64 v7[7]; // [rsp+20h] [rbp-38h] BYREF
Assert_61(a1); /*0x1bc91*/
v2 = *(_QWORD *)(*(_QWORD *)(*a1 + 32) + 136LL); /*0x1bc9d*/
p_Destination = *(CHAR16 ***)(v2 + 72); /*0x1bca4*/
if ( p_Destination ) /*0x1bcab*/
result = (CHAR16 *)RstDeviceDerefPtr(*(_QWORD *)(v2 + 72)); /*0x1bcb0*/
else
result = 0; /*0x1bcb7*/
a1[11] = (__int64)result; /*0x1bcb9*/
if ( result ) /*0x1bcc0*/
{
RstBufferListInitExt((__int64)v7); /*0x1bcc7*/
LOBYTE(v5) = Assert_32(a1, p_Destination, (__int64)v7); /*0x1bcdf*/
v6 = v5; /*0x1bce1*/
RstConfigBlockSetActive(a1, v5); /*0x1bce3*/
return RstConfigStreamWriteBooleanEntry((__int64)v7, v6); /*0x1bcef*/
}
return result; /*0x1bcf9*/
}
// Function: Assert_34 @ 0x1bd00 (0x109 bytes)
// Index: 763/906
__int64 __fastcall Assert_34(__int64 *a1)
{
__int64 v1; // rax
__int64 v3; // rax
__int64 v4; // rcx
int v5; // eax
int v6; // eax
int v7; // eax
int v8; // eax
int v9; // eax
__int64 v11; // [rsp+20h] [rbp-18h] BYREF
char v12; // [rsp+28h] [rbp-10h]
__int16 n16; // [rsp+2Ah] [rbp-Eh]
v1 = a1[4]; /*0x1bd0a*/
v11 = 0; /*0x1bd0e*/
a1[15] = v1; /*0x1bd17*/
v12 = 0; /*0x1bd27*/
n16 = 16; /*0x1bd2c*/
RstBufferPoolRealloc((__int64)&v11, 0); /*0x1bd31*/
if ( RstDebugEnabled() && !v11 ) /*0x1bd45*/
DebugAssert("DsMgr.cpp", 0x74u, "framebuf.ptr()"); /*0x1bd5a*/
v3 = v11; /*0x1bd5f*/
v4 = a1[1]; /*0x1bd64*/
a1[13] = v11; /*0x1bd6d*/
a1[18] = v3 + 4096; /*0x1bd77*/
if ( *(_WORD *)(v4 + 40) <= 1u && *(_WORD *)(a1[2] + 40) <= 1u /*0x1bd9c*/
|| *(_DWORD *)(v4 + 8) == 3
|| *(_DWORD *)(a1[2] + 8) == 3 )
{
return RstBufferPoolLock(v11); /*0x1bd9c*/
}
v5 = RstDevicePathGetNameFromConfig(*a1); /*0x1bda1*/
if ( v5 ) /*0x1bda8*/
{
v6 = v5 - 1; /*0x1bdaa*/
if ( v6 ) /*0x1bdac*/
{
v7 = v6 - 1; /*0x1bdae*/
if ( !v7 ) /*0x1bdb0*/
goto LABEL_15; /*0x1bdb0*/
v8 = v7 - 1; /*0x1bdb2*/
if ( v8 ) /*0x1bdb4*/
{
v9 = v8 - 1; /*0x1bdb6*/
if ( v9 ) /*0x1bdb8*/
{
if ( v9 != 1 ) /*0x1bdbc*/
{
*(_BYTE *)(*(_QWORD *)(*a1 + 32) + 187LL) = 0; /*0x1bdc5*/
return RstBufferPoolLock(v11); /*0x1bdcc*/
}
goto LABEL_16; /*0x1bdbc*/
}
LABEL_15:
Assert_98(a1); /*0x1bdce*/
return RstBufferPoolLock(v11); /*0x1bdd6*/
}
}
LABEL_18:
Assert_81((__int64)a1); /*0x1bdec*/
return RstBufferPoolLock(v11); /*0x1bdef*/
}
LABEL_16:
if ( *(_DWORD *)(a1[1] + 8) == 2 || *(_DWORD *)(a1[2] + 8) == 2 ) /*0x1bdea*/
goto LABEL_18; /*0x1bdea*/
return RstBufferPoolLock(v11); /*0x1be03*/
}
// Function: RstDeviceCheckCapacityNonZero @ 0x1be0c (0x65 bytes)
// Index: 764/906
char __fastcall RstDeviceCheckCapacityNonZero(_DWORD *a1, __int64 a2)
{
unsigned __int8 n23_1; // r9
int n23; // r8d
__int64 v4; // r8
n23_1 = 0; /*0x1be0f*/
if ( *(_BYTE *)(a2 + 42) ) /*0x1be12*/
{
while ( 1 ) /*0x1be1c*/
{
n23 = 23; /*0x1be1c*/
if ( n23_1 < 0x18u ) /*0x1be26*/
n23 = n23_1; /*0x1be26*/
v4 = *(_QWORD *)(a2 + 16 * (n23 + 7LL)); /*0x1be34*/
if ( (*(_DWORD *)(v4 + 136) & 0x10) != 0 && (*(_QWORD *)(v4 + 88) & 0xFFFFFFFF00000000uLL) != 0 ) /*0x1be54*/
return 0; /*0x1be6e*/
if ( ++n23_1 >= *(_BYTE *)(a2 + 42) ) /*0x1be5d*/
goto LABEL_7; /*0x1be5d*/
}
}
else
{
LABEL_7:
a1[13] = 0; /*0x1be5f*/
a1[14] = 0; /*0x1be63*/
a1[12] = 0; /*0x1be67*/
return 1; /*0x1be6b*/
}
}
// Function: Assert_13 @ 0x1be74 (0x1d0 bytes)
// Index: 765/906
__int64 __fastcall Assert_13(_DWORD *a1, __int64 a2)
{
_DWORD *v2; // rdi
int v4; // eax
int v5; // r12d
__int64 v6; // r15
__int64 v7; // rsi
int v8; // r14d
__int64 v9; // rbp
unsigned __int8 n23_1; // di
__int16 v11; // r13
int n23; // ecx
__int64 v13; // rbx
int v14; // eax
bool v15; // zf
__int64 v17; // [rsp+30h] [rbp-48h] BYREF
char v18; // [rsp+38h] [rbp-40h]
__int16 v19; // [rsp+3Ah] [rbp-3Eh]
int v21; // [rsp+88h] [rbp+10h]
unsigned int v22; // [rsp+90h] [rbp+18h]
v2 = a1; /*0x1be91*/
v17 = 0; /*0x1be9b*/
v18 = 0; /*0x1be9f*/
v19 = 1; /*0x1bea9*/
RstBufferPoolRealloc((__int64)&v17, 0); /*0x1beae*/
if ( RstDebugEnabled() && !v17 ) /*0x1bec2*/
DebugAssert("MigrRecord.cpp", 0x5Fu, "sbuf.ptr()"); /*0x1bed6*/
v22 = v17; /*0x1bee4*/
v4 = HiiLibReturnZero(*(_QWORD *)(a2 + 32)); /*0x1beec*/
v5 = v4 * v2[5]; /*0x1befe*/
v6 = *(_QWORD *)(a2 + 16); /*0x1bf02*/
v7 = (unsigned int)v2[6] + ((unsigned __int64)(unsigned int)v2[13] << 32); /*0x1bf0e*/
v8 = v4; /*0x1bf14*/
v9 = (unsigned int)v2[7] + ((unsigned __int64)(unsigned int)v2[14] << 32); /*0x1bf17*/
v21 = v5; /*0x1bf1a*/
if ( v5 ) /*0x1bf25*/
{
do /*0x1bff4*/
{
n23_1 = 0; /*0x1bf2b*/
v11 = *(unsigned __int8 *)(v6 + 42); /*0x1bf2e*/
if ( *(_BYTE *)(v6 + 42) ) /*0x1bf2e*/
{
do /*0x1bfcc*/
{
n23 = 23; /*0x1bf4b*/
if ( n23_1 < 0x18u ) /*0x1bf54*/
n23 = n23_1; /*0x1bf54*/
v13 = *(_QWORD *)(v6 + 16 * (n23 + 7LL)); /*0x1bf78*/
Assert_89(Source_16, v13, 40, v7, v8, v22); /*0x1bf7f*/
RstRaidMemberSetActiveOrRemove(v6, n23_1); /*0x1bf8a*/
Assert_89(Source_16, v13, 42, v9, v8, v22); /*0x1bfa9*/
RstRaidMemberSetActiveOrRemove(v6, n23_1); /*0x1bfb4*/
--v11; /*0x1bfc1*/
++n23_1; /*0x1bfc5*/
}
while ( v11 ); /*0x1bfcc*/
v5 = v21; /*0x1bfd2*/
}
v14 = 1; /*0x1bfda*/
++v7; /*0x1bfdf*/
++v9; /*0x1bfe2*/
v5 -= v8; /*0x1bfe5*/
v21 = v5; /*0x1bfe8*/
}
while ( v5 ); /*0x1bff4*/
v2 = a1; /*0x1bffa*/
}
else
{
v14 = 1; /*0x1c004*/
}
if ( v2[3] ) /*0x1c009*/
{
v15 = v2[1]++ == -1; /*0x1c00f*/
}
else
{
v14 = -1; /*0x1c014*/
v15 = --v2[1] == -1; /*0x1c01a*/
}
if ( v15 ) /*0x1c01d*/
v2[12] += v14; /*0x1c01f*/
return RstBufferPoolLock(v17); /*0x1c034*/
}
// Function: RstBufferCombineLowHigh @ 0x1c044 (0xd bytes)
// Index: 766/906
unsigned __int64 __fastcall RstBufferCombineLowHigh(unsigned int *a1)
{
return *a1 + ((unsigned __int64)a1[4] << 32); /*0x1c050*/
}
// Function: RstConfigBlockGetDataOffset @ 0x1c054 (0x1c bytes)
// Index: 767/906
__int64 __fastcall RstConfigBlockGetDataOffset(__int64 a1, char a2)
{
__int64 result; // rax
result = a1 + 4LL * *(unsigned __int8 *)(a1 + 48) + 80; /*0x1c058*/
if ( a2 || *(_BYTE *)(a1 + 8) ) /*0x1c061*/
result += 4LL * *(unsigned __int8 *)(a1 + 4LL * *(unsigned __int8 *)(a1 + 48) + 96) + 48; /*0x1c06a*/
return result; /*0x1c06f*/
}
// Function: RstConfigEntryDeserialize @ 0x1c070 (0x9b bytes)
// Index: 768/906
char __fastcall RstConfigEntryDeserialize(__int64 a1, __int64 a2, char a3)
{
__int64 v6; // rcx
char result; // al
*(_BYTE *)(a1 + 8) = *(_BYTE *)(a2 + 8); /*0x1c08d*/
*(_BYTE *)(a1 + 9) = *(_BYTE *)(a2 + 12); /*0x1c096*/
*(_BYTE *)(a1 + 10) = *(_BYTE *)(a2 + 16); /*0x1c09c*/
*(_DWORD *)a1 = *(_DWORD *)(a2 + 24); /*0x1c0a2*/
v6 = a1 + 32; /*0x1c0a8*/
*(_DWORD *)(v6 - 16) = HIDWORD(*(_QWORD *)(a2 + 24)); /*0x1c0b0*/
*(_DWORD *)(v6 - 28) = *(_DWORD *)(a2 + 32); /*0x1c0b6*/
*(_WORD *)(v6 - 20) = *(_WORD *)(a2 + 36); /*0x1c0bd*/
*(_WORD *)(v6 - 18) = *(_WORD *)(a2 + 38); /*0x1c0c5*/
*(_QWORD *)(v6 - 12) = 0; /*0x1c0c9*/
*(_DWORD *)(v6 - 4) = 0; /*0x1c0ce*/
result = RstConfigEntrySerialize(v6, *(_QWORD *)(a2 + 40)); /*0x1c0d6*/
if ( a3 || *(_BYTE *)(a1 + 8) ) /*0x1c0df*/
return RstConfigEntrySerialize(a1 + 4LL * *(unsigned __int8 *)(a1 + 48) + 80, *(_QWORD *)(a2 + 48)); /*0x1c0f1*/
return result; /*0x1c105*/
}
// Function: RstSplit64To32 @ 0x1c10c (0xa bytes)
// Index: 769/906
void __fastcall RstSplit64To32(_DWORD *a1, __int64 a2)
{
*a1 = a2; /*0x1c10c*/
a1[4] = HIDWORD(a2); /*0x1c112*/
}
// Function: RstConfigArrayAllocPool @ 0x1c118 (0x2c bytes)
// Index: 770/906
__int64 __fastcall RstConfigArrayAllocPool(__int64 a1)
{
*(_WORD *)(a1 + 1168) = 0; /*0x1c123*/
*(_QWORD *)(a1 + 1160) = RstMemPoolAlloc(6912); /*0x1c134*/
return a1; /*0x1c13e*/
}
// Function: RstBufferZeroExt @ 0x1c144 (0x18 bytes)
// Index: 771/906
__int64 __fastcall RstBufferZeroExt(_WORD *a1)
{
a1[576] = 0; /*0x1c146*/
a1[585] = 0; /*0x1c14d*/
a1[584] = 0; /*0x1c154*/
return 0; /*0x1c15b*/
}
// Function: RstConfigArrayUpdateSequenceCounters @ 0x1c15c (0x3d bytes)
// Index: 772/906
__int64 __fastcall RstConfigArrayUpdateSequenceCounters(__int64 a1)
{
unsigned __int16 i; // r8
__int64 result; // rax
for ( i = 0; /*0x1c162*/
i < *(_WORD *)(a1 + 1376);
*(_DWORD *)(*(_QWORD *)(a1 + 8 * result + 1176) + 28LL) = (__int16)(*(_WORD *)(a1 + 1170) - 1) )
{
result = i++; /*0x1c17a*/
}
return result; /*0x1c197*/
}
// Function: RstConfigArrayFindOrInsertEntry @ 0x1c19c (0x41 bytes)
// Index: 773/906
__int64 __fastcall RstConfigArrayFindOrInsertEntry(__int64 a1, __int64 a2)
{
__int16 v2; // r9
unsigned __int16 v3; // r8
__int64 result; // rax
v2 = *(_WORD *)(a1 + 1376); /*0x1c19c*/
v3 = 0; /*0x1c1a4*/
if ( v2 ) /*0x1c1ab*/
{
while ( 1 ) /*0x1c1ad*/
{
result = v3; /*0x1c1ad*/
if ( *(_QWORD *)(a1 + 8LL * v3 + 1176) == a2 ) /*0x1c1b9*/
break; /*0x1c1b9*/
if ( ++v3 >= *(_WORD *)(a1 + 1376) ) /*0x1c1c7*/
goto LABEL_4; /*0x1c1c7*/
}
}
else
{
LABEL_4:
*(_QWORD *)(a1 + 8LL * v2 + 1176) = a2; /*0x1c1c9*/
++*(_WORD *)(a1 + 1376); /*0x1c1d5*/
return v2; /*0x1c1c9*/
}
return result; /*0x1c1dc*/
}
// Function: RstConfigDeviceListAdd @ 0x1c1e0 (0x8e bytes)
// Index: 774/906
__int64 __fastcall RstConfigDeviceListAdd(__int64 a1, const CHAR16 *Source, __int16 a3)
{
__int16 n144; // ax
__int64 v6; // rcx
__int64 result; // rax
n144 = *(_WORD *)(a1 + 1168); /*0x1c1ea*/
if ( n144 >= 144 ) /*0x1c1ff*/
return 0; /*0x1c261*/
StrnCpy((CHAR16 *)(*(_QWORD *)(a1 + 1160) + 48LL * n144), Source, 0x30u); /*0x1c21a*/
*(_DWORD *)(*(_QWORD *)(a1 + 1160) + 48LL * *(__int16 *)(a1 + 1168) + 28) = a3; /*0x1c239*/
v6 = *(__int16 *)(a1 + 1168); /*0x1c23e*/
result = *(_QWORD *)(a1 + 1160) + 48 * v6; /*0x1c24e*/
*(_WORD *)(a1 + 1168) = v6 + 1; /*0x1c258*/
return result; /*0x1c268*/
}
// Function: RstConfigDeviceListFind @ 0x1c270 (0x89 bytes)
// Index: 775/906
__int64 __fastcall RstConfigDeviceListFind(__int64 a1, _BYTE *a2)
{
bool v4; // cf
unsigned __int16 v5; // bx
v4 = *(_WORD *)(a1 + 1168) != 0; /*0x1c28c*/
v5 = 0; /*0x1c293*/
while ( v4 ) /*0x1c296*/
{
if ( a2 && !StrnCpy16(a2, (_BYTE *)(*(_QWORD *)(a1 + 1160) + 48LL * v5), 16) ) /*0x1c2c0*/
return *(_QWORD *)(a1 + 1160) + 48LL * v5; /*0x1c2e0*/
v4 = ++v5 < *(_WORD *)(a1 + 1168); /*0x1c2c5*/
}
return 0; /*0x1c2f3*/
}
// Function: RstDeviceUpdateConfig @ 0x1c2fc (0x324 bytes)
// Index: 776/906
__int16 __fastcall RstDeviceUpdateConfig(__int64 a1, __int64 a2, __int64 a3)
{
__int64 v5; // rdi
__int64 v6; // rbp
__int16 v7; // r12
__int64 v8; // rcx
__int64 v9; // rax
unsigned __int16 v10; // r14
_BYTE *v11; // rbx
__int64 v12; // rbp
int v13; // ebx
int v14; // eax
int v15; // ecx
__int64 v16; // rax
unsigned __int16 v17; // bx
_BYTE *v18; // r14
int v19; // ebx
int v20; // eax
int v21; // ecx
unsigned int n513; // ebx
_QWORD *v23; // rax
v5 = a1; /*0x1c331*/
v6 = 0; /*0x1c334*/
v7 = 0; /*0x1c337*/
if ( *(__int16 *)(a1 + 1152) <= 0 ) /*0x1c33b*/
goto LABEL_4; /*0x1c33b*/
while ( *(_DWORD *)(a1 + 24LL * v7 + 12) != *(_DWORD *)(a3 + 40) ) /*0x1c34d*/
{
if ( ++v7 >= *(__int16 *)(a1 + 1152) ) /*0x1c35f*/
goto LABEL_4; /*0x1c35f*/
}
if ( *(_DWORD *)(a1 + 24LL * v7 + 8) == *(_DWORD *)(a3 + 32) ) /*0x1c455*/
goto LABEL_4; /*0x1c455*/
if ( *(_DWORD *)(a1 + 24LL * v7 + 16) < *(_DWORD *)(a3 + 44) )
{
v16 = RstConfigDeviceListFind(a1, (_BYTE *)(*(_QWORD *)(a1 + 24LL * v7) + 28LL)); /*0x1c470*/
if ( v16 ) /*0x1c478*/
RstDeviceSetFlags(*(_QWORD *)(v5 + 24LL * v7), *(_DWORD *)(v16 + 24) & 0x400004); /*0x1c48b*/
LABEL_4:
v8 = 3LL * v7; /*0x1c361*/
*(_QWORD *)(v5 + 8 * v8) = a2; /*0x1c369*/
*(_DWORD *)(v5 + 8 * v8 + 8) = *(_DWORD *)(a3 + 32); /*0x1c370*/
*(_DWORD *)(v5 + 8 * v8 + 12) = *(_DWORD *)(a3 + 40); /*0x1c377*/
*(_DWORD *)(v5 + 8 * v8 + 16) = *(_DWORD *)(a3 + 44); /*0x1c37e*/
LOWORD(v9) = *(_WORD *)(v5 + 1152); /*0x1c382*/
if ( v7 == (_WORD)v9 ) /*0x1c38d*/
{
LOWORD(v9) = v9 + 1; /*0x1c38f*/
*(_WORD *)(v5 + 1152) = v9; /*0x1c393*/
}
v10 = 0; /*0x1c39a*/
if ( *(_BYTE *)(a3 + 56) )
{
v11 = (_BYTE *)(a2 + 28); /*0x1c3a8*/
do
{
v12 = RstConfigDeviceListFind(v5, (_BYTE *)(a3 + 48LL * v10 + 216)); /*0x1c3ca*/
if ( v12 )
{
v13 = *(_DWORD *)(v12 + 24) | *(_DWORD *)(a3 + 48LL * v10 + 240); /*0x1c3dc*/
if ( ((*(_BYTE *)(v12 + 24) | *(_BYTE *)(a3 + 48LL * v10 + 240)) & 0x40) != 0 )
v13 &= ~((RstHelper_84d4(a3) ? 0x2000000 : 0) | 0x87);
if ( (v13 & 0x86) != 0 )
v13 &= ~((RstHelper_84d4(a3) ? 0x2000000 : 0) | 1);
v14 = RstHelper_84d4(a3) ? 46269063 : 12714631;
v15 = v13 & v14; /*0x1c438*/
v11 = (_BYTE *)(a2 + 28); /*0x1c43a*/
*(_DWORD *)(v12 + 24) = v15 | *(_DWORD *)(v12 + 24) & ~v14; /*0x1c445*/
}
else
{
if ( RstHelper_84d4(a3) ) /*0x1c52e*/
RstDeviceSetJournalMode(a3 + 48LL * v10 + 216, 1); /*0x1c53e*/
v12 = RstConfigDeviceListAdd(v5, (const CHAR16 *)(a3 + 48LL * v10 + 216), -1); /*0x1c552*/
}
if ( v11 && !StrnCpy16(v11, (_BYTE *)v12, 16) )
{
v19 = *(_DWORD *)(a3 + 48LL * v10 + 240); /*0x1c576*/
v20 = RstHelper_84d4(a3) ? 46269063 : 12714631;
v21 = v19 & v20; /*0x1c594*/
n513 = 513; /*0x1c596*/
*(_DWORD *)(v12 + 24) = v21 | *(_DWORD *)(v12 + 24) & ~v20; /*0x1c5a5*/
*(_DWORD *)(v12 + 28) = v7; /*0x1c5ac*/
if ( RstHelper_84d4(a3) ) /*0x1c5af*/
{
v23 = RstLinkedListFindData(*(_QWORD *)(Source_16 + 216), a2); /*0x1c5cb*/
RstJournalDeviceSetMode((__int64)v23, 1); /*0x1c5d5*/
n513 = 33554945; /*0x1c5da*/
}
RstDeviceUpdateFlagsMask(a2, *(_DWORD *)(v12 + 24), n513); /*0x1c5e8*/
v11 = (_BYTE *)(a2 + 28); /*0x1c5ed*/
}
LOWORD(v9) = *(unsigned __int8 *)(a3 + 56); /*0x1c5f1*/
++v10; /*0x1c5f5*/
}
while ( v10 < (unsigned __int16)v9 );
}
return v9; /*0x1c5fd*/
}
v17 = 0; /*0x1c495*/
if ( *(_BYTE *)(a3 + 56) ) /*0x1c499*/
{
v18 = (_BYTE *)(a2 + 28); /*0x1c49f*/
do /*0x1c4f1*/
{
v6 = a3 + 48LL * v17 + 216; /*0x1c4b2*/
if ( v18 && !StrnCpy16(v18, (_BYTE *)(a3 + 48LL * v17 + 216), 16) ) /*0x1c4cb*/
RstDeviceSetFlags(a2, *(_DWORD *)(a3 + 48LL * v17 + 240) & 0x400004); /*0x1c4e2*/
++v17; /*0x1c4eb*/
}
while ( v17 < *(unsigned __int8 *)(a3 + 56) ); /*0x1c4f1*/
v5 = a1; /*0x1c4f3*/
}
v9 = RstConfigDeviceListFind(v5, (_BYTE *)(a2 + 28)); /*0x1c4ff*/
if ( v9 && v6 ) /*0x1c510*/
{
*(_DWORD *)(v9 + 28) = v7; /*0x1c51a*/
*(_DWORD *)(v9 + 24) |= *(_DWORD *)(v6 + 24) & 2; /*0x1c523*/
}
return v9; /*0x1c612*/
}
// Function: RstCfgListFindNextOnlineEntry @ 0x1c620 (0xa5 bytes)
// Index: 777/906
__int64 __fastcall RstCfgListFindNextOnlineEntry(__int64 a1)
{
__int64 v2; // r8
__int64 v3; // rdi
__int64 v4; // r11
if ( *(_WORD *)(a1 + 1170) >= *(_WORD *)(a1 + 1152) ) /*0x1c640*/
return 0; /*0x1c6ae*/
while ( 1 ) /*0x1c647*/
{
v2 = *(__int16 *)(a1 + 1170); /*0x1c647*/
v3 = *(_QWORD *)(a1 + 24 * v2); /*0x1c65a*/
*(_WORD *)(a1 + 1170) = v2 + 1; /*0x1c65e*/
v4 = RstConfigDeviceListFind(a1, v3 + 28); /*0x1c66f*/
if ( (*(_DWORD *)(v3 + 136) & 0x40) == 0 /*0x1c69c*/
&& (*(_DWORD *)(v4 + 24) & 0x80000) != 0
&& *(__int16 *)(v4 + 28) == *(__int16 *)(a1 + 1170) - 1 )
{
break; /*0x1c69c*/
}
if ( *(_WORD *)(a1 + 1170) >= *(_WORD *)(a1 + 1152) ) /*0x1c6ac*/
return 0; /*0x1c6ac*/
}
return v3; /*0x1c6ba*/
}
// Function: RstBufferGetBlockOffset @ 0x1c6c8 (0xe bytes)
// Index: 778/906
unsigned __int64 __fastcall RstBufferGetBlockOffset(__int64 a1)
{
return *(unsigned int *)(a1 + 4) + ((unsigned __int64)*(unsigned int *)(a1 + 24) << 32); /*0x1c6d5*/
}
// Function: RstBufferGetBlockCount @ 0x1c6d8 (0xe bytes)
// Index: 779/906
unsigned __int64 __fastcall RstBufferGetBlockCount(__int64 a1)
{
return *(unsigned int *)(a1 + 8) + ((unsigned __int64)*(unsigned int *)(a1 + 28) << 32); /*0x1c6e5*/
}
// Function: RstBufferGetBlockIndex @ 0x1c6e8 (0xd bytes)
// Index: 780/906
unsigned __int64 __fastcall RstBufferGetBlockIndex(unsigned int *a1)
{
return *a1 + ((unsigned __int64)a1[5] << 32); /*0x1c6f4*/
}
// Function: RstConfigEntrySerialize @ 0x1c6f8 (0xe9 bytes)
// Index: 781/906
char __fastcall RstConfigEntrySerialize(__int64 a1, __int64 a2)
{
char n24; // al
__int16 n23_1; // r8
__int64 n23_2; // rax
int n23; // ecx
*(_BYTE *)(a1 + 14) = *(_BYTE *)a2; /*0x1c711*/
*(_BYTE *)(a1 + 15) = *(_BYTE *)(a2 + 4); /*0x1c71a*/
if ( *(_BYTE *)(a2 + 6) > 0x18u ) /*0x1c721*/
n24 = 24; /*0x1c729*/
else
n24 = *(_BYTE *)(a2 + 6); /*0x1c723*/
*(_BYTE *)(a1 + 16) = n24; /*0x1c72b*/
*(_WORD *)(a1 + 12) = *(_WORD *)(a2 + 16); /*0x1c732*/
*(_DWORD *)a1 = *(_DWORD *)(a2 + 8); /*0x1c739*/
*(_DWORD *)(a1 + 20) = HIDWORD(*(_QWORD *)(a2 + 8)); /*0x1c743*/
*(_DWORD *)(a1 + 4) = RstDeviceGetBuffer(a2); /*0x1c751*/
n23_2 = RstDeviceGetBuffer(a2); /*0x1c754*/
n23_1 = 0; /*0x1c759*/
*(_DWORD *)(a1 + 24) = HIDWORD(n23_2); /*0x1c760*/
*(_DWORD *)(a1 + 8) = *(_DWORD *)(a2 + 32); /*0x1c766*/
*(_DWORD *)(a1 + 28) = HIDWORD(*(_QWORD *)(a2 + 32)); /*0x1c771*/
*(_BYTE *)(a1 + 17) = *(_BYTE *)(a2 + 40); /*0x1c777*/
LOBYTE(n23_2) = *(_BYTE *)(a2 + 41); /*0x1c77a*/
*(_BYTE *)(a1 + 19) = 1; /*0x1c77d*/
*(_BYTE *)(a1 + 18) = n23_2; /*0x1c781*/
*(_QWORD *)(a1 + 32) = 0; /*0x1c784*/
*(_QWORD *)(a1 + 40) = 0; /*0x1c788*/
if ( *(_BYTE *)(a1 + 16) ) /*0x1c78c*/
{
do /*0x1c7cf*/
{
n23 = 23; /*0x1c79a*/
if ( n23_1 < 24 ) /*0x1c79f*/
n23 = n23_1; /*0x1c79f*/
n23_2 = (unsigned __int16)n23_1++; /*0x1c7bb*/
*(_DWORD *)(a1 + 4 * n23_2 + 48) = (*(unsigned __int8 *)(n23 + a2 + 240) << 24) /*0x1c7c3*/
| *(__int16 *)(*(_QWORD *)(a2 + 8LL * n23 + 48) + 16LL);
LOWORD(n23_2) = *(unsigned __int8 *)(a1 + 16); /*0x1c7c7*/
}
while ( (unsigned __int16)n23_1 < (unsigned __int16)n23_2 ); /*0x1c7cf*/
}
return n23_2; /*0x1c7db*/
}
// Function: RstDeviceCopyToConfigEntry @ 0x1c7f0 (0x162 bytes)
// Index: 782/906
__int64 __fastcall RstDeviceCopyToConfigEntry(CHAR16 *Destination, __int64 a2)
{
CHAR16 *Source; // rdi
__int64 result; // rax
__int64 v6; // rsi
int v7; // eax
__int64 v8; // rcx
__int64 v9; // rax
Source = (CHAR16 *)(a2 + 16); /*0x1c808*/
result = RstLinkedListFindByKey(Source_16, (_BYTE *)(a2 + 16)); /*0x1c81c*/
v6 = result; /*0x1c824*/
if ( result ) /*0x1c82a*/
{
if ( !Source || StrnCpy16(Source, Destination, 16) ) /*0x1c843*/
StrnCpy(Destination, Source, 0x10u); /*0x1c857*/
*((_BYTE *)Destination + 32) = *(_BYTE *)(a2 + 36); /*0x1c866*/
*((_QWORD *)Destination + 2) = *(_QWORD *)(a2 + 40); /*0x1c877*/
v7 = *(_DWORD *)(a2 + 48); /*0x1c87a*/
*((_DWORD *)Destination + 7) = 0; /*0x1c87d*/
*((_DWORD *)Destination + 6) = v7; /*0x1c881*/
Destination[18] = *(_WORD *)(a2 + 52); /*0x1c888*/
*(_QWORD *)(Destination + 34) = 0; /*0x1c88c*/
*((_DWORD *)Destination + 19) = 0; /*0x1c890*/
*((_BYTE *)Destination + 38) = 0; /*0x1c894*/
*((_BYTE *)Destination + 39) = 0; /*0x1c898*/
*((_BYTE *)Destination + 35) = 0; /*0x1c89c*/
LOWORD(v7) = *(_WORD *)(a2 + 64); /*0x1c8a0*/
*((_BYTE *)Destination + 42) = 0; /*0x1c8a4*/
*((_BYTE *)Destination + 43) = 0; /*0x1c8a8*/
*((_DWORD *)Destination + 11) = 0; /*0x1c8ac*/
Destination[24] = 0; /*0x1c8b0*/
Destination[20] = v7; /*0x1c8b5*/
*((_BYTE *)Destination + 34) = *(_BYTE *)(a2 + 66); /*0x1c8bc*/
RstConfigEntryDeserialize((__int64)(Destination + 40), *(_QWORD *)(a2 + 56), 0); /*0x1c8c3*/
v8 = *(_QWORD *)(v6 + 160); /*0x1c8c8*/
if ( *(_BYTE *)(v6 + 186) && !*(_BYTE *)(v6 + 190) && *(_BYTE *)(v6 + 187) ) /*0x1c8e1*/
{
*((_BYTE *)Destination + 90) = 0; /*0x1c8ea*/
*(_BYTE *)(v8 + 82) = 0; /*0x1c8ee*/
}
else
{
*(_BYTE *)(v8 + 82) = *((_BYTE *)Destination + 90); /*0x1c8f7*/
*((_BYTE *)Destination + 90) = *((_BYTE *)Destination + 90); /*0x1c8fd*/
}
v9 = RstDeviceGetDataPtr(v8); /*0x1c900*/
RstSplit64To32((_DWORD *)Destination + 20, v9); /*0x1c90c*/
*((_BYTE *)Destination + 33) = 0; /*0x1c911*/
*((_BYTE *)Destination + 50) = *(_BYTE *)(a2 + 80); /*0x1c921*/
MemZero((_BYTE *)Destination + 51, 0, 16); /*0x1c924*/
return RstStringCopyN((__int64)Destination + 51, a2 + 84, 16); /*0x1c934*/
}
return result; /*0x1c948*/
}
// Function: RstBufferListInit @ 0x1c954 (0x20 bytes)
// Index: 783/906
__int64 __fastcall RstBufferListInit(__int64 a1)
{
*(_QWORD *)a1 = off_24280; /*0x1c95b*/
*(_QWORD *)(a1 + 16) = 0; /*0x1c960*/
*(_QWORD *)(a1 + 8) = 0; /*0x1c964*/
*(_QWORD *)(a1 + 24) = 0; /*0x1c968*/
*(_WORD *)(a1 + 32) = 0; /*0x1c96c*/
return a1; /*0x1c973*/
}
// Function: RstPplRecoveryLogSetOffset @ 0x1c974 (0x47 bytes)
// Index: 784/906
void __fastcall RstPplRecoveryLogSetOffset(__int64 a1, __int64 a2)
{
if ( (unsigned __int8)RstDebugEnabled(a1, a2) && *(_WORD *)(a1 + 32) ) /*0x1c98d*/
DebugAssert("PplRecoveryLog.cpp", 0x5Au, "m_nOffs == 0"); /*0x1c9a7*/
*(_QWORD *)(a1 + 24) = a2; /*0x1c9ac*/
}
// Function: nullsub_1 @ 0x1c9bc (0x3 bytes)
// Index: 785/906
void nullsub_1()
{
; /*0x1c9bc*/
}
// Function: RstBufferListInitExt @ 0x1c9c0 (0x24 bytes)
// Index: 786/906
__int64 __fastcall RstBufferListInitExt(__int64 a1)
{
*(_QWORD *)a1 = off_242B8; /*0x1c9c9*/
*(_QWORD *)(a1 + 16) = 0; /*0x1c9cf*/
*(_QWORD *)(a1 + 8) = 0; /*0x1c9d3*/
*(_QWORD *)(a1 + 24) = 0; /*0x1c9d7*/
*(_WORD *)(a1 + 32) = 0; /*0x1c9db*/
*(_QWORD *)(a1 + 40) = 0; /*0x1c9df*/
return a1; /*0x1c9e3*/
}
// Function: RstPplRecoveryLogAddEntry @ 0x1c9e4 (0x42 bytes)
// Index: 787/906
char __fastcall RstPplRecoveryLogAddEntry(__int64 a1, __int64 Length, __int64 a3, unsigned int a4, __int64 a5)
{
if ( *(_QWORD *)(a1 + 40) ) /*0x1c9eb*/
{
RstPplRecoveryLogSetOffset(a1, a5); /*0x1ca1a*/
return 0; /*0x1ca1f*/
}
else
{
*(_QWORD *)(a1 + 8) = a3; /*0x1c9f4*/
*(_WORD *)(a1 + 32) = 0; /*0x1c9f8*/
*(_QWORD *)(a1 + 40) = Length; /*0x1ca00*/
*(_QWORD *)(a1 + 16) = a3 + a4; /*0x1ca04*/
*(_QWORD *)(a1 + 24) = a5; /*0x1ca0d*/
return 1; /*0x1ca11*/
}
}
// Function: Assert_133 @ 0x1ca28 (0x53 bytes)
// Index: 788/906
void Assert_133__int64 *a1, int a2, int a3)
{
int v6; // eax
if ( a1[5] ) /*0x1ca37*/
{
v6 = (*(__int64 (__fastcall **)(__int64 *))(*a1 + 8))(a1); /*0x1ca4a*/
Assert_89(Source_16, a1[5], 42, a2, v6, a3); /*0x1ca66*/
}
}
// Function: RstHelper_ca7c @ 0x1ca7c (0x19 bytes)
// Index: 789/906
__int64 RstHelper_ca7c__int64 a1)
{
__int64 v1; // rcx
__int64 result; // rax
v1 = *(_QWORD *)(a1 + 40); /*0x1ca80*/
result = 0; /*0x1ca84*/
if ( v1 ) /*0x1ca89*/
return HiiLibReturnZero(v1); /*0x1ca8b*/
return result; /*0x1ca90*/
}
// Function: RstConfigStreamWriteString @ 0x1ca98 (0xdb bytes)
// Index: 790/906
CHAR16 *__fastcall RstConfigStreamWriteString(__int64 a1, const CHAR16 *Source, unsigned __int16 Length)
{
CHAR16 *result; // rax
__int16 v7; // ax
CHAR16 *Destination; // rcx
unsigned __int16 Length_1; // si
unsigned __int64 v10; // rdx
unsigned __int64 v11; // rdx
result = *(CHAR16 **)(a1 + 16); /*0x1cab0*/
if ( *(_QWORD *)(a1 + 8) < (unsigned __int64)result ) /*0x1cac2*/
{
while ( 1 ) /*0x1cad1*/
{
v7 = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 8LL))(a1); /*0x1cad1*/
Destination = (CHAR16 *)(*(_QWORD *)(a1 + 24) + *(unsigned __int16 *)(a1 + 32)); /*0x1cadb*/
Length_1 = v7 - *(_WORD *)(a1 + 32); /*0x1cae1*/
if ( Length_1 >= Length ) /*0x1cae8*/
break; /*0x1cae8*/
StrnCpy(Destination, Source, Length_1); /*0x1caf1*/
v10 = *(_QWORD *)(a1 + 8); /*0x1caf6*/
if ( v10 < *(_QWORD *)(a1 + 16) ) /*0x1cafe*/
(**(void (__fastcall ***)(__int64, unsigned __int64, _QWORD))a1)(a1, v10, *(_QWORD *)(a1 + 24)); /*0x1cb0a*/
++*(_QWORD *)(a1 + 8); /*0x1cb0c*/
*(_WORD *)(a1 + 32) = 0; /*0x1cb10*/
result = *(CHAR16 **)(a1 + 16); /*0x1cb15*/
Length -= Length_1; /*0x1cb19*/
Source = (const CHAR16 *)((char *)Source + Length_1); /*0x1cb1c*/
if ( *(_QWORD *)(a1 + 8) >= (unsigned __int64)result ) /*0x1cb23*/
return result; /*0x1cb23*/
}
result = StrnCpy(Destination, Source, Length); /*0x1cb2b*/
if ( Length_1 == Length ) /*0x1cb33*/
{
v11 = *(_QWORD *)(a1 + 8); /*0x1cb35*/
if ( v11 < *(_QWORD *)(a1 + 16) ) /*0x1cb3d*/
result = (CHAR16 *)(**(__int64 (__fastcall ***)(__int64, unsigned __int64, _QWORD))a1)( /*0x1cb49*/
a1,
v11,
*(_QWORD *)(a1 + 24));
++*(_QWORD *)(a1 + 8); /*0x1cb4b*/
*(_WORD *)(a1 + 32) = 0; /*0x1cb4f*/
}
else
{
*(_WORD *)(a1 + 32) += Length; /*0x1cb56*/
}
}
return result; /*0x1cb69*/
}
// Function: RstConfigStreamWriteNewline @ 0x1cb74 (0x2d bytes)
// Index: 791/906
CHAR16 *__fastcall RstConfigStreamWriteNewline(__int64 a1)
{
unsigned __int16 Length; // ax
Length = StrLenA(Source_17); /*0x1cb84*/
return RstConfigStreamWriteString(a1, Source_17, Length); /*0x1cb97*/
}
// Function: RstConfigStreamWriteFieldMeta @ 0x1cba4 (0xbc bytes)
// Index: 792/906
CHAR16 *__fastcall RstConfigStreamWriteFieldMeta(__int64 a1, CHAR16 *Destination)
{
unsigned __int16 Length; // ax
int Source; // [rsp+40h] [rbp+18h] BYREF
Length = StrLenA(Source_4); /*0x1cbbb*/
RstConfigStreamWriteString(a1, Source_4, Length); /*0x1cbce*/
Source = RstGetFieldCount((__int64)Destination, 0); /*0x1cbeb*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cbef*/
Source = RstHelper_1d9c(Destination, 0); /*0x1cc0c*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cc10*/
Source = RstGetFieldSize(Destination, 0); /*0x1cc2d*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cc31*/
Source = RstGetFieldBlockSize(Destination); /*0x1cc4c*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cc5a*/
}
// Function: RstConfigStreamWriteBuffer @ 0x1cc60 (0x45 bytes)
// Index: 793/906
CHAR16 *__fastcall RstConfigStreamWriteBuffer(__int64 a1, __int64 Source_)
{
unsigned __int16 Length; // ax
__int64 Source; // [rsp+38h] [rbp+10h] BYREF
Source = Source_; /*0x1cc60*/
Length = StrLenA(Source_15); /*0x1cc74*/
RstConfigStreamWriteString(a1, Source_15, Length); /*0x1cc87*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 8u); /*0x1cc9f*/
}
// Function: RstConfigStreamWriteField @ 0x1cca8 (0x7b bytes)
// Index: 794/906
CHAR16 *__fastcall RstConfigStreamWriteField(__int64 a1, int Source_, __int64 Source__2, __int64 Length)
{
unsigned __int16 Length_1; // ax
int Source; // [rsp+38h] [rbp+10h] BYREF
__int64 Source__1; // [rsp+40h] [rbp+18h] BYREF
Source__1 = Source__2; /*0x1ccad*/
Source = Source_; /*0x1ccb2*/
Length_1 = StrLenA(Source_10); /*0x1ccc8*/
RstConfigStreamWriteString(a1, Source_10, Length_1); /*0x1ccdb*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1ccee*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1cd01*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)(Length + 28), 0x11u); /*0x1cd1d*/
}
// Function: RstConfigStreamWriteArrayEntry @ 0x1cd24 (0x65 bytes)
// Index: 795/906
__int64 __fastcall RstConfigStreamWriteArrayEntry(__int64 a1, __int64 Source_)
{
unsigned __int16 Length; // ax
unsigned __int64 v4; // rdx
__int64 Source; // [rsp+38h] [rbp+10h] BYREF
Source = Source_; /*0x1cd24*/
Length = StrLenA(Source_12); /*0x1cd38*/
RstConfigStreamWriteString(a1, Source_12, Length); /*0x1cd4b*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 8u); /*0x1cd5e*/
v4 = *(_QWORD *)(a1 + 8); /*0x1cd63*/
if ( v4 < *(_QWORD *)(a1 + 16) ) /*0x1cd6b*/
(**(void (__fastcall ***)(__int64, unsigned __int64, _QWORD))a1)(a1, v4, *(_QWORD *)(a1 + 24)); /*0x1cd77*/
++*(_QWORD *)(a1 + 8); /*0x1cd79*/
*(_WORD *)(a1 + 32) = 0; /*0x1cd7f*/
return 0; /*0x1cd83*/
}
// Function: RstConfigStreamWriteBlob @ 0x1cd8c (0x7b bytes)
// Index: 796/906
CHAR16 *__fastcall RstConfigStreamWriteBlob(__int64 a1, __int64 a2)
{
unsigned __int16 Length; // ax
CHAR16 *Length_2; // rax
unsigned int n0x1000; // ebx
int Length_1; // edi
Length = StrLenA(Source_11); /*0x1cdad*/
RstConfigStreamWriteString(a1, Source_11, Length); /*0x1cdc0*/
Length_2 = (CHAR16 *)(*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 8LL))(a1); /*0x1cdcb*/
n0x1000 = 0; /*0x1cdcf*/
Length_1 = (int)Length_2; /*0x1cdd1*/
if ( (_DWORD)Length_2 ) /*0x1cdd5*/
{
do /*0x1cdf0*/
{
Length_2 = RstConfigStreamWriteString(a1, (const CHAR16 *)(a2 + n0x1000), Length_1); /*0x1cde3*/
n0x1000 += Length_1; /*0x1cde8*/
}
while ( n0x1000 < 0x1000 ); /*0x1cdf0*/
}
return Length_2; /*0x1ce01*/
}
// Function: RstConfigStreamWriteVaList @ 0x1ce08 (0xcd bytes)
// Index: 797/906
CHAR16 *RstConfigStreamWriteVaList(__int64 a1, int Source_, __int64 Source__4, int Source__3, ...)
{
unsigned __int16 Length; // ax
int Source; // [rsp+38h] [rbp+10h] BYREF
__int64 Source__1; // [rsp+40h] [rbp+18h] BYREF
int Source__2; // [rsp+48h] [rbp+20h] BYREF
__int64 v10; // [rsp+50h] [rbp+28h] BYREF
va_list va; // [rsp+50h] [rbp+28h]
void *v12; // [rsp+58h] [rbp+30h] BYREF
va_list va1; // [rsp+58h] [rbp+30h]
void *v14; // [rsp+60h] [rbp+38h] BYREF
va_list va2; // [rsp+60h] [rbp+38h]
void *v16; // [rsp+68h] [rbp+40h] BYREF
va_list va3; // [rsp+68h] [rbp+40h]
va_list va4; // [rsp+70h] [rbp+48h] BYREF
va_start(va4, Source__3);
va_start(va3, Source__3);
va_start(va2, Source__3);
va_start(va1, Source__3);
va_start(va, Source__3);
v10 = va_arg(va1, _QWORD); /*0x1ce08*/
va_copy(va2, va1); /*0x1ce08*/
v12 = va_arg(va2, void *); /*0x1ce08*/
va_copy(va3, va2); /*0x1ce08*/
v14 = va_arg(va3, void *); /*0x1ce08*/
va_copy(va4, va3); /*0x1ce08*/
v16 = va_arg(va4, void *); /*0x1ce08*/
Source__2 = Source__3; /*0x1ce0f*/
Source__1 = Source__4; /*0x1ce13*/
Source = Source_; /*0x1ce17*/
Length = StrLenA(Source_0); /*0x1ce29*/
RstConfigStreamWriteString(a1, Source_0, Length); /*0x1ce3c*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1ce4f*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1ce64*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__2, 4u); /*0x1ce75*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1ce85*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va1, 8u); /*0x1ce95*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va2, 8u); /*0x1cea5*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va3, 8u); /*0x1ceb5*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)va4, 8u); /*0x1cecf*/
}
// Function: RstConfigStreamWriteStringVa1 @ 0x1ced8 (0xcd bytes)
// Index: 798/906
CHAR16 *RstConfigStreamWriteStringVa1(__int64 a1, int Source_, __int64 Source__4, int Source__3, ...)
{
unsigned __int16 Length; // ax
int Source; // [rsp+38h] [rbp+10h] BYREF
__int64 Source__1; // [rsp+40h] [rbp+18h] BYREF
int Source__2; // [rsp+48h] [rbp+20h] BYREF
__int64 v10; // [rsp+50h] [rbp+28h] BYREF
va_list va; // [rsp+50h] [rbp+28h]
void *v12; // [rsp+58h] [rbp+30h] BYREF
va_list va1; // [rsp+58h] [rbp+30h]
void *v14; // [rsp+60h] [rbp+38h] BYREF
va_list va2; // [rsp+60h] [rbp+38h]
void *v16; // [rsp+68h] [rbp+40h] BYREF
va_list va3; // [rsp+68h] [rbp+40h]
va_list va4; // [rsp+70h] [rbp+48h] BYREF
va_start(va4, Source__3);
va_start(va3, Source__3);
va_start(va2, Source__3);
va_start(va1, Source__3);
va_start(va, Source__3);
v10 = va_arg(va1, _QWORD); /*0x1ced8*/
va_copy(va2, va1); /*0x1ced8*/
v12 = va_arg(va2, void *); /*0x1ced8*/
va_copy(va3, va2); /*0x1ced8*/
v14 = va_arg(va3, void *); /*0x1ced8*/
va_copy(va4, va3); /*0x1ced8*/
v16 = va_arg(va4, void *); /*0x1ced8*/
Source__2 = Source__3; /*0x1cedf*/
Source__1 = Source__4; /*0x1cee3*/
Source = Source_; /*0x1cee7*/
Length = StrLenA(Source_1); /*0x1cef9*/
RstConfigStreamWriteString(a1, Source_1, Length); /*0x1cf0c*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cf1f*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1cf34*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__2, 4u); /*0x1cf45*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1cf55*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va1, 8u); /*0x1cf65*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va2, 8u); /*0x1cf75*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va3, 8u); /*0x1cf85*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)va4, 8u); /*0x1cf9f*/
}
// Function: RstConfigStreamWriteStringVa2 @ 0x1cfa8 (0xcd bytes)
// Index: 799/906
CHAR16 *RstConfigStreamWriteStringVa2(__int64 a1, int Source_, __int64 Source__4, int Source__3, ...)
{
unsigned __int16 Length; // ax
int Source; // [rsp+38h] [rbp+10h] BYREF
__int64 Source__1; // [rsp+40h] [rbp+18h] BYREF
int Source__2; // [rsp+48h] [rbp+20h] BYREF
__int64 v10; // [rsp+50h] [rbp+28h] BYREF
va_list va; // [rsp+50h] [rbp+28h]
void *v12; // [rsp+58h] [rbp+30h] BYREF
va_list va1; // [rsp+58h] [rbp+30h]
void *v14; // [rsp+60h] [rbp+38h] BYREF
va_list va2; // [rsp+60h] [rbp+38h]
void *v16; // [rsp+68h] [rbp+40h] BYREF
va_list va3; // [rsp+68h] [rbp+40h]
va_list va4; // [rsp+70h] [rbp+48h] BYREF
va_start(va4, Source__3);
va_start(va3, Source__3);
va_start(va2, Source__3);
va_start(va1, Source__3);
va_start(va, Source__3);
v10 = va_arg(va1, _QWORD); /*0x1cfa8*/
va_copy(va2, va1); /*0x1cfa8*/
v12 = va_arg(va2, void *); /*0x1cfa8*/
va_copy(va3, va2); /*0x1cfa8*/
v14 = va_arg(va3, void *); /*0x1cfa8*/
va_copy(va4, va3); /*0x1cfa8*/
v16 = va_arg(va4, void *); /*0x1cfa8*/
Source__2 = Source__3; /*0x1cfaf*/
Source__1 = Source__4; /*0x1cfb3*/
Source = Source_; /*0x1cfb7*/
Length = StrLenA(Source_2); /*0x1cfc9*/
RstConfigStreamWriteString(a1, Source_2, Length); /*0x1cfdc*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cfef*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1d004*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__2, 4u); /*0x1d015*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d025*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va1, 8u); /*0x1d035*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va2, 8u); /*0x1d045*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va3, 8u); /*0x1d055*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)va4, 8u); /*0x1d06f*/
}
// Function: RstConfigStreamWriteStringVa3 @ 0x1d078 (0xcd bytes)
// Index: 800/906
CHAR16 *RstConfigStreamWriteStringVa3(__int64 a1, int Source_, __int64 Source__4, int Source__3, ...)
{
unsigned __int16 Length; // ax
int Source; // [rsp+38h] [rbp+10h] BYREF
__int64 Source__1; // [rsp+40h] [rbp+18h] BYREF
int Source__2; // [rsp+48h] [rbp+20h] BYREF
__int64 v10; // [rsp+50h] [rbp+28h] BYREF
va_list va; // [rsp+50h] [rbp+28h]
void *v12; // [rsp+58h] [rbp+30h] BYREF
va_list va1; // [rsp+58h] [rbp+30h]
void *v14; // [rsp+60h] [rbp+38h] BYREF
va_list va2; // [rsp+60h] [rbp+38h]
void *v16; // [rsp+68h] [rbp+40h] BYREF
va_list va3; // [rsp+68h] [rbp+40h]
va_list va4; // [rsp+70h] [rbp+48h] BYREF
va_start(va4, Source__3);
va_start(va3, Source__3);
va_start(va2, Source__3);
va_start(va1, Source__3);
va_start(va, Source__3);
v10 = va_arg(va1, _QWORD); /*0x1d078*/
va_copy(va2, va1); /*0x1d078*/
v12 = va_arg(va2, void *); /*0x1d078*/
va_copy(va3, va2); /*0x1d078*/
v14 = va_arg(va3, void *); /*0x1d078*/
va_copy(va4, va3); /*0x1d078*/
v16 = va_arg(va4, void *); /*0x1d078*/
Source__2 = Source__3; /*0x1d07f*/
Source__1 = Source__4; /*0x1d083*/
Source = Source_; /*0x1d087*/
Length = StrLenA(Source_3); /*0x1d099*/
RstConfigStreamWriteString(a1, Source_3, Length); /*0x1d0ac*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1d0bf*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1d0d4*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__2, 4u); /*0x1d0e5*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d0f5*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va1, 8u); /*0x1d105*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va2, 8u); /*0x1d115*/
RstConfigStreamWriteString(a1, (const CHAR16 *)va3, 8u); /*0x1d125*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)va4, 8u); /*0x1d13f*/
}
// Function: RstConfigStreamWriteIntEntry @ 0x1d148 (0x5c bytes)
// Index: 801/906
CHAR16 *__fastcall RstConfigStreamWriteIntEntry(__int64 a1, int Source_, __int64 Source__2)
{
unsigned __int16 Length; // ax
int Source; // [rsp+38h] [rbp+10h] BYREF
__int64 Source__1; // [rsp+40h] [rbp+18h] BYREF
Source__1 = Source__2; /*0x1d148*/
Source = Source_; /*0x1d14d*/
Length = StrLenA(Source_14); /*0x1d160*/
RstConfigStreamWriteString(a1, Source_14, Length); /*0x1d173*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1d186*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1d19e*/
}
// Function: RstConfigStreamWriteChar @ 0x1d1a4 (0x7c bytes)
// Index: 802/906
CHAR16 *RstConfigStreamWriteChar(__int64 a1, __int64 a2, char n23, ...)
{
unsigned __int16 Length; // ax
CHAR16 Source; // [rsp+40h] [rbp+18h] BYREF
va_list va; // [rsp+48h] [rbp+20h] BYREF
va_start(va, n23);
LOBYTE(Source) = n23; /*0x1d1ae*/
Length = StrLenA(Source_6); /*0x1d1c5*/
RstConfigStreamWriteString(a1, Source_6, Length); /*0x1d1d8*/
RstConfigStreamWriteString(a1, (const CHAR16 *)(a2 + 28), 0x11u); /*0x1d1ea*/
RstConfigStreamWriteString(a1, &Source, 1u); /*0x1d1fd*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d21a*/
}
// Function: RstConfigStreamWriteChar2 @ 0x1d220 (0x7c bytes)
// Index: 803/906
CHAR16 *RstConfigStreamWriteChar2(__int64 a1, __int64 a2, char n23, ...)
{
unsigned __int16 Length; // ax
CHAR16 Source; // [rsp+40h] [rbp+18h] BYREF
va_list va; // [rsp+48h] [rbp+20h] BYREF
va_start(va, n23);
LOBYTE(Source) = n23; /*0x1d22a*/
Length = StrLenA(Source_7); /*0x1d241*/
RstConfigStreamWriteString(a1, Source_7, Length); /*0x1d254*/
RstConfigStreamWriteString(a1, (const CHAR16 *)(a2 + 28), 0x11u); /*0x1d266*/
RstConfigStreamWriteString(a1, &Source, 1u); /*0x1d279*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d296*/
}
// Function: RstConfigStreamWriteNamedEntry @ 0x1d29c (0x9d bytes)
// Index: 804/906
CHAR16 *__fastcall RstConfigStreamWriteNamedEntry(__int64 a1, __int64 Length, __int64 Source_, const CHAR16 *i, const CHAR16 *Source)
{
unsigned __int16 Length_1; // ax
__int64 Source__1; // [rsp+40h] [rbp+18h] BYREF
Source__1 = Source_; /*0x1d2a6*/
Length_1 = StrLenA(Source_5); /*0x1d2c0*/
RstConfigStreamWriteString(a1, Source_5, Length_1); /*0x1d2d3*/
RstConfigStreamWriteString(a1, (const CHAR16 *)(Length + 28), 0x11u); /*0x1d2e5*/
RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1d2f8*/
LOWORD(Length) = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 8LL))(a1); /*0x1d311*/
RstConfigStreamWriteString(a1, i, Length); /*0x1d313*/
return RstConfigStreamWriteString(a1, Source, Length); /*0x1d333*/
}
// Function: RstConfigStreamWriteNameEntry @ 0x1d33c (0x64 bytes)
// Index: 805/906
CHAR16 *__fastcall RstConfigStreamWriteNameEntry(__int64 a1, __int64 Length, __int64 Source_)
{
unsigned __int16 Length_1; // ax
__int64 Source; // [rsp+40h] [rbp+18h] BYREF
Source = Source_; /*0x1d341*/
Length_1 = StrLenA(Source_13); /*0x1d358*/
RstConfigStreamWriteString(a1, Source_13, Length_1); /*0x1d36b*/
RstConfigStreamWriteString(a1, (const CHAR16 *)(Length + 28), 0x11u); /*0x1d37d*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 8u); /*0x1d39a*/
}
// Function: RstConfigStreamWriteChar3 @ 0x1d3a0 (0x7c bytes)
// Index: 806/906
CHAR16 *RstConfigStreamWriteChar3(__int64 a1, __int64 Length, char n23, ...)
{
unsigned __int16 Length_1; // ax
CHAR16 Source; // [rsp+40h] [rbp+18h] BYREF
va_list va; // [rsp+48h] [rbp+20h] BYREF
va_start(va, n23);
LOBYTE(Source) = n23; /*0x1d3aa*/
Length_1 = StrLenA(Source_8); /*0x1d3c1*/
RstConfigStreamWriteString(a1, Source_8, Length_1); /*0x1d3d4*/
RstConfigStreamWriteString(a1, (const CHAR16 *)(Length + 28), 0x11u); /*0x1d3e6*/
RstConfigStreamWriteString(a1, &Source, 1u); /*0x1d3f9*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d416*/
}
// Function: RstConfigStreamWriteChar4 @ 0x1d41c (0x7c bytes)
// Index: 807/906
CHAR16 *RstConfigStreamWriteChar4(__int64 a1, __int64 Length, char n23, ...)
{
unsigned __int16 Length_1; // ax
CHAR16 Source; // [rsp+40h] [rbp+18h] BYREF
va_list va; // [rsp+48h] [rbp+20h] BYREF
va_start(va, n23);
LOBYTE(Source) = n23; /*0x1d426*/
Length_1 = StrLenA(Source_9); /*0x1d43d*/
RstConfigStreamWriteString(a1, Source_9, Length_1); /*0x1d450*/
RstConfigStreamWriteString(a1, (const CHAR16 *)(Length + 28), 0x11u); /*0x1d462*/
RstConfigStreamWriteString(a1, &Source, 1u); /*0x1d475*/
return RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d492*/
}
// Function: RstConfigStreamWriteBooleanEntry @ 0x1d498 (0x6e bytes)
// Index: 808/906
CHAR16 *__fastcall RstConfigStreamWriteBooleanEntry(__int64 a1, char a2)
{
CHAR16 *Source; // rbx
unsigned __int16 Length; // ax
CHAR16 *result; // rax
unsigned __int64 v6; // rdx
Source = (CHAR16 *)&unk_2430C; /*0x1d4b6*/
if ( a2 ) /*0x1d4bd*/
Source = (CHAR16 *)&word_24310; /*0x1d4bd*/
Length = StrLenA(Source); /*0x1d4c4*/
result = RstConfigStreamWriteString(a1, Source, Length); /*0x1d4d3*/
v6 = *(_QWORD *)(a1 + 8); /*0x1d4d8*/
if ( v6 < *(_QWORD *)(a1 + 16) ) /*0x1d4e0*/
result = (CHAR16 *)(**(__int64 (__fastcall ***)(__int64, unsigned __int64, _QWORD))a1)(a1, v6, *(_QWORD *)(a1 + 24)); /*0x1d4ec*/
++*(_QWORD *)(a1 + 8); /*0x1d4ee*/
*(_WORD *)(a1 + 32) = 0; /*0x1d4f7*/
return result; /*0x1d500*/
}
// Function: RstDeviceTypeToHiiStringId @ 0x1d508 (0x2e6 bytes)
// Index: 809/906
__int64 __fastcall RstDeviceTypeToHiiStringId(int n55)
{
int v1; // ecx
int v2; // ecx
int v3; // ecx
int v4; // ecx
int v5; // ecx
int v7; // ecx
int v8; // ecx
int v9; // ecx
int v10; // ecx
int v11; // ecx
int v12; // ecx
int v13; // ecx
int v14; // ecx
int v15; // ecx
int v16; // ecx
int v17; // ecx
int v18; // ecx
int v19; // ecx
int v20; // ecx
int v21; // ecx
int v22; // ecx
int v23; // ecx
int v24; // ecx
int v25; // ecx
int v26; // ecx
int v27; // ecx
int v28; // ecx
int v29; // ecx
int v30; // ecx
int v31; // ecx
int v32; // ecx
int v33; // ecx
int v34; // ecx
int v35; // ecx
int v36; // ecx
int v37; // ecx
int v38; // ecx
int v39; // ecx
int v40; // ecx
int v41; // ecx
int v42; // ecx
int v43; // ecx
int v44; // ecx
int v45; // ecx
int v46; // ecx
int v47; // ecx
int v48; // ecx
if ( n55 > 31 ) /*0x1d50b*/
{
if ( n55 > 47 ) /*0x1d682*/
{
if ( n55 > 55 ) /*0x1d744*/
{
v43 = n55 - 56; /*0x1d79e*/
if ( !v43 ) /*0x1d7a1*/
return 580; /*0x1d7e8*/
v44 = v43 - 1; /*0x1d7a8*/
if ( !v44 ) /*0x1d7aa*/
return 581; /*0x1d7e7*/
v45 = v44 - 1; /*0x1d7ac*/
if ( !v45 ) /*0x1d7ae*/
return 582; /*0x1d7e1*/
v46 = v45 - 1; /*0x1d7b0*/
if ( !v46 ) /*0x1d7b2*/
return 583; /*0x1d7db*/
v47 = v46 - 1; /*0x1d7b4*/
if ( !v47 ) /*0x1d7b6*/
return 584; /*0x1d7d5*/
v48 = v47 - 1; /*0x1d7b8*/
if ( !v48 ) /*0x1d7ba*/
return 585; /*0x1d7cf*/
if ( v48 == 1 ) /*0x1d7be*/
return 586; /*0x1d7c9*/
}
else
{
if ( n55 == 55 ) /*0x1d746*/
return 579; /*0x1d79d*/
v37 = n55 - 48; /*0x1d748*/
if ( !v37 ) /*0x1d74b*/
return 572; /*0x1d797*/
v38 = v37 - 1; /*0x1d752*/
if ( !v38 ) /*0x1d754*/
return 573; /*0x1d791*/
v39 = v38 - 1; /*0x1d756*/
if ( !v39 ) /*0x1d758*/
return 574; /*0x1d78b*/
v40 = v39 - 1; /*0x1d75a*/
if ( !v40 ) /*0x1d75c*/
return 575; /*0x1d785*/
v41 = v40 - 1; /*0x1d75e*/
if ( !v41 ) /*0x1d760*/
return 576; /*0x1d77f*/
v42 = v41 - 1; /*0x1d762*/
if ( !v42 ) /*0x1d764*/
return 577; /*0x1d779*/
if ( v42 == 1 ) /*0x1d768*/
return 578; /*0x1d773*/
}
}
else
{
if ( n55 == 47 ) /*0x1d688*/
return 571; /*0x1d740*/
if ( n55 > 39 ) /*0x1d691*/
{
v31 = n55 - 40; /*0x1d6eb*/
if ( !v31 ) /*0x1d6ee*/
return 635; /*0x1d73a*/
v32 = v31 - 1; /*0x1d6f5*/
if ( !v32 ) /*0x1d6f7*/
return 636; /*0x1d734*/
v33 = v32 - 1; /*0x1d6f9*/
if ( !v33 ) /*0x1d6fb*/
return 638; /*0x1d72e*/
v34 = v33 - 1; /*0x1d6fd*/
if ( !v34 ) /*0x1d6ff*/
return 639; /*0x1d728*/
v35 = v34 - 1; /*0x1d701*/
if ( !v35 ) /*0x1d703*/
return 640; /*0x1d722*/
v36 = v35 - 1; /*0x1d705*/
if ( !v36 ) /*0x1d707*/
return 637; /*0x1d71c*/
if ( v36 == 1 ) /*0x1d70b*/
return 570; /*0x1d716*/
}
else
{
if ( n55 == 39 ) /*0x1d693*/
return 634; /*0x1d6ea*/
v25 = n55 - 32; /*0x1d695*/
if ( !v25 ) /*0x1d698*/
return 627; /*0x1d6e4*/
v26 = v25 - 1; /*0x1d69f*/
if ( !v26 ) /*0x1d6a1*/
return 628; /*0x1d6de*/
v27 = v26 - 1; /*0x1d6a3*/
if ( !v27 ) /*0x1d6a5*/
return 629; /*0x1d6d8*/
v28 = v27 - 1; /*0x1d6a7*/
if ( !v28 ) /*0x1d6a9*/
return 630; /*0x1d6d2*/
v29 = v28 - 1; /*0x1d6ab*/
if ( !v29 ) /*0x1d6ad*/
return 631; /*0x1d6cc*/
v30 = v29 - 1; /*0x1d6af*/
if ( !v30 ) /*0x1d6b1*/
return 632; /*0x1d6c6*/
if ( v30 == 1 ) /*0x1d6b5*/
return 633; /*0x1d6c0*/
}
}
return 614; /*0x1d60e*/
}
if ( n55 == 31 ) /*0x1d511*/
return 626; /*0x1d67e*/
if ( n55 <= 15 ) /*0x1d51a*/
{
if ( n55 == 15 ) /*0x1d520*/
return 610; /*0x1d5d3*/
if ( n55 > 7 ) /*0x1d529*/
{
v7 = n55 - 8; /*0x1d582*/
if ( !v7 ) /*0x1d585*/
return 603; /*0x1d5cd*/
v8 = v7 - 1; /*0x1d58c*/
if ( !v8 ) /*0x1d58e*/
return 604; /*0x1d5c7*/
v9 = v8 - 1; /*0x1d590*/
if ( !v9 ) /*0x1d592*/
return 605; /*0x1d5c1*/
v10 = v9 - 1; /*0x1d594*/
if ( !v10 ) /*0x1d596*/
return 606; /*0x1d5bb*/
v11 = v10 - 1; /*0x1d598*/
if ( !v11 ) /*0x1d59a*/
return 607; /*0x1d5b5*/
v12 = v11 - 1; /*0x1d59c*/
if ( !v12 ) /*0x1d59e*/
return 608; /*0x1d5af*/
if ( v12 == 1 ) /*0x1d5a2*/
return 609; /*0x1d5a9*/
}
else
{
if ( n55 == 7 ) /*0x1d52b*/
return 602; /*0x1d581*/
if ( !n55 ) /*0x1d52f*/
return 595; /*0x1d57b*/
v1 = n55 - 1; /*0x1d536*/
if ( !v1 ) /*0x1d538*/
return 596; /*0x1d575*/
v2 = v1 - 1; /*0x1d53a*/
if ( !v2 ) /*0x1d53c*/
return 597; /*0x1d56f*/
v3 = v2 - 1; /*0x1d53e*/
if ( !v3 ) /*0x1d540*/
return 598; /*0x1d569*/
v4 = v3 - 1; /*0x1d542*/
if ( !v4 ) /*0x1d544*/
return 599; /*0x1d563*/
v5 = v4 - 1; /*0x1d546*/
if ( !v5 ) /*0x1d548*/
return 600; /*0x1d55d*/
if ( v5 == 1 ) /*0x1d54c*/
return 601; /*0x1d557*/
}
return 614; /*0x1d54c*/
}
if ( n55 > 23 ) /*0x1d5d7*/
{
v19 = n55 - 24; /*0x1d62d*/
if ( !v19 ) /*0x1d630*/
return 619; /*0x1d678*/
v20 = v19 - 1; /*0x1d637*/
if ( !v20 ) /*0x1d639*/
return 620; /*0x1d672*/
v21 = v20 - 1; /*0x1d63b*/
if ( !v21 ) /*0x1d63d*/
return 621; /*0x1d66c*/
v22 = v21 - 1; /*0x1d63f*/
if ( !v22 ) /*0x1d641*/
return 622; /*0x1d666*/
v23 = v22 - 1; /*0x1d643*/
if ( !v23 ) /*0x1d645*/
return 623; /*0x1d660*/
v24 = v23 - 1; /*0x1d647*/
if ( !v24 ) /*0x1d649*/
return 624; /*0x1d65a*/
if ( v24 == 1 ) /*0x1d64d*/
return 625; /*0x1d654*/
return 614; /*0x1d64d*/
}
if ( n55 == 23 ) /*0x1d5d9*/
return 618; /*0x1d627*/
v13 = n55 - 16; /*0x1d5db*/
if ( !v13 ) /*0x1d5de*/
return 611; /*0x1d621*/
v14 = v13 - 1; /*0x1d5e5*/
if ( !v14 ) /*0x1d5e7*/
return 612; /*0x1d61b*/
v15 = v14 - 1; /*0x1d5e9*/
if ( !v15 ) /*0x1d5eb*/
return 613; /*0x1d615*/
v16 = v15 - 1; /*0x1d5ed*/
if ( v16 ) /*0x1d5ef*/
{
v17 = v16 - 1; /*0x1d5f1*/
if ( v17 ) /*0x1d5f3*/
{
v18 = v17 - 1; /*0x1d5f5*/
if ( !v18 ) /*0x1d5f7*/
return 616; /*0x1d608*/
if ( v18 == 1 ) /*0x1d5fb*/
return 617; /*0x1d602*/
}
return 614; /*0x1d5fb*/
}
return 615; /*0x1d557*/
}
// Function: RstInitMethodToHiiStringId @ 0x1d7f0 (0x256 bytes)
// Index: 810/906
__int16 __fastcall RstInitMethodToHiiStringId(unsigned __int8 n24)
{
if ( n24 <= 0x18u ) /*0x1d7f8*/
{
if ( n24 == 24 ) /*0x1d7fe*/
return 371; /*0x1d92e*/
if ( n24 > 0xCu ) /*0x1d807*/
{
if ( n24 > 0x12u ) /*0x1d8a9*/
{
switch ( n24 ) /*0x1d8f1*/
{
case 0x13u: /*0x1d8f1*/
return 366; /*0x1d928*/
case 0x14u: /*0x1d8f1*/
return 367; /*0x1d922*/
case 0x15u: /*0x1d8f1*/
return 368; /*0x1d91c*/
case 0x16u: /*0x1d8f1*/
return 369; /*0x1d916*/
case 0x17u: /*0x1d8f1*/
return 370; /*0x1d910*/
}
}
else
{
switch ( n24 ) /*0x1d8ab*/
{
case 0x12u: /*0x1d8ab*/
return 365; /*0x1d8ed*/
case 0xDu: /*0x1d8ab*/
return 360; /*0x1d8e7*/
case 0xEu: /*0x1d8ab*/
return 361; /*0x1d8e1*/
case 0xFu: /*0x1d8ab*/
return 362; /*0x1d8db*/
case 0x10u: /*0x1d8ab*/
return 363; /*0x1d8d5*/
case 0x11u: /*0x1d8ab*/
return 364; /*0x1d8cf*/
}
}
}
else
{
if ( n24 == 12 ) /*0x1d80d*/
return 359; /*0x1d8a5*/
if ( n24 > 6u ) /*0x1d816*/
{
switch ( n24 ) /*0x1d868*/
{
case 7u: /*0x1d868*/
return 354; /*0x1d89f*/
case 8u: /*0x1d868*/
return 355; /*0x1d899*/
case 9u: /*0x1d868*/
return 356; /*0x1d893*/
case 0xAu: /*0x1d868*/
return 357; /*0x1d88d*/
case 0xBu: /*0x1d868*/
return 358; /*0x1d887*/
}
}
else
{
switch ( n24 ) /*0x1d818*/
{
case 6u: /*0x1d818*/
return 353; /*0x1d864*/
case 0u: /*0x1d818*/
return 347; /*0x1d85e*/
case 1u: /*0x1d818*/
return 348; /*0x1d858*/
case 2u: /*0x1d818*/
return 349; /*0x1d852*/
case 3u: /*0x1d818*/
return 350; /*0x1d84c*/
case 4u: /*0x1d818*/
return 351; /*0x1d846*/
case 5u: /*0x1d818*/
return 352; /*0x1d840*/
}
}
}
return 0; /*0x1d835*/
}
if ( n24 <= 0x24u ) /*0x1d932*/
{
if ( n24 == 36 ) /*0x1d938*/
return 383; /*0x1d9c6*/
if ( n24 > 0x1Eu ) /*0x1d941*/
{
switch ( n24 ) /*0x1d989*/
{
case 0x1Fu: /*0x1d989*/
return 378; /*0x1d9c0*/
case 0x20u: /*0x1d989*/
return 379; /*0x1d9ba*/
case 0x21u: /*0x1d989*/
return 380; /*0x1d9b4*/
case 0x22u: /*0x1d989*/
return 381; /*0x1d9ae*/
case 0x23u: /*0x1d989*/
return 382; /*0x1d9a8*/
}
}
else
{
switch ( n24 ) /*0x1d943*/
{
case 0x1Eu: /*0x1d943*/
return 377; /*0x1d985*/
case 0x19u: /*0x1d943*/
return 372; /*0x1d97f*/
case 0x1Au: /*0x1d943*/
return 373; /*0x1d979*/
case 0x1Bu: /*0x1d943*/
return 374; /*0x1d973*/
case 0x1Cu: /*0x1d943*/
return 375; /*0x1d96d*/
case 0x1Du: /*0x1d943*/
return 376; /*0x1d967*/
}
}
return 0; /*0x1d95c*/
}
if ( n24 <= 0x2Au ) /*0x1d9ca*/
{
switch ( n24 ) /*0x1d9cc*/
{
case '*': /*0x1d9cc*/
return 389; /*0x1da0a*/
case '%': /*0x1d9cc*/
return 384; /*0x1da04*/
case '&': /*0x1d9cc*/
return 385; /*0x1d9fe*/
case '\'': /*0x1d9cc*/
return 386; /*0x1d9f8*/
case '(': /*0x1d9cc*/
return 387; /*0x1d9f2*/
case ')': /*0x1d9cc*/
return 388; /*0x1d9ec*/
}
return 0; /*0x1d9e5*/
}
switch ( n24 ) /*0x1da0e*/
{
case '+': /*0x1da0e*/
return 390; /*0x1da40*/
case ',': /*0x1da0e*/
return 391; /*0x1da3a*/
case '-': /*0x1da0e*/
return 392; /*0x1da34*/
case '.': /*0x1da0e*/
return 393; /*0x1da2e*/
}
if ( n24 != 47 ) /*0x1da22*/
return 0; /*0x1da27*/
return 394; /*0x1d840*/
}
// Function: RstSpareTypeToHiiStringId @ 0x1da48 (0x256 bytes)
// Index: 811/906
__int16 __fastcall RstSpareTypeToHiiStringId(unsigned __int8 n24)
{
if ( n24 <= 0x18u ) /*0x1da50*/
{
if ( n24 == 24 ) /*0x1da56*/
return 419; /*0x1db86*/
if ( n24 > 0xCu ) /*0x1da5f*/
{
if ( n24 > 0x12u ) /*0x1db01*/
{
switch ( n24 ) /*0x1db49*/
{
case 0x13u: /*0x1db49*/
return 414; /*0x1db80*/
case 0x14u: /*0x1db49*/
return 415; /*0x1db7a*/
case 0x15u: /*0x1db49*/
return 416; /*0x1db74*/
case 0x16u: /*0x1db49*/
return 417; /*0x1db6e*/
case 0x17u: /*0x1db49*/
return 418; /*0x1db68*/
}
}
else
{
switch ( n24 ) /*0x1db03*/
{
case 0x12u: /*0x1db03*/
return 413; /*0x1db45*/
case 0xDu: /*0x1db03*/
return 408; /*0x1db3f*/
case 0xEu: /*0x1db03*/
return 409; /*0x1db39*/
case 0xFu: /*0x1db03*/
return 410; /*0x1db33*/
case 0x10u: /*0x1db03*/
return 411; /*0x1db2d*/
case 0x11u: /*0x1db03*/
return 412; /*0x1db27*/
}
}
}
else
{
if ( n24 == 12 ) /*0x1da65*/
return 407; /*0x1dafd*/
if ( n24 > 6u ) /*0x1da6e*/
{
switch ( n24 ) /*0x1dac0*/
{
case 7u: /*0x1dac0*/
return 402; /*0x1daf7*/
case 8u: /*0x1dac0*/
return 403; /*0x1daf1*/
case 9u: /*0x1dac0*/
return 404; /*0x1daeb*/
case 0xAu: /*0x1dac0*/
return 405; /*0x1dae5*/
case 0xBu: /*0x1dac0*/
return 406; /*0x1dadf*/
}
}
else
{
switch ( n24 ) /*0x1da70*/
{
case 6u: /*0x1da70*/
return 401; /*0x1dabc*/
case 0u: /*0x1da70*/
return 395; /*0x1dab6*/
case 1u: /*0x1da70*/
return 396; /*0x1dab0*/
case 2u: /*0x1da70*/
return 397; /*0x1daaa*/
case 3u: /*0x1da70*/
return 398; /*0x1daa4*/
case 4u: /*0x1da70*/
return 399; /*0x1da9e*/
case 5u: /*0x1da70*/
return 400; /*0x1da98*/
}
}
}
return 0; /*0x1da8d*/
}
if ( n24 <= 0x24u ) /*0x1db8a*/
{
if ( n24 == 36 ) /*0x1db90*/
return 431; /*0x1dc1e*/
if ( n24 > 0x1Eu ) /*0x1db99*/
{
switch ( n24 ) /*0x1dbe1*/
{
case 0x1Fu: /*0x1dbe1*/
return 426; /*0x1dc18*/
case 0x20u: /*0x1dbe1*/
return 427; /*0x1dc12*/
case 0x21u: /*0x1dbe1*/
return 428; /*0x1dc0c*/
case 0x22u: /*0x1dbe1*/
return 429; /*0x1dc06*/
case 0x23u: /*0x1dbe1*/
return 430; /*0x1dc00*/
}
}
else
{
switch ( n24 ) /*0x1db9b*/
{
case 0x1Eu: /*0x1db9b*/
return 425; /*0x1dbdd*/
case 0x19u: /*0x1db9b*/
return 420; /*0x1dbd7*/
case 0x1Au: /*0x1db9b*/
return 421; /*0x1dbd1*/
case 0x1Bu: /*0x1db9b*/
return 422; /*0x1dbcb*/
case 0x1Cu: /*0x1db9b*/
return 423; /*0x1dbc5*/
case 0x1Du: /*0x1db9b*/
return 424; /*0x1dbbf*/
}
}
return 0; /*0x1dbb4*/
}
if ( n24 <= 0x2Au ) /*0x1dc22*/
{
switch ( n24 ) /*0x1dc24*/
{
case '*': /*0x1dc24*/
return 437; /*0x1dc62*/
case '%': /*0x1dc24*/
return 432; /*0x1dc5c*/
case '&': /*0x1dc24*/
return 433; /*0x1dc56*/
case '\'': /*0x1dc24*/
return 434; /*0x1dc50*/
case '(': /*0x1dc24*/
return 435; /*0x1dc4a*/
case ')': /*0x1dc24*/
return 436; /*0x1dc44*/
}
return 0; /*0x1dc3d*/
}
switch ( n24 ) /*0x1dc66*/
{
case '+': /*0x1dc66*/
return 438; /*0x1dc98*/
case ',': /*0x1dc66*/
return 439; /*0x1dc92*/
case '-': /*0x1dc66*/
return 440; /*0x1dc8c*/
case '.': /*0x1dc66*/
return 441; /*0x1dc86*/
}
if ( n24 != 47 ) /*0x1dc7a*/
return 0; /*0x1dc7f*/
return 442; /*0x1da98*/
}
// Function: RstHelper_dca0 @ 0x1dca0 (0x97 bytes)
// Index: 812/906
CHAR8 *__fastcall RstHelper_dca0(EFI_STRING_ID StringId, _BYTE *a2)
{
int v4; // ebp
__int64 v5; // rdi
CHAR8 *i; // rax
CHAR8 *Language; // rbx
v4 = (unsigned __int16)StrLenA(a2); /*0x1dcc8*/
v5 = (unsigned int)(2 * v4 + 2); /*0x1dcd1*/
i = (CHAR8 *)MemAllocPages(v5); /*0x1dcd3*/
Language = i; /*0x1dcd8*/
if ( i ) /*0x1dcde*/
{
MemZero(i, 0, v5); /*0x1dce8*/
RstAsciiStrnToUnicodeStrn(Language, v4 + 1, a2); /*0x1dcf6*/
HiiGetString(HiiHandle, StringId, Language); /*0x1dd0c*/
return (CHAR8 *)MemZeroThenFree(Language, v5); /*0x1dd17*/
}
return i; /*0x1dd30*/
}
// Function: RstHelper_dd38 @ 0x1dd38 (0x32 bytes)
// Index: 813/906
EFI_STRING RstHelper_dd38EFI_STRING_ID StringId, unsigned __int16 a2)
{
const CHAR8 *StringToLanguage; // rax
StringToLanguage = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, a2, 0); /*0x1dd4b*/
return HiiGetString(HiiHandle, StringId, StringToLanguage); /*0x1dd60*/
}
// Function: RstHelper_dd6c @ 0x1dd6c (0x5c bytes)
// Index: 814/906
CHAR8 *RstHelper_dd6cunsigned __int8 n24)
{
__int64 StringToLanguage; // rax
if ( n24 == 0xFF ) /*0x1dd73*/
StringToLanguage = 0; /*0x1dd86*/
else
StringToLanguage = RstDeviceFindByIndexAndKey(n24, "en"); /*0x1dd7f*/
if ( !StringToLanguage ) /*0x1dd8b*/
StringToLanguage = HiiGetStringToLanguage(HiiHandle, 0x266u, 0); /*0x1dd9c*/
HiiCfgArrayGet(StartOfBuffer, 0x12Cu, (unsigned __int8 *)L"%s", StringToLanguage); /*0x1ddb7*/
return StartOfBuffer; /*0x1ddc3*/
}
// Function: RstHelper_ddc8 @ 0x1ddc8 (0x116 bytes)
// Index: 815/906
CHAR8 *__fastcall RstHelper_ddc8(unsigned __int64 n0x90)
{
unsigned __int8 n0x90_1; // bl
_QWORD *StringToLanguage; // rbp
__int64 v3; // rsi
__int64 v4; // rax
int v5; // edi
__int64 v6; // rbx
__int64 v7; // rax
__int64 i[24]; // [rsp+60h] [rbp-F8h] BYREF
int v10; // [rsp+120h] [rbp-38h]
int v11; // [rsp+124h] [rbp-34h]
unsigned __int16 v12; // [rsp+128h] [rbp-30h]
int v13; // [rsp+12Ch] [rbp-2Ch]
n0x90_1 = n0x90; /*0x1dddf*/
if ( (_BYTE)n0x90 == 0xFF ) /*0x1dde4*/
StringToLanguage = 0; /*0x1ddfa*/
else
StringToLanguage = RstDeviceFindByIndexAndKey((unsigned __int8)n0x90, "en"); /*0x1ddf5*/
RstHelper_ce6c(n0x90_1, (__int64)i); /*0x1de04*/
if ( !StringToLanguage ) /*0x1de0c*/
StringToLanguage = (_QWORD *)HiiGetStringToLanguage(HiiHandle, 0x266u, 0); /*0x1de22*/
v3 = HiiGetStringToLanguage(HiiHandle, 0x94u, 0); /*0x1de48*/
v4 = HiiGetStringToLanguage(HiiHandle, 0xEu, 0); /*0x1de4b*/
v5 = v12; /*0x1de57*/
v6 = v4; /*0x1de67*/
v7 = HiiGetStringToLanguage(HiiHandle, 0xBu, 0); /*0x1de6a*/
HiiCfgArrayGet( /*0x1deb9*/
StartOfBuffer,
0x12Cu,
(unsigned __int8 *)L"%s %s %d:%d %s%d %s%d",
StringToLanguage,
v7,
v10,
v5,
v6,
v11,
v3,
v13);
return StartOfBuffer; /*0x1ded9*/
}
// Function: RstHelper_dee0 @ 0x1dee0 (0x148 bytes)
// Index: 816/906
CHAR8 *__fastcall RstHelper_dee0(unsigned __int8 n24)
{
__int64 StringToLanguage; // r12
__int64 v2; // rbp
__int64 v3; // rsi
__int64 v4; // rax
int v5; // edi
__int64 v6; // rbx
__int64 v7; // rax
int v9; // [rsp+20h] [rbp-158h]
int v10; // [rsp+28h] [rbp-150h]
int v11; // [rsp+38h] [rbp-140h]
int v12; // [rsp+48h] [rbp-130h]
int v13; // [rsp+58h] [rbp-120h]
int v14; // [rsp+68h] [rbp-110h]
int v15; // [rsp+70h] [rbp-108h]
int v16; // [rsp+78h] [rbp-100h]
_DWORD i[50]; // [rsp+80h] [rbp-F8h] BYREF
unsigned __int16 v18; // [rsp+148h] [rbp-30h]
int v19; // [rsp+14Ch] [rbp-2Ch]
RstHelper_ce6c(n24, (__int64)i); /*0x1df06*/
StringToLanguage = HiiGetStringToLanguage(HiiHandle, 0xDu, 0); /*0x1df2e*/
v2 = HiiGetStringToLanguage(HiiHandle, 0x94u, 0); /*0x1df45*/
v3 = HiiGetStringToLanguage(HiiHandle, 0xEu, 0); /*0x1df5c*/
v4 = HiiGetStringToLanguage(HiiHandle, 0xCu, 0); /*0x1df5f*/
v5 = v18; /*0x1df6b*/
v6 = v4; /*0x1df7b*/
v7 = HiiGetStringToLanguage(HiiHandle, 0xBu, 0); /*0x1df7e*/
v16 = i[46]; /*0x1df91*/
v15 = i[45]; /*0x1dfa6*/
v14 = i[44]; /*0x1dfb1*/
v13 = v19; /*0x1dfc1*/
v12 = i[49]; /*0x1dfca*/
v11 = i[47]; /*0x1dfe1*/
v10 = v5; /*0x1dff6*/
v9 = i[48]; /*0x1dffa*/
HiiCfgArrayGet( /*0x1dffe*/
StartOfBuffer,
0x12Cu,
(unsigned __int8 *)L"%s %2d:%d, %s %3d, %s%d, %s%d, %s %02x:%02x.%x",
v7,
v9,
v10,
v6,
v11,
v3,
v12,
v2,
v13,
StringToLanguage,
v14,
v15,
v16);
return StartOfBuffer; /*0x1e022*/
}
// Function: RstVolSpareDriveCount @ 0x1e028 (0x7c bytes)
// Index: 817/906
char RstVolSpareDriveCount()
{
int v0; // esi
unsigned __int64 v1; // rbx
unsigned __int16 n0x90; // di
int v3; // eax
v0 = -1; /*0x1e043*/
v1 = RstVolGetOnlineMemberMask(); /*0x1e046*/
n0x90 = 0; /*0x1e049*/
while ( 1 ) /*0x1e04c*/
{
if ( !v1 ) /*0x1e04f*/
return 0; /*0x1e089*/
if ( (v1 & 1) != 0 && i__0[n0x90] == 2 ) /*0x1e064*/
break; /*0x1e064*/
LABEL_8:
++n0x90; /*0x1e079*/
v1 >>= 1; /*0x1e081*/
if ( n0x90 >= 0x90u ) /*0x1e087*/
return 0; /*0x1e087*/
}
v3 = RstDeviceGetRaidLevelByIndex(n0x90); /*0x1e069*/
if ( v0 == -1 || v0 == v3 ) /*0x1e075*/
{
v0 = v3; /*0x1e077*/
goto LABEL_8; /*0x1e077*/
}
return 1; /*0x1e09a*/
}
// Function: RstSecurityStatusToHiiStringId @ 0x1e0a4 (0x24f bytes)
// Index: 818/906
__int64 __fastcall RstSecurityStatusToHiiStringId(unsigned int n42)
{
__int64 result; // rax
int v2; // ecx
int v3; // ecx
int v4; // ecx
int v5; // ecx
int v6; // ecx
int v7; // ecx
int v8; // ecx
int v9; // ecx
int v10; // ecx
int v11; // ecx
int v12; // ecx
int v13; // ecx
int v14; // ecx
int v15; // ecx
int v16; // ecx
int v17; // ecx
int v18; // ecx
int v19; // ecx
int v20; // ecx
int v21; // ecx
int v22; // ecx
int v23; // ecx
int v24; // ecx
int v25; // ecx
int v26; // ecx
int v27; // ecx
int v28; // ecx
int v29; // ecx
int v30; // ecx
int v31; // ecx
int v32; // ecx
int v33; // ecx
result = 0; /*0x1e0a4*/
if ( n42 > 0x18 ) /*0x1e0a9*/
{
if ( n42 > 0x24 ) /*0x1e1e3*/
{
if ( n42 > 0x2A ) /*0x1e27b*/
{
v30 = n42 - 43; /*0x1e2bc*/
if ( v30 ) /*0x1e2bf*/
{
v31 = v30 - 1; /*0x1e2c1*/
if ( v31 ) /*0x1e2c4*/
{
v32 = v31 - 1; /*0x1e2c6*/
if ( v32 ) /*0x1e2c9*/
{
v33 = v32 - 1; /*0x1e2cb*/
if ( v33 ) /*0x1e2ce*/
{
if ( v33 == 1 ) /*0x1e2d3*/
return 566; /*0x1e2d5*/
}
else
{
return 565; /*0x1e2db*/
}
}
else
{
return 564; /*0x1e2e1*/
}
}
else
{
return 563; /*0x1e2e7*/
}
}
else
{
return 562; /*0x1e2ed*/
}
}
else if ( n42 == 42 ) /*0x1e27d*/
{
return 561; /*0x1e2b6*/
}
else
{
v26 = n42 - 37; /*0x1e27f*/
if ( v26 ) /*0x1e282*/
{
v27 = v26 - 1; /*0x1e284*/
if ( v27 ) /*0x1e287*/
{
v28 = v27 - 1; /*0x1e289*/
if ( v28 ) /*0x1e28c*/
{
v29 = v28 - 1; /*0x1e28e*/
if ( v29 ) /*0x1e291*/
{
if ( v29 == 1 ) /*0x1e296*/
return 560; /*0x1e298*/
}
else
{
return 559; /*0x1e29e*/
}
}
else
{
return 558; /*0x1e2a4*/
}
}
else
{
return 557; /*0x1e2aa*/
}
}
else
{
return 556; /*0x1e2b0*/
}
}
}
else if ( n42 == 36 ) /*0x1e1e9*/
{
return 555; /*0x1e272*/
}
else if ( n42 > 0x1E ) /*0x1e1f2*/
{
v22 = n42 - 31; /*0x1e237*/
if ( v22 ) /*0x1e23a*/
{
v23 = v22 - 1; /*0x1e23c*/
if ( v23 ) /*0x1e23f*/
{
v24 = v23 - 1; /*0x1e241*/
if ( v24 ) /*0x1e244*/
{
v25 = v24 - 1; /*0x1e246*/
if ( v25 ) /*0x1e249*/
{
if ( v25 == 1 ) /*0x1e24e*/
return 554; /*0x1e254*/
}
else
{
return 553; /*0x1e25a*/
}
}
else
{
return 552; /*0x1e260*/
}
}
else
{
return 551; /*0x1e266*/
}
}
else
{
return 550; /*0x1e26c*/
}
}
else if ( n42 == 30 ) /*0x1e1f4*/
{
return 549; /*0x1e231*/
}
else
{
v18 = n42 - 25; /*0x1e1f6*/
if ( v18 ) /*0x1e1f9*/
{
v19 = v18 - 1; /*0x1e1fb*/
if ( v19 ) /*0x1e1fe*/
{
v20 = v19 - 1; /*0x1e200*/
if ( v20 ) /*0x1e203*/
{
v21 = v20 - 1; /*0x1e205*/
if ( v21 ) /*0x1e208*/
{
if ( v21 == 1 ) /*0x1e20d*/
return 548; /*0x1e213*/
}
else
{
return 547; /*0x1e219*/
}
}
else
{
return 546; /*0x1e21f*/
}
}
else
{
return 545; /*0x1e225*/
}
}
else
{
return 544; /*0x1e22b*/
}
}
}
else if ( n42 == 24 ) /*0x1e0af*/
{
return 543; /*0x1e1da*/
}
else if ( n42 > 0xC ) /*0x1e0b8*/
{
if ( n42 > 0x12 ) /*0x1e15a*/
{
v14 = n42 - 19; /*0x1e19f*/
if ( v14 ) /*0x1e1a2*/
{
v15 = v14 - 1; /*0x1e1a4*/
if ( v15 ) /*0x1e1a7*/
{
v16 = v15 - 1; /*0x1e1a9*/
if ( v16 ) /*0x1e1ac*/
{
v17 = v16 - 1; /*0x1e1ae*/
if ( v17 ) /*0x1e1b1*/
{
if ( v17 == 1 ) /*0x1e1b6*/
return 542; /*0x1e1bc*/
}
else
{
return 541; /*0x1e1c2*/
}
}
else
{
return 540; /*0x1e1c8*/
}
}
else
{
return 539; /*0x1e1ce*/
}
}
else
{
return 538; /*0x1e1d4*/
}
}
else if ( n42 == 18 ) /*0x1e15c*/
{
return 537; /*0x1e199*/
}
else
{
v10 = n42 - 13; /*0x1e15e*/
if ( v10 ) /*0x1e161*/
{
v11 = v10 - 1; /*0x1e163*/
if ( v11 ) /*0x1e166*/
{
v12 = v11 - 1; /*0x1e168*/
if ( v12 ) /*0x1e16b*/
{
v13 = v12 - 1; /*0x1e16d*/
if ( v13 ) /*0x1e170*/
{
if ( v13 == 1 ) /*0x1e175*/
return 536; /*0x1e17b*/
}
else
{
return 535; /*0x1e181*/
}
}
else
{
return 534; /*0x1e187*/
}
}
else
{
return 533; /*0x1e18d*/
}
}
else
{
return 532; /*0x1e193*/
}
}
}
else if ( n42 == 12 ) /*0x1e0be*/
{
return 531; /*0x1e151*/
}
else if ( n42 > 6 ) /*0x1e0c7*/
{
v6 = n42 - 7; /*0x1e116*/
if ( v6 ) /*0x1e119*/
{
v7 = v6 - 1; /*0x1e11b*/
if ( v7 ) /*0x1e11e*/
{
v8 = v7 - 1; /*0x1e120*/
if ( v8 ) /*0x1e123*/
{
v9 = v8 - 1; /*0x1e125*/
if ( v9 ) /*0x1e128*/
{
if ( v9 == 1 ) /*0x1e12d*/
return 530; /*0x1e133*/
}
else
{
return 529; /*0x1e139*/
}
}
else
{
return 528; /*0x1e13f*/
}
}
else
{
return 527; /*0x1e145*/
}
}
else
{
return 526; /*0x1e14b*/
}
}
else if ( n42 == 6 ) /*0x1e0c9*/
{
return 525; /*0x1e110*/
}
else if ( n42 ) /*0x1e0cd*/
{
v2 = n42 - 1; /*0x1e0cf*/
if ( v2 ) /*0x1e0d2*/
{
v3 = v2 - 1; /*0x1e0d4*/
if ( v3 ) /*0x1e0d7*/
{
v4 = v3 - 1; /*0x1e0d9*/
if ( v4 ) /*0x1e0dc*/
{
v5 = v4 - 1; /*0x1e0de*/
if ( v5 ) /*0x1e0e1*/
{
if ( v5 == 1 ) /*0x1e0e6*/
return 524; /*0x1e0ec*/
}
else
{
return 523; /*0x1e0f2*/
}
}
else
{
return 522; /*0x1e0f8*/
}
}
else
{
return 521; /*0x1e0fe*/
}
}
else
{
return 520; /*0x1e104*/
}
}
else
{
return 519; /*0x1e10a*/
}
return result; /*0x1e0f1*/
}
// Function: RstRaidLevelToHiiStringId @ 0x1e2f4 (0x269 bytes)
// Index: 819/906
__int16 __fastcall RstRaidLevelToHiiStringId(unsigned int n24)
{
__int16 n24_1; // ax
int v2; // ecx
int v3; // ecx
int v4; // ecx
int v5; // ecx
int v6; // ecx
int v7; // ecx
int v8; // ecx
int v9; // ecx
int v10; // ecx
int v11; // ecx
int v12; // ecx
int v13; // ecx
int v14; // ecx
int v15; // ecx
int v16; // ecx
int v17; // ecx
int v18; // ecx
int v19; // ecx
int v20; // ecx
int v21; // ecx
int v22; // ecx
int v23; // ecx
int v24; // ecx
int v25; // ecx
int v26; // ecx
int v27; // ecx
int v28; // ecx
int v29; // ecx
int v30; // ecx
int v31; // ecx
int v32; // ecx
int v33; // ecx
n24_1 = 24; /*0x1e2f6*/
if ( n24 <= 0x18 ) /*0x1e2fb*/
{
if ( n24 == 24 ) /*0x1e301*/
return 41; /*0x1e42f*/
if ( n24 > 0xC ) /*0x1e30a*/
{
if ( n24 > 0x12 ) /*0x1e3aa*/
{
v14 = n24 - 19; /*0x1e3f2*/
if ( !v14 ) /*0x1e3f4*/
return 36; /*0x1e429*/
v15 = v14 - 1; /*0x1e3f6*/
if ( !v15 ) /*0x1e3f9*/
return 37; /*0x1e423*/
v16 = v15 - 1; /*0x1e3fb*/
if ( !v16 ) /*0x1e3fe*/
return 38; /*0x1e41d*/
v17 = v16 - 1; /*0x1e400*/
if ( !v17 ) /*0x1e403*/
return 39; /*0x1e417*/
if ( v17 == 1 ) /*0x1e408*/
return 40; /*0x1e411*/
}
else
{
if ( n24 == 18 ) /*0x1e3ac*/
return 35; /*0x1e3ec*/
v10 = n24 - 13; /*0x1e3ae*/
if ( !v10 ) /*0x1e3b1*/
return 30; /*0x1e3e6*/
v11 = v10 - 1; /*0x1e3b3*/
if ( !v11 ) /*0x1e3b6*/
return 31; /*0x1e3e0*/
v12 = v11 - 1; /*0x1e3b8*/
if ( !v12 ) /*0x1e3bb*/
return 32; /*0x1e3da*/
v13 = v12 - 1; /*0x1e3bd*/
if ( !v13 ) /*0x1e3c0*/
return 33; /*0x1e3d4*/
if ( v13 == 1 ) /*0x1e3c5*/
return 34; /*0x1e3ce*/
}
}
else
{
if ( n24 == 12 ) /*0x1e310*/
return 29; /*0x1e3a2*/
if ( n24 > 6 ) /*0x1e319*/
{
v6 = n24 - 7; /*0x1e366*/
if ( !v6 ) /*0x1e369*/
return n24_1; /*0x1e369*/
v7 = v6 - 1; /*0x1e36f*/
if ( !v7 ) /*0x1e372*/
return 25; /*0x1e39c*/
v8 = v7 - 1; /*0x1e374*/
if ( !v8 ) /*0x1e377*/
return 26; /*0x1e396*/
v9 = v8 - 1; /*0x1e379*/
if ( !v9 ) /*0x1e37c*/
return 27; /*0x1e390*/
if ( v9 == 1 ) /*0x1e381*/
return 28; /*0x1e38a*/
}
else
{
if ( n24 == 6 ) /*0x1e31b*/
return 23; /*0x1e365*/
if ( !n24 ) /*0x1e31f*/
return 17; /*0x1e35f*/
v2 = n24 - 1; /*0x1e321*/
if ( !v2 ) /*0x1e324*/
return 18; /*0x1e359*/
v3 = v2 - 1; /*0x1e326*/
if ( !v3 ) /*0x1e329*/
return 19; /*0x1e353*/
v4 = v3 - 1; /*0x1e32b*/
if ( !v4 ) /*0x1e32e*/
return 20; /*0x1e34d*/
v5 = v4 - 1; /*0x1e330*/
if ( !v5 ) /*0x1e333*/
return 21; /*0x1e347*/
if ( v5 == 1 ) /*0x1e338*/
return 22; /*0x1e341*/
}
}
return 0; /*0x1e338*/
}
if ( n24 <= 0x24 ) /*0x1e437*/
{
if ( n24 == 36 ) /*0x1e43d*/
return 53; /*0x1e4d3*/
if ( n24 > 0x1E ) /*0x1e44a*/
{
v22 = n24 - 31; /*0x1e496*/
if ( !v22 ) /*0x1e498*/
return 48; /*0x1e4cd*/
v23 = v22 - 1; /*0x1e49a*/
if ( !v23 ) /*0x1e49d*/
return 49; /*0x1e4c7*/
v24 = v23 - 1; /*0x1e49f*/
if ( !v24 ) /*0x1e4a2*/
return 50; /*0x1e4c1*/
v25 = v24 - 1; /*0x1e4a4*/
if ( !v25 ) /*0x1e4a7*/
return 51; /*0x1e4bb*/
if ( v25 == 1 ) /*0x1e4ac*/
return 52; /*0x1e4b5*/
}
else
{
if ( n24 == 30 ) /*0x1e44c*/
return 47; /*0x1e490*/
v18 = n24 - 25; /*0x1e453*/
if ( !v18 ) /*0x1e455*/
return 42; /*0x1e48a*/
v19 = v18 - 1; /*0x1e457*/
if ( !v19 ) /*0x1e45a*/
return 43; /*0x1e484*/
v20 = v19 - 1; /*0x1e45c*/
if ( !v20 ) /*0x1e45f*/
return 44; /*0x1e47e*/
v21 = v20 - 1; /*0x1e461*/
if ( !v21 ) /*0x1e464*/
return 45; /*0x1e478*/
if ( v21 == 1 ) /*0x1e469*/
return 46; /*0x1e472*/
}
return 0; /*0x1e469*/
}
if ( n24 <= 0x2A ) /*0x1e4db*/
{
if ( n24 == 42 ) /*0x1e4dd*/
return 59; /*0x1e51d*/
v26 = n24 - 37; /*0x1e4e4*/
if ( !v26 ) /*0x1e4e6*/
return 54; /*0x1e517*/
v27 = v26 - 1; /*0x1e4e8*/
if ( !v27 ) /*0x1e4eb*/
return 55; /*0x1e511*/
v28 = v27 - 1; /*0x1e4ed*/
if ( !v28 ) /*0x1e4f0*/
return 56; /*0x1e50b*/
v29 = v28 - 1; /*0x1e4f2*/
if ( !v29 ) /*0x1e4f5*/
return 57; /*0x1e505*/
if ( v29 == 1 ) /*0x1e4fa*/
return 58; /*0x1e4ff*/
return 0; /*0x1e4fa*/
}
v30 = n24 - 43; /*0x1e523*/
if ( !v30 ) /*0x1e525*/
return 60; /*0x1e557*/
v31 = v30 - 1; /*0x1e527*/
if ( !v31 ) /*0x1e52a*/
return 61; /*0x1e551*/
v32 = v31 - 1; /*0x1e52c*/
if ( !v32 ) /*0x1e52f*/
return 62; /*0x1e54b*/
v33 = v32 - 1; /*0x1e531*/
if ( !v33 ) /*0x1e534*/
return 63; /*0x1e545*/
if ( v33 != 1 ) /*0x1e539*/
return 0; /*0x1e53e*/
return 64; /*0x1e341*/
}
// Function: RstSecurityCapToHiiStringId @ 0x1e560 (0x23b bytes)
// Index: 820/906
__int64 __fastcall RstSecurityCapToHiiStringId(unsigned int n42)
{
__int64 result; // rax
int v2; // ecx
int v3; // ecx
int v4; // ecx
int v5; // ecx
int v6; // ecx
int v7; // ecx
int v8; // ecx
int v9; // ecx
int v10; // ecx
int v11; // ecx
int v12; // ecx
int v13; // ecx
int v14; // ecx
int v15; // ecx
int v16; // ecx
int v17; // ecx
int v18; // ecx
int v19; // ecx
int v20; // ecx
int v21; // ecx
int v22; // ecx
int v23; // ecx
int v24; // ecx
int v25; // ecx
int v26; // ecx
int v27; // ecx
int v28; // ecx
int v29; // ecx
int v30; // ecx
int v31; // ecx
int v32; // ecx
int v33; // ecx
result = 0; /*0x1e560*/
if ( n42 > 0x18 ) /*0x1e565*/
{
if ( n42 > 0x24 ) /*0x1e697*/
{
if ( n42 > 0x2A ) /*0x1e727*/
{
v30 = n42 - 43; /*0x1e766*/
if ( v30 ) /*0x1e769*/
{
v31 = v30 - 1; /*0x1e76b*/
if ( v31 ) /*0x1e76e*/
{
v32 = v31 - 1; /*0x1e770*/
if ( v32 ) /*0x1e773*/
{
v33 = v32 - 1; /*0x1e775*/
if ( v33 ) /*0x1e778*/
{
if ( v33 == 1 ) /*0x1e77d*/
return 112; /*0x1e77f*/
}
else
{
return 111; /*0x1e783*/
}
}
else
{
return 110; /*0x1e789*/
}
}
else
{
return 109; /*0x1e78f*/
}
}
else
{
return 108; /*0x1e795*/
}
}
else if ( n42 == 42 ) /*0x1e729*/
{
return 107; /*0x1e760*/
}
else
{
v26 = n42 - 37; /*0x1e72b*/
if ( v26 ) /*0x1e72e*/
{
v27 = v26 - 1; /*0x1e730*/
if ( v27 ) /*0x1e733*/
{
v28 = v27 - 1; /*0x1e735*/
if ( v28 ) /*0x1e738*/
{
v29 = v28 - 1; /*0x1e73a*/
if ( v29 ) /*0x1e73d*/
{
if ( v29 == 1 ) /*0x1e742*/
return 106; /*0x1e744*/
}
else
{
return 105; /*0x1e748*/
}
}
else
{
return 104; /*0x1e74e*/
}
}
else
{
return 103; /*0x1e754*/
}
}
else
{
return 102; /*0x1e75a*/
}
}
}
else if ( n42 == 36 ) /*0x1e69d*/
{
return 101; /*0x1e71e*/
}
else if ( n42 > 0x1E ) /*0x1e6a2*/
{
v22 = n42 - 31; /*0x1e6e5*/
if ( v22 ) /*0x1e6e8*/
{
v23 = v22 - 1; /*0x1e6ea*/
if ( v23 ) /*0x1e6ed*/
{
v24 = v23 - 1; /*0x1e6ef*/
if ( v24 ) /*0x1e6f2*/
{
v25 = v24 - 1; /*0x1e6f4*/
if ( v25 ) /*0x1e6f7*/
{
if ( v25 == 1 ) /*0x1e6fc*/
return 100; /*0x1e702*/
}
else
{
return 99; /*0x1e706*/
}
}
else
{
return 98; /*0x1e70c*/
}
}
else
{
return 97; /*0x1e712*/
}
}
else
{
return 96; /*0x1e718*/
}
}
else if ( n42 == 30 ) /*0x1e6a4*/
{
return 95; /*0x1e6df*/
}
else
{
v18 = n42 - 25; /*0x1e6a6*/
if ( v18 ) /*0x1e6a9*/
{
v19 = v18 - 1; /*0x1e6ab*/
if ( v19 ) /*0x1e6ae*/
{
v20 = v19 - 1; /*0x1e6b0*/
if ( v20 ) /*0x1e6b3*/
{
v21 = v20 - 1; /*0x1e6b5*/
if ( v21 ) /*0x1e6b8*/
{
if ( v21 == 1 ) /*0x1e6bd*/
return 94; /*0x1e6c3*/
}
else
{
return 93; /*0x1e6c7*/
}
}
else
{
return 92; /*0x1e6cd*/
}
}
else
{
return 91; /*0x1e6d3*/
}
}
else
{
return 90; /*0x1e6d9*/
}
}
}
else if ( n42 == 24 ) /*0x1e56b*/
{
return 89; /*0x1e68e*/
}
else if ( n42 > 0xC ) /*0x1e574*/
{
if ( n42 > 0x12 ) /*0x1e612*/
{
v14 = n42 - 19; /*0x1e655*/
if ( v14 ) /*0x1e658*/
{
v15 = v14 - 1; /*0x1e65a*/
if ( v15 ) /*0x1e65d*/
{
v16 = v15 - 1; /*0x1e65f*/
if ( v16 ) /*0x1e662*/
{
v17 = v16 - 1; /*0x1e664*/
if ( v17 ) /*0x1e667*/
{
if ( v17 == 1 ) /*0x1e66c*/
return 88; /*0x1e672*/
}
else
{
return 87; /*0x1e676*/
}
}
else
{
return 86; /*0x1e67c*/
}
}
else
{
return 85; /*0x1e682*/
}
}
else
{
return 84; /*0x1e688*/
}
}
else if ( n42 == 18 ) /*0x1e614*/
{
return 83; /*0x1e64f*/
}
else
{
v10 = n42 - 13; /*0x1e616*/
if ( v10 ) /*0x1e619*/
{
v11 = v10 - 1; /*0x1e61b*/
if ( v11 ) /*0x1e61e*/
{
v12 = v11 - 1; /*0x1e620*/
if ( v12 ) /*0x1e623*/
{
v13 = v12 - 1; /*0x1e625*/
if ( v13 ) /*0x1e628*/
{
if ( v13 == 1 ) /*0x1e62d*/
return 82; /*0x1e633*/
}
else
{
return 81; /*0x1e637*/
}
}
else
{
return 80; /*0x1e63d*/
}
}
else
{
return 79; /*0x1e643*/
}
}
else
{
return 78; /*0x1e649*/
}
}
}
else if ( n42 == 12 ) /*0x1e57a*/
{
return 77; /*0x1e609*/
}
else if ( n42 > 6 ) /*0x1e583*/
{
v6 = n42 - 7; /*0x1e5d0*/
if ( v6 ) /*0x1e5d3*/
{
v7 = v6 - 1; /*0x1e5d5*/
if ( v7 ) /*0x1e5d8*/
{
v8 = v7 - 1; /*0x1e5da*/
if ( v8 ) /*0x1e5dd*/
{
v9 = v8 - 1; /*0x1e5df*/
if ( v9 ) /*0x1e5e2*/
{
if ( v9 == 1 ) /*0x1e5e7*/
return 76; /*0x1e5ed*/
}
else
{
return 75; /*0x1e5f1*/
}
}
else
{
return 74; /*0x1e5f7*/
}
}
else
{
return 73; /*0x1e5fd*/
}
}
else
{
return 72; /*0x1e603*/
}
}
else if ( n42 == 6 ) /*0x1e585*/
{
return 71; /*0x1e5ca*/
}
else if ( n42 ) /*0x1e589*/
{
v2 = n42 - 1; /*0x1e58b*/
if ( v2 ) /*0x1e58e*/
{
v3 = v2 - 1; /*0x1e590*/
if ( v3 ) /*0x1e593*/
{
v4 = v3 - 1; /*0x1e595*/
if ( v4 ) /*0x1e598*/
{
v5 = v4 - 1; /*0x1e59a*/
if ( v5 ) /*0x1e59d*/
{
if ( v5 == 1 ) /*0x1e5a2*/
return 70; /*0x1e5a8*/
}
else
{
return 69; /*0x1e5ac*/
}
}
else
{
return 68; /*0x1e5b2*/
}
}
else
{
return 67; /*0x1e5b8*/
}
}
else
{
return 66; /*0x1e5be*/
}
}
else
{
return 65; /*0x1e5c4*/
}
return result; /*0x1e5ab*/
}
// Function: RstRaidRoundDownCapacity @ 0x1e79c (0xaf bytes)
// Index: 821/906
__int16 __fastcall RstRaidRoundDownCapacity(unsigned __int16 n64)
{
int n64_1; // edx
__int16 n256; // ax
__int16 n1024; // cx
n64_1 = n64; /*0x1e79c*/
n256 = 256; /*0x1e79f*/
if ( n64 > 0x100u ) /*0x1e7a6*/
{
if ( n64 == 512 ) /*0x1e803*/
return n256; /*0x1e803*/
n1024 = 1024; /*0x1e805*/
if ( n64_1 == 1024 ) /*0x1e80c*/
return 512; /*0x1e846*/
n256 = 2048; /*0x1e80e*/
if ( n64_1 == 2048 ) /*0x1e815*/
return n1024; /*0x1e815*/
n1024 = 4096; /*0x1e817*/
if ( n64_1 == 4096 ) /*0x1e81e*/
return n256; /*0x1e81e*/
n256 = 0x2000; /*0x1e820*/
switch ( n64_1 ) /*0x1e827*/
{
case 0x2000: /*0x1e827*/
return n1024; /*0x1e845*/
case 0x3FDC: /*0x1e827*/
return n256; /*0x1e82f*/
case 0x8000: /*0x1e827*/
return 0x4000; /*0x1e841*/
}
return 0; /*0x1e83b*/
}
if ( n64 == 256 ) /*0x1e7a8*/
return 128; /*0x1e7f9*/
n256 = 2; /*0x1e7aa*/
if ( n64 == 2 ) /*0x1e7b1*/
return 1; /*0x1e7f3*/
if ( n64 != 4 ) /*0x1e7b5*/
{
n256 = 4; /*0x1e7bb*/
if ( n64 != 8 ) /*0x1e7c2*/
{
n256 = 8; /*0x1e7c8*/
if ( n64 != 16 ) /*0x1e7cf*/
{
n256 = 16; /*0x1e7d1*/
if ( n64 != 32 ) /*0x1e7d8*/
{
n256 = 32; /*0x1e7da*/
if ( n64 != 64 ) /*0x1e7e1*/
{
n256 = 64; /*0x1e7e3*/
if ( n64 != 128 ) /*0x1e7ea*/
return 0; /*0x1e7ea*/
}
}
}
}
}
return n256; /*0x1e7ec*/
}
// Function: RstDiskNumberToStatusCode @ 0x1e84c (0x39 bytes)
// Index: 822/906
__int64 __fastcall RstDiskNumberToStatusCode(__int16 n32)
{
__int64 result; // rax
result = 1; /*0x1e84f*/
if ( n32 != 1 ) /*0x1e856*/
{
switch ( n32 ) /*0x1e85a*/
{
case 2: /*0x1e85a*/
return result; /*0x1e85a*/
case 4: /*0x1e85a*/
return 5; /*0x1e881*/
case 8: /*0x1e85a*/
return 10; /*0x1e87b*/
case 16: /*0x1e85a*/
return result; /*0x1e869*/
}
if ( n32 != 32 ) /*0x1e86e*/
return 0xFFFF; /*0x1e875*/
}
return 0; /*0x1e875*/
}
// Function: RstHelper_e888 @ 0x1e888 (0x45 bytes)
// Index: 823/906
bool sub_1E888()
{
bool result; // al
if ( !byte_58030 ) /*0x1e893*/
{
byte_58030 = 1; /*0x1e8b6*/
result = HiiBlockToConfig((__int64)&qword_24318, (__int64)L"RstHiiConfig", 310, (__int64)&i__5, 0); /*0x1e8bd*/
--byte_58030; /*0x1e8c2*/
}
return result; /*0x1e8c8*/
}
// Function: RstHiiGetBlockConfig @ 0x1e8d0 (0xcb bytes)
// Index: 824/906
bool RstHiiGetBlockConfig()
{
unsigned __int64 v0; // rdi
unsigned __int16 n0x90; // bx
unsigned __int64 v2; // rbp
unsigned __int64 v3; // rsi
__int64 i[3]; // [rsp+20h] [rbp-F8h] BYREF
unsigned __int64 v6; // [rsp+38h] [rbp-E0h]
v0 = RstVolGetOnlineMemberMask(); /*0x1e8f4*/
n0x90 = 0; /*0x1e8f7*/
v2 = 0; /*0x1e8fb*/
v3 = 0; /*0x1e8fe*/
while ( v0 ) /*0x1e904*/
{
if ( (v0 & 1) != 0 && i__0[n0x90] == 2 ) /*0x1e91a*/
{
RstHelper_ce6c(n0x90, (__int64)i); /*0x1e924*/
if ( v2 ) /*0x1e931*/
{
if ( v2 > v6 ) /*0x1e943*/
v2 = v6; /*0x1e943*/
LABEL_10:
if ( v3 < v6 ) /*0x1e94a*/
v3 = v6; /*0x1e94a*/
goto LABEL_12; /*0x1e94a*/
}
if ( v3 ) /*0x1e936*/
goto LABEL_10; /*0x1e936*/
v2 = v6; /*0x1e938*/
v3 = v6; /*0x1e93b*/
}
LABEL_12:
++n0x90; /*0x1e94e*/
v0 >>= 1; /*0x1e956*/
if ( n0x90 >= 0x90u ) /*0x1e95c*/
return v3 && 100 * (v3 - v2) / v3 > 0xA; /*0x1e95c*/
}
return v3 && 100 * (v3 - v2) / v3 > 0xA; /*0x1e976*/
}
// Function: RstRaidVolCheckCapability @ 0x1e99c (0x1b2 bytes)
// Index: 825/906
bool __fastcall RstRaidVolCheckCapability(__int64 n18, __int64 n127)
{
unsigned __int16 n8; // di
unsigned __int16 n8_1; // si
unsigned __int16 n8_2; // bp
unsigned __int16 n8_3; // bx
unsigned __int16 n8_4; // r12
unsigned __int64 v7; // rbx
__int64 i[3]; // [rsp+20h] [rbp-F8h] BYREF
unsigned __int64 v10; // [rsp+38h] [rbp-E0h]
n8 = 8; /*0x1e9b8*/
n8_1 = 8; /*0x1e9c3*/
n8_2 = 8; /*0x1e9c6*/
n8_3 = 8; /*0x1e9c9*/
n8_4 = 8; /*0x1e9cc*/
if ( (unsigned __int16)n18 >= 0x11u ) /*0x1e9d0*/
{
if ( (unsigned __int16)n18 <= 0x12u ) /*0x1e9d9*/
{
if ( (_WORD)n127 ) /*0x1ea7e*/
{
if ( (unsigned __int16)n127 <= 2u ) /*0x1ea83*/
{
n8 = 290; /*0x1eadc*/
n8_1 = 292; /*0x1eae1*/
n8_2 = 293; /*0x1eae4*/
n8_3 = 294; /*0x1eae7*/
}
else if ( (unsigned __int16)n127 == 7 ) /*0x1ea88*/
{
n8 = 295; /*0x1ea91*/
n8_1 = 296; /*0x1ea96*/
v7 = RstVolFindSmallestCapacity(n0x18); /*0x1eaaa*/
RstHelper_ce6c(n24, (__int64)i); /*0x1eaad*/
if ( v10 > v7 && 100 * (v10 - v7) / v10 > 0xA ) /*0x1eacf*/
n8_4 = 297; /*0x1ead1*/
n8_3 = 298; /*0x1ead5*/
}
}
}
else if ( (unsigned __int16)n18 == 21 && (_WORD)n127 ) /*0x1e9ed*/
{
if ( (unsigned __int16)n127 <= 3u ) /*0x1e9f6*/
{
n8 = 448; /*0x1ea69*/
n8_1 = 449; /*0x1ea6e*/
n8_2 = 450; /*0x1ea71*/
n8_3 = 447; /*0x1ea74*/
}
else
{
switch ( (unsigned __int16)n127 ) /*0x1e9fb*/
{
case 4u: /*0x1e9fb*/
n8 = 452; /*0x1ea56*/
n8_1 = 453; /*0x1ea5b*/
n8_2 = 454; /*0x1ea5e*/
n8_3 = 451; /*0x1ea61*/
break;
case 7u: /*0x1e9fb*/
n8 = 456; /*0x1ea43*/
n8_1 = 457; /*0x1ea48*/
n8_2 = 458; /*0x1ea4b*/
n8_3 = 455; /*0x1ea4e*/
break;
case 0xAu: /*0x1e9fb*/
n8_2 = 757; /*0x1ea12*/
n8_3 = 754; /*0x1ea17*/
n8 = 755; /*0x1ea1a*/
if ( n2 == 1 && RstVolSpareDriveCount() == 1 ) /*0x1ea26*/
n8_1 = 756; /*0x1ea28*/
if ( RstHiiGetBlockConfig() ) /*0x1ea2b*/
n8_4 = 299; /*0x1ea38*/
break;
}
}
}
}
RstHelper_dd38(0x117u, n8); /*0x1eaf2*/
RstHelper_dd38(0x118u, n8_1); /*0x1eaff*/
RstHelper_dd38(0x119u, n8_2); /*0x1eb0c*/
RstHelper_dd38(0x11Cu, n8_3); /*0x1eb19*/
RstHelper_dd38(0x11Au, n8_4); /*0x1eb27*/
return RstHelper_e888(); /*0x1eb44*/
}
// Function: RstRaidCalcStripeBlockSize @ 0x1eb50 (0xef bytes)
// Index: 826/906
__int16 __fastcall RstRaidCalcStripeBlockSize(__int64 n24, unsigned __int64 i)
{
char n24_1; // r12
unsigned __int16 n5; // di
_BYTE *i_; // rbp
__int16 n2; // bx
unsigned __int16 n0x90; // si
int n0x4000; // eax
unsigned __int16 n64; // ax
__int64 ia[30]; // [rsp+20h] [rbp-108h] BYREF
n24_1 = n24; /*0x1eb70*/
n5 = RstDiskNumberToStatusCode(n2_0); /*0x1eb82*/
i_ = i__0; /*0x1eb8d*/
n2 = 0; /*0x1eb94*/
n0x90 = 0; /*0x1eb98*/
word_57EFF = RstDeviceCapFilterByType(n5); /*0x1eb9c*/
do /*0x1ebd2*/
{
if ( *i_ != 1 && !(unsigned int)RstHelper_ce6c(n0x90, (__int64)ia) ) /*0x1ebb5*/
++n2; /*0x1ebbf*/
++n0x90; /*0x1ebc3*/
++i_; /*0x1ebcc*/
}
while ( n0x90 < 0x90u ); /*0x1ebd2*/
n0x4000 = RstRaidCheckDiskCountValid(n2, n5, 0); /*0x1ebdd*/
if ( !n0x4000 || n24_1 ) /*0x1ebea*/
{
if ( n5 ) /*0x1ebf0*/
{
if ( n5 == 5 ) /*0x1ebfd*/
n64 = RstDeviceBlockSizeToStripe(n2); /*0x1ec02*/
else
n64 = 64; /*0x1ec09*/
}
else
{
n64 = 128; /*0x1ebf2*/
}
LOWORD(n0x4000) = RstRaidRoundDownCapacity(n64); /*0x1ec11*/
n0x4000 = n0x4000; /*0x1ec16*/
}
return n0x4000; /*0x1ec35*/
}
// Function: Assert_67 @ 0x1ec40 (0x5e bytes)
// Index: 827/906
__int64 Assert_67()
{
if ( n2_0 != 4 ) /*0x1ec50*/
return 5; /*0x1ec92*/
if ( n4 == 1 ) /*0x1ec5c*/
return 3; /*0x1ec97*/
if ( n4 != 2 ) /*0x1ec61*/
{
if ( n4 != 4 ) /*0x1ec66*/
{
if ( (unsigned __int8)RstDebugEnabled((unsigned int)(unsigned __int8)n4 - 2, 4) ) /*0x1ec68*/
DebugAssert("HiiStandalone.cpp", 0x5B7u, "((BOOLEAN)(0==1))"); /*0x1ec84*/
}
return 5; /*0x1ec84*/
}
return 4; /*0x1ec8e*/
}
// Function: RstHelper_eca0 @ 0x1eca0 (0x50b bytes)
// Index: 828/906
__int64 __fastcall RstHelper_eca0(char a1, char a2)
{
unsigned __int16 v3; // bp
unsigned __int16 n0x90; // bx
unsigned __int64 v5; // rdi
__int16 v6; // dx
unsigned __int16 n5; // r8
__int16 n512; // ax
unsigned __int8 v9; // al
__int64 v10; // rdx
__int64 n12; // rdi
char *v12; // rax
const CHAR8 *Language; // rbx
__int16 n49; // ax
CHAR8 *Language_1; // rcx
unsigned __int64 v16; // r9
const CHAR8 *StringToLanguage; // rax
const CHAR8 *StringToLanguage_1; // rbx
unsigned __int64 v19; // r10
char *v21; // [rsp+30h] [rbp-188h] BYREF
__int64 v22; // [rsp+38h] [rbp-180h]
__int64 v23; // [rsp+40h] [rbp-178h]
__int64 n4; // [rsp+48h] [rbp-170h]
_BYTE v25[16]; // [rsp+50h] [rbp-168h] BYREF
char v26[16]; // [rsp+60h] [rbp-158h] BYREF
char v27; // [rsp+70h] [rbp-148h]
_BYTE v28[24]; // [rsp+78h] [rbp-140h] BYREF
__int64 i[16]; // [rsp+90h] [rbp-128h] BYREF
unsigned __int16 v30; // [rsp+110h] [rbp-A8h]
unsigned __int64 v32; // [rsp+1D0h] [rbp+18h] BYREF
unsigned __int64 v33; // [rsp+1D8h] [rbp+20h] BYREF
v21 = 0; /*0x1ecc3*/
v22 = 0; /*0x1ecc8*/
v23 = 0; /*0x1eccd*/
n4 = 0; /*0x1ecd2*/
v3 = -1; /*0x1ecd7*/
n0x90 = 0; /*0x1ece1*/
v5 = RstVolGetOnlineMemberMask(); /*0x1ecec*/
while ( v5 ) /*0x1ecf2*/
{
if ( (v5 & 1) != 0 ) /*0x1ecf7*/
{
if ( i__0[n0x90] == 1 ) /*0x1ed0a*/
{
v6 = 0; /*0x1ed16*/
LABEL_8:
RstDeviceSetPropertyByIndex(n0x90, v6, 0); /*0x1ed18*/
}
else if ( i__0[n0x90] == 2 ) /*0x1ed0f*/
{
v6 = 1; /*0x1ed11*/
goto LABEL_8; /*0x1ed14*/
}
if ( v3 == 0xFFFF && i__0[n0x90] != 1 ) /*0x1ed34*/
{
RstHelper_ce6c(n0x90, (__int64)i); /*0x1ed41*/
v3 = v30; /*0x1ed46*/
}
}
++n0x90; /*0x1ed4e*/
v5 >>= 1; /*0x1ed57*/
if ( n0x90 >= 0x90u ) /*0x1ed5d*/
break; /*0x1ed5d*/
}
RstUnicodeStrnToAsciiStrn(v26, 0x10u, (char *)&i__5 + 1); /*0x1ed5f*/
v21 = v26; /*0x1ed83*/
v27 = 0; /*0x1ed88*/
n5 = RstDiskNumberToStatusCode(n2_0); /*0x1eda3*/
WORD1(v23) = n5; /*0x1eda7*/
if ( (unsigned __int16)n0x4000 > 0x80u ) /*0x1edaf*/
{
n512 = 512; /*0x1ee18*/
if ( n0x4000 != 256 ) /*0x1ee1d*/
{
n512 = 1024; /*0x1ee21*/
if ( n0x4000 != 512 ) /*0x1ee26*/
{
n512 = 2048; /*0x1ee2a*/
if ( n0x4000 != 1024 ) /*0x1ee2f*/
{
n512 = 4096; /*0x1ee33*/
if ( n0x4000 != 2048 ) /*0x1ee38*/
{
n512 = 0x2000; /*0x1ee3c*/
if ( n0x4000 != 4096 ) /*0x1ee41*/
{
n512 = 0x4000; /*0x1ee45*/
if ( n0x4000 != 0x2000 ) /*0x1ee4a*/
{
if ( n0x4000 != 0x4000 ) /*0x1ee4e*/
goto LABEL_37; /*0x1ee4e*/
n512 = 0x8000; /*0x1ee58*/
}
}
}
}
}
}
goto LABEL_39; /*0x1ee58*/
}
switch ( n0x4000 ) /*0x1edb1*/
{
case 128: /*0x1edb1*/
n512 = 256; /*0x1ee0a*/
goto LABEL_39; /*0x1ee0f*/
case 1: /*0x1edb1*/
LOWORD(v23) = 2; /*0x1ee03*/
goto LABEL_40; /*0x1ee08*/
case 2: /*0x1edb1*/
LOWORD(v23) = 4; /*0x1edfc*/
goto LABEL_40; /*0x1ee01*/
case 4: /*0x1edb1*/
n512 = 8; /*0x1edf5*/
goto LABEL_39; /*0x1edfa*/
case 8: /*0x1edb1*/
LOWORD(v23) = 16; /*0x1edee*/
goto LABEL_40; /*0x1edf3*/
case 16: /*0x1edb1*/
n512 = 32; /*0x1ede7*/
goto LABEL_39; /*0x1edec*/
case 32: /*0x1edb1*/
n512 = 64; /*0x1ede0*/
LABEL_39:
LOWORD(v23) = n512; /*0x1ee5d*/
goto LABEL_40; /*0x1ee5d*/
case 64: /*0x1edb1*/
LOWORD(v23) = 128; /*0x1edd5*/
goto LABEL_40; /*0x1eddb*/
}
LABEL_37:
LOWORD(v23) = 0; /*0x1ee50*/
LABEL_40:
v9 = RstBlockSizeToStatus(n5); /*0x1ee62*/
v32 = 0; /*0x1ee8e*/
v33 = 0; /*0x1ee96*/
WORD2(v23) = v9; /*0x1eea3*/
RstParseDecimalString((__int64)dword_57E41, 9u, 2u, &v32, &v33); /*0x1eea9*/
if ( a2 ) /*0x1eebb*/
{
LODWORD(v22) = 0; /*0x1eebd*/
}
else
{
v10 = ((v33 << 10) * (unsigned __int128)0x47AE147AE147AE15uLL) >> 64; /*0x1eed0*/
LODWORD(v22) = ((_DWORD)v32 << 10) + ((v10 + (((v33 << 10) - v10) >> 1)) >> 6); /*0x1eeec*/
}
LODWORD(n4) = Assert_67(); /*0x1eefd*/
if ( (_DWORD)n4 == 4 ) /*0x1ef03*/
RstDeviceSetPropertyByIndex((unsigned __int8)n0x90, 1, 3); /*0x1ef12*/
n12 = (unsigned int)Assert_116((__int64)&v21, v3, a1 == 0, 1); /*0x1ef30*/
v12 = (char *)RstErrorCodeToString(n12); /*0x1ef32*/
RstAsciiStrnToUnicodeStrn(StartOfBuffer, 0x96u, v12); /*0x1ef46*/
HiiGetString(HiiHandle, 0x24Fu, StartOfBuffer); /*0x1ef61*/
if ( (_DWORD)n12 ) /*0x1ef70*/
{
if ( (_DWORD)n12 != 12 ) /*0x1f06d*/
{
StringToLanguage = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, 0x24Du, 0); /*0x1f07e*/
StringToLanguage_1 = StringToLanguage; /*0x1f083*/
if ( StringToLanguage ) /*0x1f089*/
{
HiiGetString(HiiHandle, 0x24Cu, StringToLanguage); /*0x1f09d*/
(*(void (__fastcall **)(const CHAR8 *))(qword_58070 + 72))(StringToLanguage_1); /*0x1f0ac*/
}
}
goto LABEL_59; /*0x1f0ac*/
}
if ( !a2 ) /*0x1ef79*/
{
LABEL_59:
LODWORD(v16) = v22; /*0x1f0af*/
goto LABEL_60; /*0x1f0af*/
}
Language = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, 0x24Eu, 0); /*0x1ef9d*/
if ( Language ) /*0x1efa3*/
{
RstHelper_8da8( /*0x1efef*/
(__int64)v28,
0x13u,
"%d.%02d",
(unsigned int)v22 >> 10,
((100 * (unsigned __int64)(unsigned int)v22) >> 10) % 0x64);
n49 = *(_WORD *)Language; /*0x1eff4*/
Language_1 = (CHAR8 *)Language; /*0x1eff7*/
while ( n49 && n49 != 49 ) /*0x1f000*/
{
Language_1 += 2; /*0x1f002*/
n49 = *(_WORD *)Language_1; /*0x1f005*/
}
if ( *(_WORD *)Language_1 ) /*0x1f00e*/
{
RstAsciiStrnToUnicodeStrn(Language_1, 0x14u, v28); /*0x1f01e*/
HiiGetString(HiiHandle, 0x24Cu, Language); /*0x1f035*/
}
(*(void (__fastcall **)(const CHAR8 *))(qword_58070 + 72))(Language); /*0x1f044*/
}
v16 = 95 * (unsigned __int64)(unsigned int)v22 / 0x64; /*0x1f05f*/
LODWORD(v22) = v16; /*0x1f063*/
LABEL_60:
v25[0] = 0; /*0x1f0be*/
*(_QWORD *)&v25[1] = 0; /*0x1f0c8*/
if ( (10000 * (unsigned __int64)(unsigned int)v16) >> 10 != 100 /*0x1f10c*/
* (((10000 * (unsigned __int64)(unsigned int)v16) >> 10)
/ 0x64)
&& v32
&& v33 )
{
LODWORD(v19) = ((100 * (unsigned __int64)(unsigned int)v16) >> 10) % 0x64 + 1; /*0x1f133*/
}
else
{
v19 = ((100 * (unsigned __int64)(unsigned int)v16) >> 10) % 0x64; /*0x1f15a*/
}
RstHelper_8da8((__int64)v25, 9u, "%d.%02d", (unsigned int)v16 >> 10, v19); /*0x1f176*/
RstAsciiStrnToUnicodeStrn(dword_57E41, 9u, v25); /*0x1f189*/
return (unsigned int)n12; /*0x1f198*/
}
// Function: RstHelper_f1ac @ 0x1f1ac (0x248 bytes)
// Index: 829/906
bool __fastcall RstHelper_f1ac(unsigned __int16 a1)
{
unsigned int i_2; // eax
unsigned int i_3; // ebx
unsigned __int16 n5; // ax
__int64 i_1; // rax
unsigned __int64 j; // rdx
unsigned __int16 v7; // bx
unsigned __int16 n5_1; // ax
__int64 j_1; // rax
unsigned __int64 v10; // r12
unsigned __int16 k; // bp
int v12; // ebx
bool v13; // al
__int64 i[16]; // [rsp+20h] [rbp-108h] BYREF
__int16 v16; // [rsp+A0h] [rbp-88h]
int n2; // [rsp+B4h] [rbp-74h]
HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1f1e9*/
RstHelper_ce6c(a1, (__int64)i); /*0x1f1f7*/
if ( n2 == 2 ) /*0x1f204*/
{
i_2 = RstVolFindDevicesByLevel(v16); /*0x1f212*/
i_3 = i_2; /*0x1f220*/
if ( *((_BYTE *)&i__5 + a1 + 71) == 1 ) /*0x1f227*/
{
byte_57F34 = 0; /*0x1f230*/
n5 = RstDiskNumberToStatusCode(n2_0); /*0x1f237*/
i_1 = Assert_115(n5_0, n5, 0, 0); /*0x1f24b*/
i_0 = i_1; /*0x1f257*/
if ( n2 == 2 ) /*0x1f25e*/
i_0 = ~dword_57F1F & (unsigned int)i_1; /*0x1f26b*/
}
else
{
i_0 = i_2; /*0x1f274*/
byte_57F34 = 1; /*0x1f27b*/
}
for ( j = 0; i_3; i_3 >>= 1 ) /*0x1f287*/
{
if ( (i_3 & 1) != 0 ) /*0x1f290*/
*((_BYTE *)&i__5 + (unsigned __int16)j + 71) = *((_BYTE *)&i__5 + a1 + 71); /*0x1f29a*/
LOWORD(j) = j + 1; /*0x1f29f*/
}
}
else if ( *((_BYTE *)&i__5 + a1 + 71) == 1 ) /*0x1f2b9*/
{
v7 = 0; /*0x1f2c4*/
n5_1 = RstDiskNumberToStatusCode(n2_0); /*0x1f2c7*/
j_1 = Assert_115(n5_0, n5_1, 0, 0); /*0x1f2db*/
j = j_1; /*0x1f2e0*/
if ( j_1 ) /*0x1f2e6*/
{
while ( (j & 1) == 0 || *((_BYTE *)&i__5 + v7 + 71) == 1 ) /*0x1f2f5*/
{
j >>= 1; /*0x1f2fb*/
++v7; /*0x1f2fe*/
if ( !j ) /*0x1f304*/
goto LABEL_16; /*0x1f304*/
}
}
else
{
LABEL_16:
i_0 = j_1; /*0x1f306*/
if ( n2 == 2 ) /*0x1f314*/
i_0 = (unsigned int)j_1 & ~dword_57F1F; /*0x1f321*/
}
}
else
{
v10 = RstVolGetOnlineMemberMask(); /*0x1f331*/
for ( k = 0; v10; ++k ) /*0x1f33a*/
{
if ( !(unsigned int)RstHelper_ce6c(k, (__int64)i) ) /*0x1f344*/
{
if ( n2 == 2 || n2 == 2 && (v12 = RstDeviceGetRaidLevelByIndex(k), v12 != (unsigned int)RstDeviceGetRaidLevelByIndex(a1)) ) /*0x1f375*/
i_0 &= ~(1LL << k); /*0x1f383*/
}
v10 >>= 1; /*0x1f38a*/
}
}
RstRaidCalcStripeBlockSize(0, j); /*0x1f397*/
byte_57F08 = (unsigned int)RstHelper_eca0(1, 1) == 0; /*0x1f3a9*/
if ( RstVolSpareDriveCount() || (v13 = RstHiiGetBlockConfig(), byte_57F55 = 0, v13) ) /*0x1f3c9*/
byte_57F55 = 1; /*0x1f3cb*/
return RstHelper_e888(); /*0x1f3eb*/
}
// Function: RstHelper_f3f4 @ 0x1f3f4 (0xa3 bytes)
// Index: 830/906
bool __fastcall RstHelper_f3f4(unsigned __int16 n24)
{
__int64 n24_1; // rcx
unsigned __int64 i; // rdx
unsigned __int16 n5; // ax
__int64 i_1; // rax
HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1f413*/
LOBYTE(n24_1) = 1; /*0x1f418*/
RstRaidCalcStripeBlockSize(n24_1, i); /*0x1f41a*/
byte_57F33 = 0; /*0x1f42e*/
MemZero(i__0, 1, 144); /*0x1f435*/
n5 = RstDiskNumberToStatusCode(n2_0); /*0x1f441*/
i_1 = Assert_115(n5_0, n5, 0, 0); /*0x1f455*/
i_0 = i_1; /*0x1f461*/
if ( n2 == 2 ) /*0x1f468*/
i_0 = ~dword_57F1F & (unsigned int)i_1; /*0x1f475*/
byte_57F08 = (unsigned int)RstHelper_eca0(1, 1) == 0; /*0x1f487*/
return RstHelper_e888(); /*0x1f48e*/
}
// Function: RstHelper_f498 @ 0x1f498 (0x164 bytes)
// Index: 831/906
__int16 __fastcall RstHelper_f498(__int64 i, unsigned int n5)
{
int v4; // eax
unsigned int v5; // ecx
int v6; // r11d
__int16 n8; // ax
int v8; // r11d
int v9; // r11d
int v10; // r11d
int n8_1; // r11d
unsigned __int16 n5_1; // ax
__int16 result; // ax
_BYTE ia[16]; // [rsp+20h] [rbp-38h] BYREF
CHAR16 Source[20]; // [rsp+30h] [rbp-28h] BYREF
MemZero((_BYTE *)i, 0, 310); /*0x1f4b9*/
*(_DWORD *)(i + 215) = n5; /*0x1f4c5*/
*(_BYTE *)(i + 269) = -1; /*0x1f4cb*/
*(_BYTE *)(i + 283) = 2; /*0x1f4d2*/
*(_BYTE *)(i + 270) = -1; /*0x1f4d9*/
*(_BYTE *)i = RstRaidCheckLevelConfigurable(n5); /*0x1f4eb*/
v4 = RstDeviceCountConfigured(); /*0x1f4ed*/
v5 = *(_DWORD *)(i + 215); /*0x1f4f2*/
*(_DWORD *)(i + 259) = v4; /*0x1f4f8*/
*(_QWORD *)(i + 239) = RstVolFindDevicesByProperty(v5); /*0x1f503*/
*(_DWORD *)(i + 255) = RstVolumeCheckMixedRaidType(); /*0x1f50f*/
*(_DWORD *)(i + 219) = HiiBlockCompareConst(); /*0x1f527*/
MemZero(ia, 0, 16); /*0x1f52d*/
MemZero(Source, 0, 32); /*0x1f53f*/
RstHelper_cc54(ia, 0x10u); /*0x1f54b*/
RstAsciiStrnToUnicodeStrn(Source, 0x10u, ia); /*0x1f55c*/
StrnCpy((CHAR16 *)(i + 1), Source, 0x20u); /*0x1f56d*/
word_57E53 = RstRaidCheckLevelSupport(*(_DWORD *)(i + 215)); /*0x1f57d*/
v6 = (unsigned __int16)RstRaidLevelToBitmap(*(_DWORD *)(i + 215)); /*0x1f58f*/
n8 = 1; /*0x1f593*/
v8 = v6 - 1; /*0x1f596*/
if ( v8 ) /*0x1f599*/
{
v9 = v8 - 1; /*0x1f59b*/
if ( v9 ) /*0x1f59e*/
{
v10 = v9 - 2; /*0x1f5a0*/
if ( v10 ) /*0x1f5a3*/
{
n8_1 = v10 - 4; /*0x1f5a5*/
n8 = 8; /*0x1f5a9*/
if ( n8_1 ) /*0x1f5ac*/
{
if ( n8_1 == 8 ) /*0x1f5b1*/
n8 = 16; /*0x1f5ba*/
else
n8 = -1; /*0x1f5b3*/
}
}
else
{
n8 = 4; /*0x1f5bf*/
}
}
else
{
n8 = 2; /*0x1f5c6*/
}
}
n2_0 = n8; /*0x1f5cc*/
n5_1 = RstDiskNumberToStatusCode(n8); /*0x1f5d3*/
result = RstDeviceCapFilterByType(n5_1); /*0x1f5db*/
word_57EFF = result; /*0x1f5ef*/
return result; /*0x1f5f6*/
}
// Function: RstHelper_f5fc @ 0x1f5fc (0x24d bytes)
// Index: 832/906
EFI_STRING __fastcall RstHelper_f5fc(char a1)
{
int v2; // eax
int v3; // eax
int v4; // eax
unsigned __int16 n750; // ax
__int64 StringToLanguage; // rbx
__int64 v7; // rax
EFI_STRING result; // rax
unsigned int v9; // esi
unsigned __int8 n0x18; // bp
unsigned __int16 v11; // di
unsigned __int16 v12; // ax
__int64 v13; // rbx
__int64 v14; // rax
EFI_STRING_ID _stuvwxyz_____; // cx
_BYTE i_3[16]; // [rsp+40h] [rbp-118h] BYREF
_WORD i_2[12]; // [rsp+50h] [rbp-108h] BYREF
_WORD i[20]; // [rsp+68h] [rbp-F0h] BYREF
__int64 i_1[4]; // [rsp+90h] [rbp-C8h] BYREF
unsigned int v20; // [rsp+B4h] [rbp-A4h]
unsigned __int64 v21; // [rsp+B8h] [rbp-A0h]
int n55_1; // [rsp+11Ch] [rbp-3Ch]
int n55; // [rsp+120h] [rbp-38h]
RstHelper_f498((__int64)&i__5, 0); /*0x1f622*/
if ( a1 ) /*0x1f629*/
RstHelper_e888(); /*0x1f62b*/
v2 = RstGetGlobalMode(); /*0x1f630*/
if ( v2 ) /*0x1f637*/
{
v3 = v2 - 1; /*0x1f639*/
if ( !v3 ) /*0x1f63c*/
{
n750 = 750; /*0x1f656*/
goto LABEL_11; /*0x1f65b*/
}
v4 = v3 - 1; /*0x1f63e*/
if ( !v4 ) /*0x1f641*/
{
n750 = 751; /*0x1f64f*/
goto LABEL_11; /*0x1f654*/
}
if ( v4 == 1 ) /*0x1f646*/
{
n750 = 752; /*0x1f648*/
goto LABEL_11; /*0x1f64d*/
}
}
n750 = 749; /*0x1f65d*/
LABEL_11:
StringToLanguage = HiiGetStringToLanguage(HiiHandle, n750, 0); /*0x1f662*/
v7 = HiiGetStringToLanguage(HiiHandle, 0x2ECu, 0); /*0x1f686*/
HiiCfgArrayGet(StartOfBuffer, 0x12Cu, (unsigned __int8 *)L"%s %s", v7, StringToLanguage); /*0x1f6ad*/
result = HiiGetString(HiiHandle, 0x2F1u, StartOfBuffer); /*0x1f6c4*/
v9 = dword_57F23; /*0x1f6c9*/
if ( dword_57F23 ) /*0x1f6d1*/
{
n0x18 = 0; /*0x1f6d7*/
do /*0x1f826*/
{
if ( (v9 & 1) != 0 ) /*0x1f6e6*/
{
RstHelper_c8a8(n0x18, (__int64)i_1); /*0x1f6f7*/
MemZero(StartOfBuffer, 0, 300); /*0x1f704*/
MemZero(i, 0, 34); /*0x1f714*/
MemZero(i_2, 0, 20); /*0x1f724*/
MemZero(i_3, 0, 10); /*0x1f734*/
RstAsciiStrnToUnicodeStrn(i, 0x11u, (_BYTE *)i_1 + 4); /*0x1f74b*/
RstFormatDiskSize((__int64)i_3, v21, v20, 1, 0); /*0x1f76d*/
RstAsciiStrnToUnicodeStrn(i_2, 0xAu, i_3); /*0x1f781*/
v11 = RstDeviceTypeToHiiStringId(n55); /*0x1f799*/
v12 = RstDeviceTypeToHiiStringId(n55_1); /*0x1f79c*/
v13 = HiiGetStringToLanguage(HiiHandle, v12, 0); /*0x1f7c0*/
v14 = HiiGetStringToLanguage(HiiHandle, v11, 0); /*0x1f7c3*/
HiiCfgArrayGet(StartOfBuffer, 0x12Cu, (unsigned __int8 *)L"%s, %s, %s, %s", i, v14, i_2, v13); /*0x1f7ee*/
if ( n0x18 >= 0x18u ) /*0x1f7f7*/
_stuvwxyz_____ = 0; /*0x1f80a*/
else
_stuvwxyz_____ = aStuvwxyz[n0x18]; // "stuvwxyz{|}~" /*0x1f804*/
result = HiiGetString(HiiHandle, _stuvwxyz_____, StartOfBuffer); /*0x1f81c*/
}
++n0x18; /*0x1f821*/
v9 >>= 1; /*0x1f824*/
}
while ( v9 ); /*0x1f826*/
}
return result; /*0x1f840*/
}
// Function: RstHelper_f84c @ 0x1f84c (0x255 bytes)
// Index: 833/906
EFI_STRING __fastcall RstHelper_f84c(unsigned int n5)
{
EFI_STRING result; // rax
unsigned int v2; // esi
unsigned __int8 n0x18; // bp
unsigned __int16 v4; // di
unsigned __int16 v5; // ax
__int64 StringToLanguage; // rbx
__int64 v7; // rax
EFI_STRING_ID StringId; // cx
unsigned __int64 v9; // rdi
unsigned __int8 n0x30; // bl
EFI_STRING_ID StringId_1; // si
const CHAR8 *Language; // rax
EFI_STRING_ID StringId_2; // si
const CHAR8 *Language_1; // rax
_BYTE i_3[16]; // [rsp+40h] [rbp-108h] BYREF
_WORD i_2[12]; // [rsp+50h] [rbp-F8h] BYREF
_WORD i[20]; // [rsp+68h] [rbp-E0h] BYREF
__int64 i_1[4]; // [rsp+90h] [rbp-B8h] BYREF
unsigned int v19; // [rsp+B4h] [rbp-94h]
unsigned __int64 v20; // [rsp+B8h] [rbp-90h]
int n55_1; // [rsp+11Ch] [rbp-2Ch]
int n55; // [rsp+120h] [rbp-28h]
RstHelper_f498((__int64)&i__5, n5); /*0x1f871*/
RstHelper_e888(); /*0x1f876*/
result = RstHelper_dd38(0x96u, 0x90u); /*0x1f883*/
v2 = dword_57F23; /*0x1f888*/
if ( dword_57F23 ) /*0x1f897*/
{
n0x18 = 0; /*0x1f89d*/
do /*0x1f9fb*/
{
if ( (v2 & 1) != 0 ) /*0x1f8ac*/
{
RstHelper_c8a8(n0x18, (__int64)i_1); /*0x1f8bd*/
MemZero(StartOfBuffer, 0, 300); /*0x1f8d1*/
MemZero(i, 0, 34); /*0x1f8e1*/
MemZero(i_2, 0, 20); /*0x1f8f1*/
MemZero(i_3, 0, 10); /*0x1f901*/
RstAsciiStrnToUnicodeStrn(i, 0x11u, (_BYTE *)i_1 + 4); /*0x1f918*/
RstFormatDiskSize((__int64)i_3, v20, v19, 1, 0); /*0x1f93a*/
RstAsciiStrnToUnicodeStrn(i_2, 0xAu, i_3); /*0x1f94e*/
v4 = RstDeviceTypeToHiiStringId(n55); /*0x1f966*/
v5 = RstDeviceTypeToHiiStringId(n55_1); /*0x1f969*/
StringToLanguage = HiiGetStringToLanguage(HiiHandle, v5, 0); /*0x1f98d*/
v7 = HiiGetStringToLanguage(HiiHandle, v4, 0); /*0x1f990*/
HiiCfgArrayGet(StartOfBuffer, 0x12Cu, (unsigned __int8 *)L"%s, %s, %s, %s", i, v7, i_2, StringToLanguage); /*0x1f9c1*/
if ( n0x18 >= 0x18u ) /*0x1f9ca*/
StringId = 0; /*0x1f9db*/
else
StringId = *(__int16 *)((char *)&word_27A00 + (_QWORD)&_ImageBase[n0x18]); /*0x1f9d0*/
result = HiiGetString(HiiHandle, StringId, StartOfBuffer); /*0x1f9f1*/
}
++n0x18; /*0x1f9f6*/
v2 >>= 1; /*0x1f9f9*/
}
while ( v2 ); /*0x1f9fb*/
}
v9 = qword_57F0F; /*0x1fa01*/
if ( qword_57F0F ) /*0x1fa0b*/
{
n0x30 = 0; /*0x1fa0d*/
do /*0x1fa81*/
{
if ( (v9 & 1) != 0 ) /*0x1fa18*/
{
if ( n0x30 >= 0x30u ) /*0x1fa1d*/
StringId_1 = 0; /*0x1fa2d*/
else
StringId_1 = *(__int16 *)((char *)&word_27A30 + (_QWORD)&_ImageBase[n0x30]); /*0x1fa22*/
Language = RstHelper_dd6c(n0x30); /*0x1fa31*/
HiiGetString(HiiHandle, StringId_1, Language); /*0x1fa46*/
if ( n0x30 >= 0x30u ) /*0x1fa4e*/
StringId_2 = 0; /*0x1fa5e*/
else
StringId_2 = *(__int16 *)((char *)&word_27A90 + (_QWORD)&_ImageBase[n0x30]); /*0x1fa53*/
Language_1 = RstHelper_dee0(n0x30); /*0x1fa62*/
result = HiiGetString(HiiHandle, StringId_2, Language_1); /*0x1fa77*/
}
++n0x30; /*0x1fa7c*/
v9 >>= 1; /*0x1fa7e*/
}
while ( v9 ); /*0x1fa81*/
}
return result; /*0x1fa9b*/
}
// Function: RstHelper_faa4 @ 0x1faa4 (0xf1 bytes)
// Index: 834/906
void __fastcall RstHelper_faa4(__int16 n10)
{
unsigned int n12; // ebx
char *v2; // rax
__int64 StringToLanguage; // rax
__int16 n23; // [rsp+50h] [rbp+8h] BYREF
__int16 n13; // [rsp+52h] [rbp+Ah]
if ( n10 == 1 || n10 == 10 ) /*0x1fac3*/
{
HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1fae4*/
n12 = RstHelper_eca0(0, 0); /*0x1faf2*/
if ( n12 ) /*0x1faf6*/
{
do /*0x1fb66*/
{
v2 = (char *)RstErrorCodeToString(n12); /*0x1fb0d*/
RstAsciiStrnToUnicodeStrn(StartOfBuffer, 0x96u, v2); /*0x1fb1d*/
StringToLanguage = HiiGetStringToLanguage(HiiHandle, 0x252u, 0); /*0x1fb31*/
ConsolePrintBoxed(23, &n23, &unk_2442C, StringToLanguage, StartOfBuffer, &unk_2442C, 0); /*0x1fb54*/
}
while ( n23 != 23 && n13 != 13 ); /*0x1fb66*/
}
((void (*)(void))qword_35418[42])(); /*0x1fb6f*/
RstHelper_f84c(n5_0); /*0x1fb7b*/
}
}
// Function: RstHelper_fb98 @ 0x1fb98 (0x2da bytes)
// Index: 835/906
char __fastcall RstHelper_fb98(__int16 j)
{
int n14; // eax
unsigned __int16 v3; // ax
unsigned __int8 n0x30; // bl
unsigned __int16 v5; // ax
unsigned __int16 v6; // ax
unsigned __int64 v7; // rsi
unsigned __int8 n24; // di
EFI_STRING_ID StringId; // ax
const CHAR8 *Language; // r8
EFI_STRING_ID StringId_1; // ax
const CHAR8 *Language_1; // r8
__int64 n5; // rdx
__int16 n8; // ax
_WORD *n0x90; // rcx
unsigned int v16; // edi
EFI_STRING_ID n744; // si
CHAR8 *Language_2; // rax
_BYTE i[112]; // [rsp+30h] [rbp-78h] BYREF
n14 = RstHelper_c8a8(j, (__int64)&i__1); /*0x1fbbe*/
if ( n14 != 14 ) /*0x1fbc6*/
{
dword_57F09 = dword_58008; /*0x1fbde*/
n0x18 = j; /*0x1fbe4*/
RstHelper_dca0(0x132u, (_BYTE *)&i__1 + 4); /*0x1fbeb*/
v3 = RstDeviceTypeToHiiStringId(n55); /*0x1fbf6*/
RstHelper_dd38(0x135u, v3); /*0x1fc03*/
MemZero(i, 0, 100); /*0x1fc13*/
n0x30 = 0; /*0x1fc2b*/
RstFormatDiskSize((__int64)i, qword_57F98, dword_57F94, 1, 0); /*0x1fc34*/
RstHelper_dca0(0x13Au, i); /*0x1fc43*/
v5 = RstDeviceTypeToHiiStringId(n55_0); /*0x1fc4e*/
RstHelper_dd38(0x13Du, v5); /*0x1fc5b*/
RstHelper_dd38(0x140u, 10 - (byte_57FF8 != 0)); /*0x1fc76*/
RstHelper_8da8((__int64)i, 0x63u, "%ld", dword_57F94); /*0x1fc96*/
RstHelper_dca0(0x143u, i); /*0x1fca5*/
v6 = RstDeviceTypeToHiiStringId(n55_1); /*0x1fcb0*/
RstHelper_dd38(0x137u, v6); /*0x1fcbd*/
v7 = RstRaidMemberOnlineBitmask(j); /*0x1fcca*/
qword_57F17 = v7; /*0x1fccd*/
if ( v7 ) /*0x1fcd7*/
{
n24 = 0; /*0x1fcd9*/
do /*0x1fd35*/
{
if ( (v7 & 1) != 0 ) /*0x1fce0*/
{
RstHelper_dd6c(n24); /*0x1fce5*/
StringId = RstInitMethodToHiiStringId(n24); /*0x1fcf0*/
HiiGetString(HiiHandle, StringId, Language); /*0x1fd02*/
RstHelper_dee0(n24); /*0x1fd0a*/
StringId_1 = RstSpareTypeToHiiStringId(n24); /*0x1fd15*/
HiiGetString(HiiHandle, StringId_1, Language_1); /*0x1fd27*/
}
v7 >>= 1; /*0x1fd2c*/
++n24; /*0x1fd2f*/
}
while ( v7 ); /*0x1fd35*/
}
n5 = (unsigned int)n5; /*0x1fd37*/
if ( (_WORD)n5 ) /*0x1fd4d*/
{
switch ( (unsigned __int16)n5 ) /*0x1fd52*/
{
case 1u: /*0x1fd52*/
n2_0 = 2; /*0x1fd76*/
goto LABEL_17; /*0x1fd7e*/
case 5u: /*0x1fd52*/
n2_0 = 4; /*0x1fd6c*/
goto LABEL_17; /*0x1fd74*/
case 0xAu: /*0x1fd52*/
n8 = 8; /*0x1fd65*/
break;
default:
n8 = -1; /*0x1fd5e*/
break;
}
}
else
{
n8 = 32; /*0x1fd80*/
}
n2_0 = n8; /*0x1fd85*/
LABEL_17:
if ( n5 != 5 ) /*0x1fd8f*/
{
dword_57F35 = 0; /*0x1fe49*/
goto LABEL_35; /*0x1fe49*/
}
LOBYTE(n5) = n0x90_0; /*0x1fd95*/
v16 = Assert_23(n5_0, n5); /*0x1fda6*/
dword_57F35 = v16; /*0x1fda8*/
if ( v16 ) /*0x1fdb0*/
{
do /*0x1fdf2*/
{
if ( (v16 & 1) != 0 ) /*0x1fdb6*/
{
if ( n0x30 >= 0x30u ) /*0x1fdbb*/
{
n744 = 744; /*0x1fdcd*/
}
else
{
n0x90 = n0x90_2; /*0x1fdbd*/
n744 = n0x90_2[n0x30]; /*0x1fdc7*/
}
LOBYTE(n0x90) = n0x30; /*0x1fdd2*/
Language_2 = RstHelper_ddc8((unsigned __int64)n0x90); /*0x1fdd4*/
HiiGetString(HiiHandle, n744, Language_2); /*0x1fde9*/
}
++n0x30; /*0x1fdee*/
v16 >>= 1; /*0x1fdf0*/
}
while ( v16 ); /*0x1fdf2*/
v16 = dword_57F35; /*0x1fdf4*/
}
if ( n2_1 != 1 ) /*0x1fe03*/
{
if ( n2_1 == 2 ) /*0x1fe08*/
goto LABEL_31; /*0x1fe08*/
if ( n2_1 != 3 ) /*0x1fe0d*/
{
if ( n2_1 != 4 ) /*0x1fe12*/
{
n4 = 4; /*0x1fe14*/
LABEL_35:
LOBYTE(n14) = RstHelper_e888(); /*0x1fe4f*/
return n14; /*0x1fe4f*/
}
LABEL_31:
n4 = 2; /*0x1fe1d*/
n0x90 = n0x90_0; /*0x1fe2a*/
if ( (_BYTE)n0x90_0 == 0xFF ) /*0x1fe32*/
dword_57F35 = v16 | 0x80000000; /*0x1fe38*/
goto LABEL_35; /*0x1fe3e*/
}
}
n4 = 1; /*0x1fe40*/
goto LABEL_35; /*0x1fe47*/
}
return n14; /*0x1fe6c*/
}
// Function: RstHelper_fe74 @ 0x1fe74 (0xed bytes)
// Index: 836/906
bool RstHelper_fe74()
{
unsigned int n2; // eax
char n0x90; // bl
unsigned int v3; // eax
HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1fe95*/
dword_57F09 &= ~0x80000000; /*0x1fe9a*/
if ( n5 == 5 ) /*0x1fea9*/
{
n2 = Assert_67(); /*0x1feab*/
n0x90 = 0; /*0x1feb0*/
if ( n2 < 2 || n2 == 3 ) /*0x1fec0*/
goto LABEL_6; /*0x1fec0*/
if ( n2 != 4 ) /*0x1fec5*/
{
if ( n2 != 5 ) /*0x1feca*/
{
LABEL_8:
n0x90 = n0x90_0; /*0x1fedc*/
return RstHelper_e888(); /*0x1fee2*/
}
LABEL_6:
if ( n2_1 != n2 ) /*0x1fed2*/
dword_57F09 |= 0x80000000; /*0x1fed4*/
goto LABEL_8; /*0x1fed4*/
}
if ( n2_1 != 4 || (_BYTE)n0x90_0 != n0x90 ) /*0x1ff09*/
{
dword_57F09 |= 0x80000000; /*0x1ff0b*/
if ( n2_1 != 4 ) /*0x1ff16*/
{
if ( RstDebugEnabled() && _bittest(&dword_57F35, 0x1Fu) ) /*0x1ff21*/
DebugAssert("HiiStandalone.cpp", 0x932u, "( hii_g_Configuration.RwhJournalDisksBitMap & 0x80000000 ) == 0"); /*0x1ff3e*/
v3 = dword_57F35; /*0x1ff43*/
if ( dword_57F35 ) /*0x1ff4b*/
{
while ( (v3 & 1) == 0 ) /*0x1ff4f*/
{
++n0x90; /*0x1ff51*/
v3 >>= 1; /*0x1ff53*/
if ( !v3 ) /*0x1ff55*/
return RstHelper_e888(); /*0x1ff55*/
}
n0x90 = n0x90; /*0x1ff59*/
}
}
}
}
return RstHelper_e888(); /*0x1fee8*/
}
// Function: RstHelper_ff64 @ 0x1ff64 (0xf5 bytes)
// Index: 837/906
bool RstHelper_ff64()
{
unsigned int n4; // ebx
unsigned int n12; // ebx
char *v2; // rax
__int64 StringToLanguage; // rax
__int16 n23; // [rsp+50h] [rbp+8h] BYREF
__int16 n13; // [rsp+52h] [rbp+Ah]
HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1ff93*/
n4 = Assert_67(); /*0x1ff9d*/
if ( n4 == 4 && n0x90 != -1 ) /*0x1ffad*/
RstDeviceSetPropertyByIndex((unsigned __int8)n0x90, 1, 3); /*0x1ffb8*/
n12 = Assert_107(byte_57F88, n4); /*0x1ffca*/
if ( n12 ) /*0x1ffce*/
{
do /*0x2003e*/
{
v2 = (char *)RstErrorCodeToString(n12); /*0x1ffe5*/
RstAsciiStrnToUnicodeStrn(StartOfBuffer, 0x96u, v2); /*0x1fff5*/
StringToLanguage = HiiGetStringToLanguage(HiiHandle, 0x2EBu, 0); /*0x20009*/
ConsolePrintBoxed(23, &n23, &unk_2442C, StringToLanguage, StartOfBuffer, &unk_2442C, 0); /*0x2002c*/
}
while ( n23 != 23 && n13 != 13 ); /*0x2003e*/
}
return RstHelper_e888(); /*0x2004f*/
}
// Function: Assert_77 @ 0x2005c (0x12c bytes)
// Index: 838/906
void __fastcall Assert_77(__int64 n2)
{
unsigned int n12; // ebx
char *v2; // rax
__int16 n23; // [rsp+40h] [rbp+8h] BYREF
__int16 n13; // [rsp+42h] [rbp+Ah]
if ( (_WORD)n2 ) /*0x20070*/
{
if ( (unsigned __int16)n2 <= 2u ) /*0x20079*/
{
Assert_24(n24); /*0x2015a*/
}
else
{
if ( (unsigned __int16)n2 == 3 ) /*0x20082*/
{
Assert_24(n24); /*0x20138*/
((void (*)(void))qword_35418[42])(); /*0x20144*/
RstHelper_f5fc(1); /*0x2014d*/
return; /*0x20152*/
}
if ( (unsigned __int16)n2 == 4 ) /*0x2008b*/
{
LOBYTE(n2) = n24; /*0x20125*/
RstDeviceStartOp(n2); /*0x2012b*/
}
else
{
if ( (unsigned __int16)n2 != 7 ) /*0x20094*/
{
if ( (unsigned __int16)n2 == 10 ) /*0x2009d*/
RstHelper_faa4(10); /*0x200a3*/
return; /*0x200a8*/
}
n12 = Assert_19(n24); /*0x200b8*/
if ( n12 ) /*0x200bc*/
{
do /*0x20114*/
{
v2 = (char *)RstErrorCodeToString(n12); /*0x200cc*/
RstAsciiStrnToUnicodeStrn(StartOfBuffer, 0x96u, v2); /*0x200e0*/
ConsolePrintBoxed(23, &n23, &unk_2442C, StartOfBuffer, &unk_2442C, 0); /*0x20102*/
}
while ( n23 != 23 && n13 != 13 ); /*0x20114*/
}
}
}
((void (*)(void))qword_35418[42])(); /*0x20166*/
RstHelper_f84c(n5_0); /*0x20173*/
}
}
// Function: RstHelper_0188 @ 0x20188 (0x15b bytes)
// Index: 839/906
bool RstHelper_0188()
{
unsigned __int8 n24; // si
unsigned __int64 j; // rdi
EFI_STRING_ID StringId; // ax
const CHAR8 *Language; // r8
EFI_STRING_ID StringId_1; // ax
const CHAR8 *Language_1; // r8
unsigned __int64 v6; // rbx
__int64 i[3]; // [rsp+20h] [rbp-F8h] BYREF
unsigned __int64 v9; // [rsp+38h] [rbp-E0h]
char v10; // [rsp+ACh] [rbp-6Ch]
dword_57F2F = 0; /*0x2019f*/
n24 = 0; /*0x201a6*/
for ( j = RstVolGetOnlineMemberMask(); j; j >>= 1 ) /*0x201b4*/
{
if ( (j & 1) != 0 && !(unsigned int)RstHelper_be04(n0x18, n24, 1) ) /*0x201d7*/
{
RstHelper_ce6c(n24, (__int64)i); /*0x201ed*/
RstHelper_dd6c(n24); /*0x201f9*/
StringId = RstRaidLevelToHiiStringId(n24); /*0x20203*/
HiiGetString(HiiHandle, StringId, Language); /*0x20215*/
RstHelper_dee0(n24); /*0x2021d*/
StringId_1 = RstSecurityCapToHiiStringId(n24); /*0x20227*/
HiiGetString(HiiHandle, StringId_1, Language_1); /*0x20239*/
dword_57F2F |= 1 << n24; /*0x2024e*/
v6 = RstVolFindSmallestCapacity(n0x18); /*0x20260*/
*((_BYTE *)&i__5 + n24 + 285) = RstVolCheckMemberSameLevel(n0x18) && RstVolFindFirstMember(n0x18) != v10 || v9 > v6 && 100 * (v9 - v6) / v9 > 0xA; /*0x202b2*/
}
++n24; /*0x202ba*/
}
return RstHelper_e888(); /*0x202da*/
}
// Function: RstHiiQuestionHandler @ 0x202e4 (0x54 bytes)
// Index: 840/906
EFI_STRING __fastcall RstHiiQuestionHandler(unsigned __int16 n19, __int64 n24)
{
int n19_1; // ebx
EFI_STRING result; // rax
n19_1 = n19; /*0x202ea*/
RstHelper_be04(n0x18, n24, 0); /*0x202f6*/
result = (EFI_STRING)((__int64 (*)(void))qword_35418[42])(); /*0x20302*/
if ( n19_1 == 19 ) /*0x20310*/
return RstHelper_f5fc(1); /*0x20320*/
if ( n19_1 != 20 ) /*0x20316*/
{
if ( n19_1 != 26 ) /*0x2031c*/
return result; /*0x2031c*/
return RstHelper_f5fc(1); /*0x2031c*/
}
return RstHelper_f84c(n5_0); /*0x20325*/
}
// Function: Assert_53 @ 0x20338 (0xaa bytes)
// Index: 841/906
CHAR8 *__fastcall Assert_53(__int64 n24, unsigned __int8 a2)
{
unsigned __int8 n24_1; // si
EFI_STRING_ID StringId; // bx
int v5; // eax
unsigned __int16 n501; // dx
_BYTE i[40]; // [rsp+20h] [rbp-28h] BYREF
n24_1 = n24; /*0x2034a*/
if ( RstDebugEnabled() && a2 ) /*0x2035a*/
DebugAssert("HiiStandalone.cpp", 0xA6Au, "a_nJdPplMpbId < sizeof( arrJdPplMpbStat ) / sizeof( EFI_STRING_ID )"); /*0x2036f*/
StringId = word_27BB0[a2]; /*0x20384*/
i[0] = 0; /*0x20391*/
v5 = Assert_29(n24_1, a2, i, 0x11u); /*0x20396*/
if ( v5 ) /*0x203a0*/
{
if ( v5 == 1 ) /*0x203a5*/
n501 = 501; /*0x203ae*/
else
n501 = 502; /*0x203a7*/
}
else
{
if ( i[0] ) /*0x203ba*/
return RstHelper_dca0(StringId, i); /*0x203c6*/
n501 = 500; /*0x203c8*/
}
return (CHAR8 *)RstHelper_dd38(StringId, n501); /*0x203dc*/
}
// Function: RstHelper_03e4 @ 0x203e4 (0x306 bytes)
// Index: 842/906
char __fastcall RstHelper_03e4(__int64 n24)
{
unsigned __int16 n24_1; // di
int n15; // eax
unsigned __int8 v3; // bl
const CHAR8 *Language; // rax
const CHAR8 *Language_1; // rax
unsigned __int16 v6; // ax
_BYTE i[112]; // [rsp+30h] [rbp-188h] BYREF
_BYTE v9[32]; // [rsp+A0h] [rbp-118h] BYREF
unsigned __int64 i_1[8]; // [rsp+C0h] [rbp-F8h] BYREF
int v11; // [rsp+100h] [rbp-B8h]
_BYTE v12[64]; // [rsp+110h] [rbp-A8h] BYREF
int n55; // [rsp+150h] [rbp-68h]
int n5; // [rsp+154h] [rbp-64h]
int v15; // [rsp+158h] [rbp-60h]
int v16; // [rsp+15Ch] [rbp-5Ch]
unsigned int v17; // [rsp+16Ch] [rbp-4Ch]
int v18; // [rsp+170h] [rbp-48h]
int v19; // [rsp+174h] [rbp-44h]
int v20; // [rsp+178h] [rbp-40h]
int v21; // [rsp+17Ch] [rbp-3Ch]
int v22; // [rsp+180h] [rbp-38h]
int v23; // [rsp+184h] [rbp-34h]
unsigned __int16 v24; // [rsp+188h] [rbp-30h]
int v25; // [rsp+18Ch] [rbp-2Ch]
__int64 v26; // [rsp+198h] [rbp-20h]
__int64 v27; // [rsp+1A0h] [rbp-18h]
__int64 v28; // [rsp+1A8h] [rbp-10h]
n24_1 = n24; /*0x20402*/
n15 = RstHelper_ce6c(n24, (__int64)i_1); /*0x20405*/
if ( n15 != 15 && v11 != -1 ) /*0x2041b*/
{
if ( n24_1 != 255 ) /*0x20430*/
RstDeviceGetProperty((__int64)v9, n24_1, "en"); /*0x20440*/
::n24 = n24_1; /*0x20457*/
dword_57F27 = v16; /*0x2045e*/
MemZero(i, 0, 100); /*0x20464*/
v3 = 0; /*0x2047e*/
RstFormatDiskSize((__int64)i, i_1[3], v17, 1, 0); /*0x20487*/
RstHelper_dca0(0x1D6u, i); /*0x20496*/
RstHelper_dca0(0x1D3u, v12); /*0x204a8*/
RstHelper_dca0(0x1D0u, v9); /*0x204ba*/
Language = (const CHAR8 *)RstHelper_bd1c(n24_1, "en"); /*0x204c5*/
HiiGetString(HiiHandle, 0x1CDu, Language); /*0x204dc*/
Language_1 = (const CHAR8 *)RstDeviceFindByIndexAndKey(n24_1, "en"); /*0x204e7*/
HiiGetString(HiiHandle, 0x1BCu, Language_1); /*0x204fe*/
v6 = RstDeviceTypeToHiiStringId(n55); /*0x2050a*/
RstHelper_dd38(0x1D9u, v6); /*0x20517*/
RstHelper_8da8((__int64)i, 0x63u, "%ld", v17); /*0x20536*/
RstHelper_dca0(0x1DCu, i); /*0x20545*/
RstHelper_8da8((__int64)i, 0x63u, "%d", v23); /*0x20564*/
RstHelper_dca0(0x1DFu, i); /*0x20573*/
RstHelper_8da8((__int64)i, 0x63u, "%d", v22); /*0x2058b*/
RstHelper_dca0(0x1E5u, i); /*0x2059a*/
RstHelper_8da8((__int64)i, 0x63u, "%d", v24); /*0x205b3*/
RstHelper_dca0(0x1EBu, i); /*0x205c2*/
RstHelper_8da8((__int64)i, 0x63u, "%d", v21); /*0x205da*/
RstHelper_dca0(0x1E8u, i); /*0x205e9*/
RstHelper_8da8((__int64)i, 0x63u, "%02x:%02x.%x", v18, v19, v20); /*0x2061b*/
RstHelper_dca0(0x1EEu, i); /*0x2062a*/
RstHelper_8da8((__int64)i, 0x63u, "%d", v25); /*0x20642*/
RstHelper_dca0(0x1E2u, i); /*0x20651*/
RstHelper_8da8((__int64)i, 0x63u, "%02x:%02x.%x", v26, v27, v28); /*0x20687*/
RstHelper_dca0(0x1F1u, i); /*0x20696*/
if ( n5 == 5 && !v15 && RstNoop() ) /*0x206ae*/
{
do /*0x206ca*/
Assert_53(n24_1, v3++); /*0x206bc*/
while ( v3 < (unsigned __int8)RstNoop() ); /*0x206ca*/
}
LOBYTE(n15) = RstHelper_e888(); /*0x206cc*/
}
return n15; /*0x206e5*/
}
// Function: RstHelper_06ec @ 0x206ec (0x1eb bytes)
// Index: 843/906
bool RstHelper_06ec()
{
unsigned __int16 v0; // ax
int n8; // r11d
__int16 n2; // ax
unsigned __int16 n5; // ax
__int64 i; // rax
__int64 n5_1; // rdx
int v6; // eax
unsigned __int64 i_1; // rdx
int v8; // eax
unsigned __int64 n0x90; // rcx
unsigned __int64 v10; // rbx
unsigned __int8 n42; // di
EFI_STRING_ID StringId; // ax
const CHAR8 *Language; // r8
unsigned int v14; // edi
unsigned __int8 n0x90_3; // bl
unsigned __int64 n0x90_1; // rcx
char n0x90_2; // dl
EFI_STRING_ID StringId_1; // si
CHAR8 *Language_1; // rax
qword_57E57 = RstVolGetOnlineMemberMask(); /*0x2070b*/
word_57E53 = RstRaidCheckLevelSupport(n5_0); /*0x2071d*/
v0 = RstRaidLevelToBitmap(n5_0); /*0x20724*/
switch ( v0 ) /*0x2073b*/
{
case 1u: /*0x2073b*/
n2 = 1; /*0x20773*/
break;
case 2u: /*0x2073b*/
n2 = 2; /*0x20767*/
n2_0 = 2; /*0x2076a*/
goto LABEL_12; /*0x20771*/
case 4u: /*0x2073b*/
n2 = 4; /*0x20762*/
break;
default:
n8 = v0 - 8; /*0x20747*/
n2 = 8; /*0x2074a*/
if ( n8 ) /*0x2074d*/
{
if ( n8 == 8 ) /*0x20752*/
n2 = 16; /*0x2075b*/
else
n2 = -1; /*0x20754*/
}
break;
}
n2_0 = n2; /*0x20776*/
LABEL_12:
dword_57F03 = 0; /*0x2077d*/
byte_57F34 = 0; /*0x20787*/
n5 = RstDiskNumberToStatusCode(n2); /*0x2078e*/
i = Assert_115(n5_0, n5, 0, 0); /*0x207a2*/
i_0 = i; /*0x207a7*/
if ( n2 == 2 ) /*0x207b4*/
i_0 = ~dword_57F1F & (unsigned int)i; /*0x207c1*/
LOBYTE(n5_1) = -1; /*0x207ce*/
v6 = Assert_23(n5_0, n5_1); /*0x207d0*/
n4 = 4; /*0x207d7*/
dword_57F35 = v6; /*0x207de*/
n0x90 = -1; /*0x207e4*/
RstRaidCalcStripeBlockSize(0, i_1); /*0x207eb*/
MemZero(i__0, 1, 144); /*0x20800*/
v8 = RstHelper_eca0(1, 1); /*0x2080b*/
v10 = qword_57E57; /*0x20810*/
byte_57F08 = v8 == 0; /*0x20819*/
n42 = 0; /*0x20820*/
if ( qword_57E57 ) /*0x20826*/
{
do /*0x20859*/
{
if ( (v10 & 1) != 0 ) /*0x2082b*/
{
LOBYTE(n0x90) = n42; /*0x2082d*/
RstHelper_ddc8(n0x90); /*0x20830*/
StringId = RstSecurityStatusToHiiStringId(n42); /*0x2083c*/
HiiGetString(HiiHandle, StringId, Language); /*0x2084e*/
}
++n42; /*0x20853*/
v10 >>= 1; /*0x20856*/
}
while ( v10 ); /*0x20859*/
}
v14 = dword_57F35; /*0x2085b*/
n0x90_3 = 0; /*0x20861*/
if ( dword_57F35 ) /*0x20865*/
{
do /*0x208bc*/
{
if ( (v14 & 1) != 0 ) /*0x2086a*/
{
n0x90_1 = (unsigned __int8)n0x90; /*0x2086c*/
n0x90_2 = n0x90; /*0x20879*/
if ( n0x90 == -1 ) /*0x2087b*/
n0x90_2 = n0x90_3; /*0x2087b*/
n0x90 = n0x90_2; /*0x2087e*/
if ( n0x90_3 >= 0x30u ) /*0x20887*/
{
StringId_1 = 0; /*0x20899*/
}
else
{
n0x90_1 = (unsigned __int64)n0x90_1; /*0x20889*/
StringId_1 = n0x90_1[n0x90_3]; /*0x20893*/
}
LOBYTE(n0x90_1) = n0x90_3; /*0x2089b*/
Language_1 = RstHelper_ddc8(n0x90_1); /*0x2089d*/
HiiGetString(HiiHandle, StringId_1, Language_1); /*0x208b2*/
}
++n0x90_3; /*0x208b7*/
v14 >>= 1; /*0x208ba*/
}
while ( v14 ); /*0x208bc*/
}
return RstHelper_e888(); /*0x208cd*/
}
// Function: RstHelper_08d8 @ 0x208d8 (0x1e3 bytes)
// Index: 844/906
__int64 __fastcall RstHelper_08d8(__int64 a1, CHAR8 *i, __int64 *a3, __int64 a4)
{
CHAR8 *i_1; // rbx
_WORD *v7; // rdi
unsigned __int64 v8; // r12
char v9; // r12
unsigned __int64 v10; // rax
CHAR16 *v11; // rax
CHAR16 *v12; // rdi
unsigned __int64 n0xF4240; // rax
unsigned __int64 v15; // rax
unsigned __int64 v16; // rax
const CHAR16 *v17; // rax
__int64 v18; // rdi
unsigned __int64 v19; // rax
i_1 = i; /*0x208f7*/
if ( !a3 || !a4 ) /*0x20906*/
return 0x8000000000000002uLL; /*0x20906*/
if ( !i ) /*0x20916*/
{
v7 = (_WORD *)HiiConfigRoutingExtract((__int64)&qword_24318, L"RstHiiConfig", qword_35418[78]); /*0x20939*/
v8 = 2 * StrLenSafe_w(v7) + 66; /*0x20941*/
i_1 = (CHAR8 *)MemAllocPages(v8); /*0x2094e*/
if ( RstDebugEnabled() && !i_1 ) /*0x2095d*/
DebugAssert("HiiStandalone.cpp", 0xB90u, "ConfigRequest != 0"); /*0x20972*/
MemZero(i_1, 0, v8); /*0x2097f*/
HiiCfgArrayGet(i_1, v8, (unsigned __int8 *)L"%s&OFFSET=0&WIDTH=%016LX", v7, 310); /*0x2099d*/
*a3 = (__int64)i_1; /*0x209a5*/
v9 = 1; /*0x209a8*/
v10 = StrLenSafe_w(v7); /*0x209ab*/
MemZeroThenFree(v7, 2 * v10); /*0x209b7*/
goto LABEL_14; /*0x209bc*/
}
*a3 = (__int64)i; /*0x209c1*/
v9 = 0; /*0x209d2*/
v11 = (CHAR16 *)HiiConfigRoutingExtract((__int64)&qword_24318, L"RstHiiConfig", ImageHandle); /*0x209d5*/
v12 = v11; /*0x209da*/
if ( !v11 ) /*0x209e0*/
return 0x800000000000000EuLL; /*0x209ec*/
n0xF4240 = StrLenSafe_w(v11); /*0x209f4*/
if ( StrCpyOrCat((const CHAR16 *)i_1, v12, n0xF4240) ) /*0x20a02*/
{
v15 = StrLenSafe_w(v12); /*0x20a0f*/
MemZeroThenFree(v12, 2 * v15); /*0x20a1b*/
return 0x800000000000000EuLL; /*0x20a20*/
}
v16 = StrLenSafe_w(v12); /*0x20a22*/
MemZeroThenFree(v12, 2 * v16); /*0x20a2e*/
v17 = Assert_44((const CHAR16 *)i_1 + 8, L"&GUID"); /*0x20a3e*/
*a3 = (__int64)v17; /*0x20a43*/
if ( v17 ) /*0x20a49*/
return 0x8000000000000002uLL; /*0x20a96*/
*a3 = (__int64)i_1; /*0x20a4b*/
LABEL_14:
v18 = (*(__int64 (__fastcall **)(__int64, CHAR8 *, __int64 *, __int64, __int64, __int64 *))(qword_57E18 + 24))( /*0x20a4e*/
qword_57E18,
i_1,
&i__5,
310,
a4,
a3);
if ( v9 ) /*0x20a7b*/
{
v19 = StrLenSafe_w(i_1); /*0x20a80*/
MemZeroThenFree(i_1, 2 * v19); /*0x20a8c*/
}
return v18; /*0x20ab4*/
}
// Function: RstHelper_0abc @ 0x20abc (0x10b bytes)
// Index: 845/906
__int64 __fastcall RstHelper_0abc(__int64 a1, const CHAR16 *i, const CHAR16 **a3)
{
CHAR16 *v5; // rax
CHAR16 *v6; // rdi
__int64 result; // rax
unsigned __int64 n0xF4240; // rax
unsigned __int64 v9; // rax
unsigned __int64 v10; // rax
_BYTE v11[320]; // [rsp+30h] [rbp-148h] BYREF
__int64 n310; // [rsp+188h] [rbp+10h] BYREF
if ( !i || !a3 ) /*0x20ae7*/
return 0x8000000000000002uLL; /*0x20ba4*/
v5 = (CHAR16 *)HiiConfigRoutingExtract((__int64)&qword_24318, L"RstHiiConfig", ImageHandle); /*0x20b02*/
v6 = v5; /*0x20b07*/
if ( !v5 ) /*0x20b0d*/
return 0x800000000000000EuLL; /*0x20b19*/
n0xF4240 = StrLenSafe_w(v5); /*0x20b21*/
if ( StrCpyOrCat(i, v6, n0xF4240) ) /*0x20b2f*/
{
v9 = StrLenSafe_w(v6); /*0x20b3c*/
MemZeroThenFree(v6, 2 * v9); /*0x20b48*/
return 0x800000000000000EuLL; /*0x20b4d*/
}
v10 = StrLenSafe_w(v6); /*0x20b4f*/
MemZeroThenFree(v6, 2 * v10); /*0x20b5b*/
n310 = 310; /*0x20b7a*/
result = (*(__int64 (__fastcall **)(__int64, const CHAR16 *, _BYTE *, __int64 *, const CHAR16 **))(qword_57E18 + 32))( /*0x20b8b*/
qword_57E18,
i,
v11,
&n310,
a3);
for ( *a3 = i; **a3; ++*a3 ) /*0x20b91*/
; /*0x20b96*/
return result; /*0x20bc2*/
}
// Function: RstHiiDriverBindingOpen @ 0x20bc8 (0x54c bytes)
// Index: 846/906
unsigned __int64 __fastcall RstHiiDriverBindingOpen(
__int64 a1,
unsigned __int64 n3,
unsigned __int16 n24,
__int64 a4,
__int64 a5,
_QWORD *a6)
{
__int64 n24_1; // rcx
unsigned int n0x17; // edx
__int64 n24_2; // rdx
__int16 n7; // bx
unsigned int n5_1; // ecx
unsigned int v14; // edx
unsigned int v15; // edx
char v16; // dl
int n6; // eax
unsigned __int16 n5; // ax
__int64 i_1; // rax
int v20; // ecx
unsigned int n7_1; // eax
__int64 n127; // rdx
__int64 n18; // rcx
__int64 i[8]; // [rsp+20h] [rbp-1B8h] BYREF
unsigned __int8 v25; // [rsp+60h] [rbp-178h]
char i_2[176]; // [rsp+110h] [rbp-C8h] BYREF
if ( a5 && a6 ) /*0x20c0b*/
{
*a6 = 0; /*0x20c11*/
if ( n3 == 3 ) /*0x20c28*/
{
if ( (n24 & 0x8000) != 0 && (n24 & 7) == 1 && (n24 & 0xF8) == 8 && (n24 & 0x7F00) == 0 ) /*0x20c4d*/
{
RstHelper_f5fc(0); /*0x20c51*/
RstHelper_e888(); /*0x20c56*/
}
if ( (n24 & 0x8000) =... [8535 chars total]
// Function: RstHelper_1114 @ 0x21114 (0x1f3 bytes)
// Index: 847/906
__int64 __fastcall RstHelper_1114(__int64 a1)
{
__int64 result; // rax
void *HiiHandle; // rax
__int64 v4; // [rsp+48h] [rbp+10h] BYREF
result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_279A0, 0, &v4); /*0x21136*/
if ( result >= 0 ) /*0x21141*/
{
qword_58018 = v4; /*0x21158*/
result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27960, 0, &v4); /*0x21168*/
if ( result >= 0 ) /*0x21171*/
{
qword_58020 = v4; /*0x21188*/
result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27990, 0, &v4); /*0x21198*/
if ( result >= 0 ) /*0x211a1*/
{
qword_57E10 = v4; /*0x211b8*/
result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27970, 0, &v4); /*0x211c8*/
if ( result >= 0 ) /*0x211d1*/
{
qword_57E18 = v4; /*0x211ea*/
LocateHandleBuffer(qword_35418[78], SystemTable); /*0x211f8*/
p_sub_20ABC = (__int64)RstHelper_0abc; /*0x2120b*/
pRstHiiDriverBindingOpen = (__int64)RstHiiDriverBindingOpen; /*0x21220*/
p_sub_208D8 = (__int64)RstHelper_08d8; /*0x21257*/
(*(void (__fastcall **)(_QWORD *, void *, __int64, void *, __int64 *, _QWORD))(qword_58070 + 328))( /*0x2125e*/
qword_35418 + 78,
&unk_27730,
a1,
&unk_27980,
&p_sub_208D8,
0);
RstHelper_f498((__int64)&i__5, 0); /*0x2126d*/
HiiHandle = (void *)HiiPackageListBuild((__int64)&qword_24318, qword_35418[78], &unk_27BC0, &unk_2B230, 0); /*0x2129a*/
HiiHandle = HiiHandle; /*0x2129f*/
if ( HiiHandle /*0x212e9*/
&& (unsigned __int16)HiiGetString(HiiHandle, 5u, L"Intel(R) VROC with VMD Technology 6.2.0.1034")
&& (unsigned __int16)HiiGetString(HiiHandle, 2u, L"Intel(R) Virtual RAID on CPU") )
{
RstHelper_f5fc(1); /*0x212f5*/
return 0; /*0x212fa*/
}
else
{
return 0x8000000000000009uLL; /*0x212ab*/
}
}
}
}
}
return result; /*0x21301*/
}
// Function: RstHelper_1308 @ 0x21308 (0x66 bytes)
// Index: 848/906
__int64 RstHelper_1308__int64 a1)
{
if ( HiiHandle ) /*0x2131b*/
{
HiiNewString((__int64)HiiHandle); /*0x2131d*/
HiiHandle = 0; /*0x21322*/
}
return (*(__int64 (__fastcall **)(_QWORD, void *, __int64, void *, __int64 *, _QWORD))(qword_58070 + 336))( /*0x21368*/
*(_QWORD *)(qword_35418 + 624),
&unk_27730,
a1,
&unk_27980,
&p_sub_208D8,
0);
}
// Function: RstProtocolCallback42 @ 0x21370 (0xe bytes)
// Index: 849/906
__int64 RstProtocolCallback42()
{
return ((__int64 (*)(void))qword_35418[42])();
}
// Function: RstProtocolSetFlag @ 0x21380 (0x1c bytes)
// Index: 850/906
__int64 __fastcall RstProtocolSetFlag(unsigned __int8 a1, char a2)
{
__int64 result; // rax
result = a1; /*0x21380*/
if ( *(_BYTE *)(a1 + qword_35418 + 632) != 2 ) /*0x21392*/
*(_BYTE *)(a1 + qword_35418 + 632) = a2; /*0x21394*/
return result; /*0x2139b*/
}
// Function: DxeInstall_1 @ 0x2139c (0x5a bytes)
// Index: 851/906
__int64 DxeInstall_1unsigned __int8 a1, __int64 a2, __int64 a3)
{
__int64 v3; // rbx
_BYTE v5[72]; // [rsp+20h] [rbp-48h] BYREF
v3 = a1; /*0x213a9*/
LOBYTE(a3) = 1; /*0x213b8*/
RstHiiStringInit(v5, *(_QWORD *)(qword_35418 + 624), a3); /*0x213bb*/
DxeInstall(v5, (unsigned int)v3, *(unsigned __int8 *)(v3 + qword_35418 + 632)); /*0x213d7*/
RstLedSetDeviceState((__int64)v5); /*0x213e1*/
return DxeInstall_0(v5); /*0x213f0*/
}
// Function: DxeInstall_2 @ 0x213f8 (0x59 bytes)
// Index: 852/906
__int64 __fastcall DxeInstall_2(unsigned __int8 i, unsigned __int8 a2)
{
int v2; // ebx
int i_1; // edi
__int64 v5[9]; // [rsp+20h] [rbp-48h] BYREF
v2 = a2; /*0x21402*/
i_1 = i; /*0x2140c*/
RstHiiStringInit((__int64)v5, qword_35418[78], 1); /*0x2141e*/
DxeInstall((__int64)v5, i_1, v2); /*0x2142d*/
RstLedSetDeviceState((__int64)v5); /*0x21437*/
return DxeInstall_0((__int64)v5); /*0x2144b*/
}
// Function: Assert_63 @ 0x21454 (0x7c bytes)
// Index: 853/906
__int64 __fastcall Assert_63(_DWORD *a1, __int64 *a2)
{
unsigned int v4; // ebx
__int64 v5; // r9
__int64 v6; // rdx
__int64 v7; // r8
__int64 v8; // rax
v4 = 0; /*0x2146e*/
if ( (unsigned __int8)RstDebugEnabled(a1, a2) && !a1[25] ) /*0x21474*/
DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\efidriver\\BaseDevice.h", 0xD3u, "mBlkMedia.BlockSize != ( 0 )"); /*0x2148c*/
v5 = *((unsigned int *)a2 + 3); /*0x21495*/
v6 = *a2; /*0x21499*/
v7 = (unsigned int)(*((_DWORD *)a2 + 2) * a1[25]); /*0x2149c*/
if ( *((_BYTE *)a2 + 16) ) /*0x214a4*/
v8 = (*(__int64 (__fastcall **)(_DWORD *, __int64, __int64, __int64))(*(_QWORD *)a1 + 40LL))(a1, v6, v7, v5); /*0x214b4*/
else
v8 = (*(__int64 (__fastcall **)(_DWORD *, __int64, __int64, __int64))(*(_QWORD *)a1 + 32LL))(a1, v6, v7, v5); /*0x214ac*/
LOBYTE(v4) = v8 < 0; /*0x214c0*/
return v4; /*0x214ca*/
}
// Function: RstProtocolVariableRead @ 0x214d0 (0x2b bytes)
// Index: 854/906
__int64 __fastcall RstProtocolVariableRead(__int64 *a1, const char *en)
{
__int64 v2; // rax
__int64 result; // rax
__int64 v4; // [rsp+30h] [rbp+8h] BYREF
v2 = *a1; /*0x214d4*/
v4 = 0; /*0x214d7*/
if ( (*(__int64 (__fastcall **)(__int64 *, const char *, __int64 *))(v2 + 64))(a1, en, &v4) < 0 ) /*0x214e8*/
return 0; /*0x214e8*/
result = v4; /*0x214ea*/
if ( !v4 ) /*0x214f2*/
return 0; /*0x214f4*/
return result; /*0x214f6*/
}
// Function: RstHiiProtocolGetString @ 0x214fc (0x56 bytes)
// Index: 855/906
signed __int64 __fastcall RstHiiProtocolGetString(__int64 a1, __int64 a2, char *en)
{
signed __int64 result; // rax
if ( !a2 ) /*0x2150e*/
return 0x800000000000000EuLL; /*0x21510*/
result = (*(__int64 (__fastcall **)(__int64, char *, __int64, __int64))(*(_QWORD *)a2 + 72LL))(a2, en, a1, 21); /*0x2152e*/
if ( result >= 0 ) /*0x21534*/
return -(__int64)(a1 == 0) & 0x8000000000000002uLL; /*0x21549*/
return result; /*0x2154c*/
}
// Function: RstProtocolCallEntry6 @ 0x21554 (0x7 bytes)
// Index: 856/906
__int64 __fastcall RstProtocolCallEntry6(_QWORD *NewContext)
{
return (*(__int64 (__fastcall **)(_QWORD *))(*NewContext + 80LL))(NewContext);
}
// Function: RstProtocolCallEntry5 @ 0x2155c (0x7 bytes)
// Index: 857/906
__int64 __fastcall RstProtocolCallEntry5(__int64 a1)
{
return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 56LL))(a1);
}
// Function: DxeInstall_4 @ 0x21564 (0x46 bytes)
// Index: 858/906
char DxeInstall_4()
{
char i_1; // al
unsigned __int8 i_2; // bl
unsigned __int16 i; // di
i_1 = RstDeviceCountOnline(); /*0x2156e*/
i_2 = 0; /*0x21573*/
for ( i = (unsigned __int8)i_1; i_2 < i; i_1 = ++i_2 ) /*0x2157b*/
DxeInstall_2(i_2, *((_BYTE *)qword_35418 + i_2 + 632)); /*0x21590*/
return i_1; /*0x215a4*/
}
// Function: RstProtocolEfiDispatch @ 0x215ac (0x1f bytes)
// Index: 859/906
__int64 __fastcall RstProtocolEfiDispatch(__int64 a1)
{
return (*(__int64 (__fastcall **)(_QWORD, __int64))(**(_QWORD **)(*(_QWORD *)(qword_35418 + 704) + 16LL) + 16LL))(
*(_QWORD *)(*(_QWORD *)(qword_35418 + 704) + 16LL),
a1);
}
// Function: RstChecksum16 @ 0x215cc (0x1f bytes)
// Index: 860/906
__int16 __fastcall RstChecksum16(unsigned __int8 *a1, __int64 n38)
{
__int16 result; // ax
__int16 v4; // cx
result = 0; /*0x215cc*/
if ( (_WORD)n38 ) /*0x215d4*/
{
n38 = (unsigned __int16)n38; /*0x215d6*/
do /*0x215e7*/
{
v4 = *a1++; /*0x215d9*/
result += v4; /*0x215e0*/
--n38; /*0x215e3*/
}
while ( n38 ); /*0x215e7*/
}
return result; /*0x215e9*/
}
// Function: RstCpuid @ 0x2163d (0x19 bytes)
// Index: 861/906
__int64 __fastcall RstCpuid(unsigned int *p_n24682)
{
__int64 result; // rax
_RAX = 1; /*0x21646*/
__asm { cpuid } /*0x2164b*/
*p_n24682 = result; /*0x2164d*/
return result; /*0x21655*/
}
// Function: RstStringToUnsignedInt @ 0x21658 (0xf5 bytes)
// Index: 862/906
__int64 __fastcall RstStringToUnsignedInt(unsigned __int8 *a1, unsigned __int8 **a2, unsigned __int16 n16)
{
unsigned __int8 *v4; // r9
unsigned int v6; // r10d
__int16 v7; // bx
unsigned __int16 n16_1; // dx
unsigned __int8 n0x61; // al
v4 = a1; /*0x21668*/
v6 = 0; /*0x2166e*/
v7 = 0; /*0x21671*/
if ( !a1 ) /*0x21677*/
return 0; /*0x21679*/
while ( *v4 == 32 || *v4 == 9 ) /*0x2168a*/
++v4; /*0x2168c*/
if ( *v4 == 45 ) /*0x21695*/
{
v7 = 1; /*0x21697*/
++v4; /*0x2169c*/
}
if ( *v4 == 43 ) /*0x216a3*/
++v4; /*0x216a5*/
if ( !n16 ) /*0x216ac*/
{
if ( *v4 == 48 ) /*0x216b2*/
{
if ( *++v4 == 120 || *v4 == 88 ) /*0x216c1*/
{
++v4; /*0x216cb*/
n16 = 16; /*0x216ce*/
}
else
{
n16 = 8; /*0x216c3*/
}
}
else
{
n16 = 10; /*0x216d6*/
}
}
while ( 1 ) /*0x21727*/
{
n0x61 = *v4; /*0x21727*/
if ( !*v4 ) /*0x21727*/
break; /*0x21727*/
if ( n0x61 < 0x30u || n0x61 > 0x39u ) /*0x216e4*/
{
if ( n0x61 < 0x41u || n0x61 > 0x5Au ) /*0x216f5*/
{
if ( n0x61 < 0x61u || n0x61 > 0x7Au ) /*0x21706*/
break; /*0x21706*/
n16_1 = n0x61 - 87; /*0x2170b*/
}
else
{
n16_1 = n0x61 - 55; /*0x216fa*/
}
}
else
{
n16_1 = n0x61 - 48; /*0x216e9*/
}
if ( n16_1 >= n16 ) /*0x21713*/
break; /*0x21713*/
++v4; /*0x21719*/
v6 = n16_1 + v6 * n16; /*0x21723*/
}
if ( v7 ) /*0x21732*/
v6 = -v6; /*0x21734*/
if ( a2 ) /*0x2173a*/
*a2 = v4; /*0x2173c*/
return v6; /*0x2174c*/
}
// Function: RstHelper_1750 @ 0x21750 (0x3c bytes)
// Index: 863/906
__int64 RstHelper_1750()
{
__int64 n3; // rax
__int64 v1; // rax
n3 = (unsigned int)n3; /*0x21754*/
if ( n3 == 3 ) /*0x2175d*/
{
v1 = RstHelper_2738(0, 31, 0, 1); /*0x2176a*/
HiiGetBlockSize((unsigned __int16 *)(v1 + 2)); /*0x21773*/
n3 = 1; /*0x21778*/
return 1; /*0x21782*/
}
return n3; /*0x21787*/
}
// Function: RstHelper_178c @ 0x2178c (0xa3 bytes)
// Index: 864/906
__int64 __fastcall RstHelper_178c(unsigned __int16 *a1, __int64 n6)
{
__int64 v3; // rax
unsigned __int16 BlockSize; // ax
unsigned int n4; // ecx
v3 = RstHelper_2738(0, 31, 0, n6); /*0x217a1*/
BlockSize = HiiGetBlockSize((unsigned __int16 *)(v3 + 2)); /*0x217aa*/
n4 = 4; /*0x217af*/
*a1 = BlockSize; /*0x217b4*/
if ( n4_0 != 4 ) /*0x217bf*/
return (unsigned int)n4_0; /*0x217c1*/
if ( BlockSize >= 0xA1C0u && BlockSize <= 0xA1CFu /*0x217ff*/
|| BlockSize == 0xA243
|| BlockSize >= 0xA240u && BlockSize <= 0xA24Fu )
{
n4 = 1; /*0x2181c*/
}
else if ( BlockSize == 0xA2D3 || BlockSize == 0xA2D2 ) /*0x21813*/
{
n4 = 2; /*0x21815*/
}
n4_0 = n4; /*0x21821*/
return n4; /*0x21829*/
}
// Function: DebugLogPrint_0 @ 0x21830 (0xb0 bytes)
// Index: 865/906
bool __fastcall DebugLogPrint_0(unsigned int a1, unsigned int a2)
{
__int64 v4; // rbp
unsigned __int64 v5; // rbx
unsigned int v6; // eax
unsigned int v7; // eax
unsigned __int64 v9; // [rsp+40h] [rbp+18h] BYREF
v4 = RstUefiGetAuthVariableInfo(&v9); /*0x21853*/
v5 = (unsigned int)RstPassthroughByte(a1); /*0x2185b*/
if ( v5 < v9 )
{
v6 = RstGetBlockSize(); /*0x21878*/
if ( (unsigned int)v5 >= (unsigned int)RstPassthroughByte(v6) ) /*0x21886*/
{
v7 = RstGetBlockSizeAlt(); /*0x21888*/
if ( (unsigned int)v5 <= (unsigned int)RstPassthroughByte(v7) ) /*0x21896*/
return a2 <= (unsigned int)(*(_DWORD *)(60 * v5 + v4 + 56) - 1) >> 5; /*0x218aa*/
}
if ( (unsigned __int8)RstDebugEnabled2() )
DebugPrintSerial(
0x80000000,
"GPIO ERROR: Group argument (%d) is not within range of possible groups for this PCH\n",
(unsigned int)v5);
}
else if ( (unsigned __int8)RstDebugEnabled2() )
{
DebugPrintSerial(0x80000000, "GPIO ERROR: Group argument (%d) exceeds GPIO group range\n", (unsigned int)v5);
}
return 0; /*0x218da*/
}
// Function: RstHelper_18e0 @ 0x218e0 (0x7d bytes)
// Index: 866/906
__int64 RstHelper_18e0__int64 a1, unsigned __int8 a2, _DWORD *a3)
{
__int16 v4; // si
unsigned int v5; // ebx
__int64 v6; // rdi
__int64 v7; // rax
__int64 result; // rax
char v9; // [rsp+40h] [rbp+18h] BYREF
v4 = a2; /*0x218f7*/
v5 = a1; /*0x218fa*/
v6 = (unsigned int)BYTE2_w(a1); /*0x21903*/
LOWORD(v5) = RstPassthroughWord(v5); /*0x2190f*/
v7 = RstUefiGetAuthVariableInfo(&v9); /*0x21911*/
result = HiiWriteBlock((unsigned int *)((unsigned __int16)(*(_WORD *)(60 * v6 + v7 + 52) + 4 * (v4 + 2 * v5)) /*0x21940*/
| (unsigned __int64)(*(unsigned __int8 *)(60 * v6 + v7) << 16)
| 0xFD000000));
*a3 = result; /*0x2194f*/
return result; /*0x21957*/
}
// Function: RstHelper_1960 @ 0x21960 (0x91 bytes)
// Index: 867/906
__int64 __fastcall RstHelper_1960(__int64 n16908298, unsigned __int8 a2, int a3, int n257)
{
__int16 v6; // si
unsigned __int16 n16908298_1; // bx
__int64 v8; // rdi
__int16 v9; // bx
_WORD *v10; // rax
_QWORD v12[3]; // [rsp+20h] [rbp-18h] BYREF
v6 = a2; /*0x2197f*/
n16908298_1 = n16908298; /*0x21982*/
v8 = (unsigned int)BYTE2_w(n16908298); /*0x2198b*/
v9 = RstPassthroughWord(n16908298_1); /*0x21997*/
v10 = RstUefiGetAuthVariableInfo(v12); /*0x21999*/
return HiiSetBlockToVal( /*0x219ea*/
(unsigned int *)((LOBYTE(v10[30 * v8]) << 16)
| (unsigned __int64)(unsigned __int16)(v10[30 * v8 + 26] + 4 * (v6 + 2 * v9))
| 0xFD000000),
a3,
n257);
}
// Function: Assert_25 @ 0x219f4 (0x15e bytes)
// Index: 868/906
__int64 __fastcall Assert_25(int n6, unsigned int a2, __int16 a3, _DWORD *a4)
{
__int64 v7; // rbx
__int64 v8; // rax
__int64 v9; // rdx
__int64 v10; // rcx
_DWORD *v11; // rcx
int v12; // eax
unsigned __int16 v14; // dx
_BYTE v15[24]; // [rsp+20h] [rbp-18h] BYREF
v7 = (unsigned int)RstPassthroughByte(a2); /*0x21a1c*/
v8 = RstUefiGetAuthVariableInfo(v15); /*0x21a1e*/
if ( n6 ) /*0x21a2b*/
{
switch ( n6 ) /*0x21a39*/
{
case 1: /*0x21a39*/
v11 = (_DWORD *)(v8 + 60 * v7); /*0x21ae9*/
v12 = v11[6]; /*0x21aec*/
break;
case 2: /*0x21a39*/
v11 = (_DWORD *)(v8 + 60 * v7); /*0x21ada*/
v12 = v11[5]; /*0x21add*/
break;
case 3: /*0x21a39*/
v11 = (_DWORD *)(v8 + 60 * v7); /*0x21acb*/
v12 = v11[8]; /*0x21ace*/
break;
case 4: /*0x21a39*/
v11 = (_DWORD *)(v8 + 60 * v7); /*0x21abc*/
v12 = v11[7]; /*0x21abf*/
break;
case 5: /*0x21a39*/
v11 = (_DWORD *)(v8 + 60 * v7); /*0x21aad*/
v12 = v11[10]; /*0x21ab0*/
break;
case 6: /*0x21a39*/
v11 = (_DWORD *)(v8 + 60 * v7); /*0x21a9e*/
v12 = v11[11]; /*0x21aa1*/
break;
case 7: /*0x21a39*/
v11 = (_DWORD *)(v8 + 60 * v7); /*0x21a8f*/
v12 = v11[12]; /*0x21a92*/
break;
default:
if ( (unsigned __int8)RstDebugEnabled(v10, v9) ) /*0x21a61*/
DebugAssert("GpioLib.c", 0x161u, "((BOOLEAN)(0==1))"); /*0x21a81*/
return 0x8000000000000003uLL; /*0x21a86*/
}
}
else
{
v11 = (_DWORD *)(v8 + 60 * v7); /*0x21af8*/
v12 = v11[2]; /*0x21afb*/
}
if ( v12 == -1 ) /*0x21b01*/
return 0x8000000000000003uLL; /*0x21b0d*/
if ( n6 == 6 || (v14 = v12 + 4 * a3, n6 == 7) ) /*0x21b1a*/
v14 = v12 + 8 * a3; /*0x21b1c*/
*a4 = HiiWriteBlock((unsigned int *)(v14 | (unsigned __int64)(*(unsigned __int8 *)v11 << 16) | 0xFD000000)); /*0x21b38*/
return 0; /*0x21b4c*/
}
// Function: Assert_30 @ 0x21b54 (0x139 bytes)
// Index: 869/906
__int64 __fastcall Assert_30(int n5, unsigned __int8 a2, __int16 a3, int a4, int n257)
{
__int64 v8; // rdi
char *v9; // rax
UINTN n444; // rdx
char *v11; // rdx
int v12; // eax
_QWORD v14[3]; // [rsp+20h] [rbp-18h] BYREF
v8 = (unsigned int)RstPassthroughByte(a2); /*0x21b7c*/
v9 = (char *)RstUefiGetAuthVariableInfo(v14); /*0x21b7e*/
if ( n5 ) /*0x21b85*/
{
switch ( n5 ) /*0x21b8e*/
{
case 1: /*0x21b8e*/
v11 = &v9[60 * v8]; /*0x21c29*/
v12 = *((_DWORD *)v11 + 6); /*0x21c2c*/
break;
case 2: /*0x21b8e*/
v11 = &v9[60 * v8]; /*0x21c1a*/
v12 = *((_DWORD *)v11 + 5); /*0x21c1d*/
break;
case 3: /*0x21b8e*/
v11 = &v9[60 * v8]; /*0x21c0b*/
v12 = *((_DWORD *)v11 + 8); /*0x21c0e*/
break;
case 4: /*0x21b8e*/
v11 = &v9[60 * v8]; /*0x21bfc*/
v12 = *((_DWORD *)v11 + 7); /*0x21bff*/
break;
case 5: /*0x21b8e*/
v11 = &v9[60 * v8]; /*0x21bed*/
v12 = *((_DWORD *)v11 + 10); /*0x21bf0*/
break;
default:
if ( n5 <= 5 || n5 > 7 ) /*0x21bad*/
{
if ( !RstDebugEnabled() ) /*0x21bdd*/
return 0x8000000000000003uLL; /*0x21bdd*/
n444 = 444; /*0x21bdf*/
}
else
{
if ( !RstDebugEnabled() ) /*0x21bb6*/
return 0x8000000000000003uLL; /*0x21c4d*/
n444 = 441; /*0x21bbc*/
}
DebugAssert("GpioLib.c", n444, "((BOOLEAN)(0==1))"); /*0x21bcf*/
return 0x8000000000000003uLL; /*0x21bd4*/
}
}
else
{
v11 = &v9[60 * v8]; /*0x21c38*/
v12 = *((_DWORD *)v11 + 2); /*0x21c3b*/
}
if ( v12 == -1 ) /*0x21c41*/
return 0x8000000000000003uLL; /*0x21c41*/
HiiSetBlockToVal( /*0x21c71*/
(unsigned int *)(((unsigned __int8)*v11 << 16) | (unsigned __int64)(unsigned __int16)(v12 + 4 * a3) | 0xFD000000),
a4,
n257);
return 0; /*0x21c87*/
}
// Function: Assert_60 @ 0x21c90 (0x8b bytes)
// Index: 870/906
__int64 __fastcall Assert_60(__int64 n16908298, unsigned int n4)
{
__int64 n4_1; // rbx
int n519; // eax
n4_1 = n4; /*0x21c96*/
n519 = WORD1_w(n16908298); /*0x21c98*/
if ( n519 == 519 || n519 == 268 ) /*0x21ca9*/
{
if ( RstDebugEnabled() && (unsigned int)n4_1 >= 4 ) /*0x21ced*/
DebugAssert("GpioLib.c", 0x24Au, "PadRstCfg < 4"); /*0x21d02*/
return *(unsigned int *)((char *)&dword_34AA8 + (_QWORD)&_ImageBase[2 * n4_1]); /*0x21d0e*/
}
else
{
if ( RstDebugEnabled() ) /*0x21cab*/
{
if ( (unsigned int)n4_1 >= 3 ) /*0x21cb7*/
DebugAssert("GpioLib.c", 0x24Du, "PadRstCfg < 3"); /*0x21ccc*/
}
return *(unsigned int *)((char *)&dword_34A98 + (_QWORD)&_ImageBase[2 * n4_1]); /*0x21cd8*/
}
}
// Function: DebugLogPrint @ 0x21d1c (0x148 bytes)
// Index: 871/906
unsigned __int64 __fastcall DebugLogPrint(__int64 n16908298, int a2, _DWORD *a3)
{
unsigned int n16908298_1; // esi
int n519; // eax
int v7; // ebx
int v8; // ebx
int v9; // ebx
int v10; // ebx
int v11; // ebx
int v12; // ebx
int n2; // ebx
unsigned int v14; // ebx
unsigned int v15; // eax
unsigned int v17; // ebx
unsigned int v18; // eax
n16908298_1 = n16908298; /*0x21d30*/
n519 = WORD1_w(n16908298); /*0x21d32*/
if ( !a2 ) /*0x21d39*/
goto LABEL_26; /*0x21d39*/
v7 = a2 - 1; /*0x21d3f*/
if ( !v7 ) /*0x21d42*/
{
if ( n519 == 519 || n519 == 268 ) /*0x21e45*/
{
LABEL_25:
*a3 = 3; /*0x21e47*/
return 0; /*0x21e4d*/
}
goto LABEL_26; /*0x21e45*/
}
v8 = v7 - 2; /*0x21d4d*/
if ( !v8 ) /*0x21d4f*/
goto LABEL_22; /*0x21d4f*/
v9 = v8 - 2; /*0x21d55*/
if ( v9 )
{
v10 = v9 - 2; /*0x21d5d*/
if ( v10 )
{
v11 = v10 - 2; /*0x21d65*/
if ( v11 )
{
v12 = v11 - 2; /*0x21d6d*/
if ( v12 )
{
n2 = v12 - 2; /*0x21d75*/
if ( n2 )
{
if ( n2 != 2 ) /*0x21d7f*/
{
if ( RstDebugEnabled() ) /*0x21d81*/
DebugAssert("GpioLib.c", 0x291u, "((BOOLEAN)(0==1))"); /*0x21da1*/
return 0; /*0x21da6*/
}
if ( n519 != 519 && n519 != 268 )
{
if ( RstDebugEnabled2() )
{
v14 = RstPassthroughWord(n16908298_1); /*0x21dd3*/
v15 = BYTE2_w(n16908298_1); /*0x21dd5*/
DebugPrintSerial(
0x80000000,
"GPIO ERROR: Only GPD group pads can use GpioResetResume (Group=%d, Pad=%d)!\n",
v15,
v14);
}
return 0x8000000000000002uLL; /*0x21dfb*/
}
goto LABEL_25; /*0x21dbb*/
}
goto LABEL_21; /*0x21d77*/
}
LABEL_22:
*a3 = 1; /*0x21e31*/
return 0; /*0x21e37*/
}
}
else if ( n519 != 519 && n519 != 268 )
{
if ( RstDebugEnabled2() )
{
v17 = RstPassthroughWord(n16908298_1); /*0x21e1d*/
v18 = BYTE2_w(n16908298_1); /*0x21e1f*/
DebugPrintSerial(
0x80000000,
"GPIO ERROR: Only GPD group pads can use GpioDswReset (Group=%d, Pad=%d)!\n",
v18,
v17);
}
return 0x8000000000000002uLL; /*0x21e2b*/
}
LABEL_26:
*a3 = 0; /*0x21e4f*/
return 0; /*0x21e4f*/
}
LABEL_21:
*a3 = 2; /*0x21e2d*/
return 0; /*0x21e5e*/
}
// Function: Assert_7 @ 0x21e64 (0x254 bytes)
// Index: 872/906
__int64 __fastcall Assert_7(__int64 n16908298, __int64 a2)
{
unsigned int n16908298_1; // edi
unsigned int v4; // r13d
unsigned int v5; // r12d
char v6; // bp
unsigned int v7; // ebx
char v8; // al
unsigned int v9; // r12d
unsigned int v10; // eax
__int64 v11; // rbx
unsigned int v12; // eax
__int64 v13; // rbx
unsigned int v14; // eax
__int64 v15; // rbx
unsigned int v17; // [rsp+48h] [rbp+10h] BYREF
unsigned int v18; // [rsp+4Ch] [rbp+14h] BYREF
n16908298_1 = n16908298; /*0x21e7f*/
v4 = WORD1_w(n16908298); /*0x21e88*/
v5 = RstPassthroughWord(n16908298_1); /*0x21e9b*/
v6 = v5 & 0x1F; /*0x21e9e*/
RstHelper_18e0(n16908298_1, 0, &v17); /*0x21ea1*/
RstHelper_18e0(n16908298_1, 1u, &v18); /*0x21eaf*/
v7 = v17; /*0x21eb4*/
v8 = Assert_60(n16908298_1, v17 >> 30); /*0x21ec0*/
*(_DWORD *)(a2 + 4) &= 0xFFFFBE21; /*0x21ec5*/
*(_BYTE *)(a2 + 3) = v8; /*0x21ed1*/
*(_DWORD *)a2 &= 0xFF10A4E1; /*0x21ed4*/
v9 = v5 >> 5; /*0x21ee1*/
v10 = v18; /*0x21f2f*/
*(_DWORD *)a2 |= v7 & 0x300 /*0x21f33*/
| ((v7 & 1) << 14)
| ((v7 & 0x1E0000 | ((v7 & 0x6000000 | ((v7 & 0x1C00 | (v7 >> 3) & 0x100000 | 0x21490200) >> 5)) >> 3)) >> 1);
*(_DWORD *)(a2 + 4) |= (v10 & 0x3C00 | ((v7 & 0x10000000 | (v10 >> 5) & 0x100000 | 0x8084000) >> 5)) >> 9; /*0x21f54*/
v11 = Assert_25(0, v4, v9, &v17); /*0x21f5e*/
if ( RstDebugEnabled() && v11 < 0 ) /*0x21f74*/
{
if ( RstDebugEnabled2() ) /*0x21f76*/
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v11); /*0x21f8e*/
DebugAssert("GpioLib.c", 0x335u, "!EFI_ERROR (Status)"); /*0x21fa2*/
}
v12 = v17; /*0x21fa7*/
*(_DWORD *)a2 &= ~0x40u; /*0x21fab*/
*(_DWORD *)a2 |= (((v12 >> v6) & 1) << 6) | 0x20; /*0x21fcb*/
v13 = Assert_25(6, v4, v9, &v17); /*0x21fd2*/
if ( RstDebugEnabled() && v13 < 0 ) /*0x21fe1*/
{
if ( RstDebugEnabled2() ) /*0x21fe3*/
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v13); /*0x21ffb*/
DebugAssert("GpioLib.c", 0x346u, "!EFI_ERROR (Status)"); /*0x2200f*/
}
v14 = v17; /*0x22014*/
*(_DWORD *)(a2 + 4) &= 0xFFFFE3FF; /*0x22018*/
*(_DWORD *)(a2 + 4) |= (((v14 >> v6) & 1) << 10) | 0x200; /*0x2203d*/
v15 = Assert_25(7, v4, v9, &v17); /*0x22045*/
if ( RstDebugEnabled() && v15 < 0 ) /*0x22054*/
{
if ( RstDebugEnabled2() ) /*0x22056*/
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v15); /*0x2206e*/
DebugAssert("GpioLib.c", 0x357u, "!EFI_ERROR (Status)"); /*0x22082*/
}
*(_DWORD *)(a2 + 4) |= (((v17 >> v6) & 1) << 11) | 0x200; /*0x2209e*/
return v15; /*0x220ae*/
}
// Function: Assert_16 @ 0x220b8 (0x1b8 bytes)
// Index: 873/906
__int64 __fastcall Assert_16(__int64 n16908298, __int64 a2, _DWORD *i, _DWORD *p_i)
{
__int64 v7; // rdi
int v8; // ebx
int v10; // [rsp+48h] [rbp+10h] BYREF
v7 = DebugLogPrint(n16908298, *(unsigned __int8 *)(a2 + 3), &v10); /*0x220e1*/
v8 = 0; /*0x220e9*/
if ( RstDebugEnabled() && v7 < 0 ) /*0x220f2*/
{
if ( RstDebugEnabled2() ) /*0x220f4*/
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v7); /*0x2210c*/
DebugAssert("GpioLib.c", 0x382u, "!EFI_ERROR (Status)"); /*0x22124*/
}
*p_i |= (*(_BYTE *)(a2 + 3) & 0x3F) != 0 ? 0xC0000000 : 0;
*i |= v10 << 30; /*0x22146*/
*p_i |= (*(_DWORD *)a2 & 0x700000) != 0 ? 0x6000000 : 0;
*i |= 16 * (*(_DWORD *)a2 & 0x600000); /*0x22167*/
*p_i |= (*(_DWORD *)a2 & 0xF8000) != 0 ? 0x1E0000 : 0;
*i |= 2 * (*(_DWORD *)a2 & 0xF0000); /*0x22187*/
*p_i |= (*(_DWORD *)a2 & 0x380) != 0 ? 0x300 : 0;
*i |= 2 * (*(_DWORD *)a2 & 0x180); /*0x221a7*/
*p_i |= (*(_DWORD *)a2 & 0xC00) != 0 ? 0x800000 : 0;
*i |= (*(_DWORD *)a2 & 0x800) << 12; /*0x221c8*/
LOBYTE(v8) = (*(_DWORD *)a2 & 0x6000) != 0; /*0x221ce*/
*p_i |= v8; /*0x221d1*/
*i |= (*(_DWORD *)a2 >> 14) & 1; /*0x221dc*/
*p_i |= (*(_DWORD *)(a2 + 4) & 0x6000) != 0 ? 0x10000000 : 0;
*i |= (*(_DWORD *)(a2 + 4) & 0x4000) << 14; /*0x221fc*/
*p_i |= (*(_BYTE *)a2 & 0xF) != 0 ? 0x1C00 : 0;
*i |= (*(_DWORD *)a2 & 0xE) << 9; /*0x22218*/
p_i[1] |= (*(_BYTE *)(a2 + 4) & 0x1F) != 0 ? 0x3C00 : 0;
i[1] |= (*(_DWORD *)(a2 + 4) & 0x1E) << 9; /*0x2223b*/
p_i[1] |= (*(_BYTE *)(a2 + 4) & 0x60) != 0 ? 0x2000000 : 0;
i[1] |= (*(_DWORD *)(a2 + 4) & 0x40) << 19; /*0x2225f*/
return v7; /*0x22267*/
}
// Function: RstHelper1960Wrapper @ 0x22270 (0x1b bytes)
// Index: 874/906
__int64 __fastcall RstHelper1960Wrapper(__int64 n16908298, int n257)
{
RstHelper_1960(n16908298, 0, -258, n257); /*0x2227f*/
return 0; /*0x22286*/
}
// Function: RstHelper18e0Wrapper @ 0x2228c (0x29 bytes)
// Index: 875/906
__int64 __fastcall RstHelper18e0Wrapper(__int64 n16908298, int *a2)
{
int v4; // [rsp+38h] [rbp+10h] BYREF
RstHelper_18e0(n16908298, 0, &v4); /*0x2229c*/
*a2 = v4 & 1; /*0x222ac*/
return 0; /*0x222af*/
}
// Function: RstNvramReadBit @ 0x222b8 (0x2c bytes)
// Index: 876/906
__int64 __fastcall RstNvramReadBit(__int64 n16908298, unsigned int *a2)
{
unsigned int v4; // [rsp+38h] [rbp+10h] BYREF
RstHelper_18e0(n16908298, 0, &v4); /*0x222c8*/
*a2 = (v4 >> 1) & 1; /*0x222db*/
return 0; /*0x222de*/
}
// Function: Assert_47 @ 0x222e4 (0xb7 bytes)
// Index: 877/906
unsigned __int64 __fastcall Assert_47(unsigned int a1, __int16 a2, _DWORD *a3)
{
__int64 v6; // rdx
__int64 v7; // rcx
__int64 v9; // rbx
__int64 v10; // rdx
__int64 v11; // rcx
if ( (unsigned __int8)DebugLogPrint_0() ) /*0x222fa*/
{
v9 = Assert_25(6, a1, a2, a3); /*0x22342*/
if ( (unsigned __int8)RstDebugEnabled(v11, v10) && v9 < 0 ) /*0x22351*/
{
if ( (unsigned __int8)RstDebugEnabled2() ) /*0x22353*/
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9); /*0x2236b*/
DebugAssert("GpioLib.c", 0x74Au, "!EFI_ERROR (Status)"); /*0x22383*/
}
return v9; /*0x22388*/
}
else
{
if ( (unsigned __int8)RstDebugEnabled(v7, v6) ) /*0x22303*/
DebugAssert("GpioLib.c", 0x73Fu, "((BOOLEAN)(0==1))"); /*0x2231f*/
return 0x8000000000000002uLL; /*0x22324*/
}
}
// Function: Assert_41 @ 0x2239c (0xf7 bytes)
// Index: 878/906
__int64 __fastcall Assert_41(int n6, unsigned int a2, unsigned int a3)
{
__int64 v6; // rdi
int v7; // ebx
__int64 v8; // rdx
__int64 v9; // rcx
__int64 v10; // r11
int v11; // ecx
__int64 v13; // rdx
__int64 v14; // rcx
_BYTE v15[24]; // [rsp+20h] [rbp-18h] BYREF
char v16; // [rsp+40h] [rbp+8h] BYREF
v6 = (unsigned int)RstPassthroughByte(a2); /*0x223c3*/
v7 = n6 - 6; /*0x223ca*/
v10 = RstUefiGetAuthVariableInfo(v15); /*0x223cd*/
if ( v7 ) /*0x223d0*/
{
if ( v7 != 1 ) /*0x223d5*/
{
if ( (unsigned __int8)RstDebugEnabled(v9, v8) ) /*0x223d7*/
DebugAssert("GpioLib.c", 0x203u, "((BOOLEAN)(0==1))"); /*0x223f3*/
return 0x8000000000000003uLL; /*0x223f8*/
}
v11 = *(_DWORD *)(60 * v6 + v10 + 48); /*0x22401*/
}
else
{
v11 = *(_DWORD *)(60 * v6 + v10 + 44); /*0x2240f*/
}
if ( v11 == -1 ) /*0x22417*/
return 0x8000000000000003uLL; /*0x22423*/
Assert_47(a2, a3, &v16); /*0x2242e*/
if ( (unsigned __int8)RstDebugEnabled(v14, v13) ) /*0x22433*/
{
if ( (unsigned __int8)RstDebugEnabled2() ) /*0x22446*/
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", 0x8000000000000003uLL); /*0x2245e*/
DebugAssert("GpioLib.c", 0x228u, "!EFI_ERROR (Status)"); /*0x22476*/
}
return 0x8000000000000003uLL; /*0x2248d*/
}
// Function: AssertCpuDeadLoop @ 0x22494 (0x2a2 bytes)
// Index: 879/906
__int64 __fastcall AssertCpuDeadLoop(unsigned int n16908298, _DWORD *a2)
{
unsigned int v4; // r14d
int v5; // r15d
unsigned int v6; // eax
char v7; // si
unsigned int v8; // r13d
__int64 v9; // rbx
__int64 v10; // rbx
int n257_1; // ebx
__int64 v12; // rbp
int i; // [rsp+78h] [rbp+10h] BYREF
int i_4; // [rsp+7Ch] [rbp+14h]
int i_; // [rsp+80h] [rbp+18h] BYREF
int n257; // [rsp+84h] [rbp+1Ch]
RstMemZero((__int64)&i_, 8u); /*0x224bb*/
RstMemZero((__int64)&i, 8u); /*0x224c8*/
v4 = WORD1_w(n16908298); /*0x224d6*/
v5 = BYTE2_w(n16908298); /*0x224e0*/
v6 = RstPassthroughWord(n16908298); /*0x224e3*/
v7 = v6 & 0x1F; /*0x224ff*/
v8 = v6 >> 5; /*0x22502*/
Assert_16(n16908298, (__int64)a2, &i_, &i); /*0x22506*/
RstHelper_1960(n16908298, 0, ~i, i_); /*0x2251f*/
RstHelper_1960(n16908298, 1u, ~i_4, n257); /*0x2253e*/
v9 = Assert_30(0, v4, v8, ~(((*a2 >> 5) & 1u) << v7), ((*a2 >> 6) & 1u) << v7); /*0x22575*/
if ( RstDebugEnabled() && v9 < 0 ) /*0x22589*/
{
if ( RstDebugEnabled2() ) /*0x2258b*/
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9); /*0x225a1*/
DebugAssert("GpioLib.c", 0x427u, "!EFI_ERROR (Status)"); /*0x225b9*/
}
v10 = Assert_30(1, v4, v8, ~(((*a2 >> 15) & 1u) << v7), ((*a2 >> 18) & 1u) << v7); /*0x225ec*/
if ( RstDebugEnabled() && v10 < 0 ) /*0x225fb*/
{
if ( RstDebugEnabled2() ) /*0x225fd*/
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v10); /*0x22613*/
DebugAssert("GpioLib.c", 0x439u, "!EFI_ERROR (Status)"); /*0x2262b*/
}
n257_1 = (HIWORD(*a2) & 1) << v7; /*0x2264b*/
v12 = Assert_30(5, v4, v8, ~(((*a2 >> 15) & 1u) << v7), n257_1); /*0x22661*/
if ( v12 != 0x8000000000000003uLL ) /*0x22671*/
goto LABEL_14; /*0x22671*/
if ( !n257_1 ) /*0x22675*/
{
v12 = 0; /*0x22677*/
LABEL_14:
if ( (a2[1] & 0x600) == 0x600 ) /*0x2268a*/
Assert_41(6, v4, v8); /*0x226a4*/
if ( (a2[1] & 0xA00) == 0xA00 ) /*0x226b7*/
Assert_41(7, v4, v8); /*0x226cf*/
return v12; /*0x226d4*/
}
if ( RstDebugEnabled2() )
DebugPrintSerial(0x80000000, "GPIO ERROR: Group %d has no pads supporting NMI\n", v5);
if ( RstDebugEnabled() ) /*0x22709*/
DebugAssert("GpioLib.c", 0x451u, "((BOOLEAN)(0==1))"); /*0x22725*/
return 0x8000000000000003uLL; /*0x226dc*/
}
// Function: RstHelper_2738 @ 0x22738 (0xd1 bytes)
// Index: 880/906
__int64 __fastcall RstHelper_2738(__int64 n0xFF, __int64 n0x1F, unsigned int n7, char n6)
{
unsigned int n0x1F_1; // r12d
unsigned int n0xFF_1; // ebx
__int64 v8; // rdi
bool v9; // al
unsigned int v10; // edx
char v11; // si
unsigned int v12; // edx
n0x1F_1 = n0x1F; /*0x22756*/
n0xFF_1 = n0xFF; /*0x22759*/
if ( RstDebugEnabled() && (n0xFF_1 > 0xFF || n0x1F_1 > 0x1F || n7 > 7) ) /*0x22775*/
DebugAssert("MmPciBaseLib.c", 0x38u, "(Bus <= 0xFF) && (Device <= 0x1F) && (Function <= 0x7)"); /*0x2278a*/
v8 = qword_58038; /*0x2278f*/
if ( !qword_58038 ) /*0x22799*/
{
v9 = HiiLibSuccess(); /*0x2279b*/
v10 = n0xFF_1 << 16; /*0x227a7*/
v11 = v9; /*0x227aa*/
if ( n6 ) /*0x227b0*/
v12 = v10 | 0x80002890; /*0x227b2*/
else
v12 = v10 | 0x80000090; /*0x227ba*/
HiiConfigStringToBlock2(0xCF8u, v12); /*0x227c0*/
v8 = HiiConfigStringToBlock(0xCFCu); /*0x227d2*/
HiiLibFailure(v11); /*0x227d4*/
qword_58038 = v8; /*0x227d9*/
}
return v8 + ((n7 + 8 * (n0x1F_1 + 32 * n0xFF_1)) << 12); /*0x227ff*/
}
// Function: RstUefiGetAuthVariableInfo @ 0x2280c (0x37 bytes)
// Index: 881/906
void *__fastcall RstUefiGetAuthVariableInfo(_QWORD *a1)
{
if ( (unsigned int)RstHelper_1750() == 2 ) /*0x2281d*/
{
*a1 = 8; /*0x2281f*/
return &unk_34AC0; /*0x22826*/
}
else
{
*a1 = 13; /*0x2282f*/
return &unk_34CA0; /*0x22836*/
}
}
// Function: RstGetBlockSize @ 0x22844 (0x20 bytes)
// Index: 882/906
__int64 RstGetBlockSize()
{
int n2; // eax
unsigned int n256; // ecx
n2 = RstHelper_1750(); /*0x22848*/
n256 = 256; /*0x2284d*/
if ( n2 == 2 ) /*0x2285a*/
return 512; /*0x2285a*/
return n256; /*0x2285f*/
}
// Function: RstGetBlockSizeAlt @ 0x22864 (0x20 bytes)
// Index: 883/906
__int64 RstGetBlockSizeAlt()
{
int n2; // eax
unsigned int n268; // ecx
n2 = RstHelper_1750(); /*0x22868*/
n268 = 268; /*0x2286d*/
if ( n2 == 2 ) /*0x2287a*/
return 519; /*0x2287a*/
return n268; /*0x2287f*/
}
// Function: WORD1_w @ 0x22884 (0x6 bytes)
// Index: 884/906
__int64 WORD1_w__int64 n16908298)
{
return WORD1(n16908298); /*0x22889*/
}
// Function: BYTE2_w @ 0x2288c (0x7 bytes)
// Index: 885/906
__int64 BYTE2_w__int64 n16908298)
{
return BYTE2(n16908298); /*0x22892*/
}
// Function: RstPassthroughByte @ 0x22894 (0x4 bytes)
// Index: 886/906
__int64 __fastcall RstPassthroughByte(unsigned __int8 a1)
{
return a1; /*0x22897*/
}
// Function: RstPassthroughWord @ 0x22898 (0x4 bytes)
// Index: 887/906
__int64 __fastcall RstPassthroughWord(unsigned __int16 a1)
{
return a1; /*0x2289b*/
}
// Function: RstNvmPassthruSetData @ 0x2289c (0x4a bytes)
// Index: 888/906
__int64 __fastcall RstNvmPassthruSetData(_QWORD *a1, __int64 a2)
{
__int64 result; // rax
__int64 v3; // [rsp+50h] [rbp+18h] BYREF
if ( (*(__int64 (__fastcall **)(__int64, void *, __int64 *, _QWORD, _QWORD, int))(qword_58070 + 280))( /*0x228d3*/
a2,
&unk_278A0,
&v3,
*a1,
0,
1) < 0 )
return 0; /*0x228d3*/
result = v3; /*0x228d5*/
if ( !v3 ) /*0x228dd*/
return 0; /*0x228df*/
return result; /*0x228e1*/
}
// Function: RstNvmPassthruGetData @ 0x228e8 (0x50 bytes)
// Index: 889/906
__int64 __fastcall RstNvmPassthruGetData(__int64 *a1, __int64 a2)
{
__int64 v2; // r9
__int64 result; // rax
__int64 v4; // [rsp+50h] [rbp+18h] BYREF
v2 = *a1; /*0x228ec*/
v4 = 0; /*0x228ef*/
if ( (*(__int64 (__fastcall **)(__int64, void *, __int64 *, __int64, _QWORD, int))(qword_58070 + 280))( /*0x22925*/
a2,
&unk_352F0,
&v4,
v2,
0,
1) < 0 )
return 0; /*0x22925*/
result = v4; /*0x22927*/
if ( !v4 ) /*0x2292f*/
return 0; /*0x22931*/
return result; /*0x22933*/
}
// Function: Assert_84 @ 0x22938 (0xdc bytes)
// Index: 890/906
char __fastcall Assert_84(__int64 a1, __int64 a2, __int64 a3)
{
const CHAR16 *FirstString; // r12
__int64 FirstString_2; // rax
const CHAR16 *FirstString_1; // rsi
char v7; // bp
unsigned __int64 Length_2; // rdi
unsigned __int64 Length_1; // rax
UINTN Length; // r8
FirstString = (const CHAR16 *)RstUefiReadVariable(a2); /*0x2295e*/
FirstString_2 = RstUefiReadVariable(a3); /*0x22961*/
FirstString_1 = (const CHAR16 *)FirstString_2; /*0x22969*/
if ( !FirstString || !FirstString_2 ) /*0x22978*/
return 0; /*0x229f9*/
v7 = 1; /*0x2297a*/
do /*0x229f2*/
{
if ( !FirstString_1 || Assert_66(FirstString) || Assert_66(FirstString_1) ) /*0x22992*/
break; /*0x2299a*/
Length_2 = Assert_72((__int64)FirstString); /*0x229a7*/
Length_1 = Assert_72((__int64)FirstString_1); /*0x229aa*/
Length = Length_1; /*0x229b2*/
if ( Length_2 < Length_1 ) /*0x229bb*/
Length = Length_2; /*0x229bb*/
v7 &= (Length_2 == Length_1) & ((unsigned __int16)StrnCmp(FirstString, FirstString_1, Length) == 0); /*0x229d9*/
FirstString = (const CHAR16 *)Assert_71((__int64)FirstString); /*0x229e4*/
FirstString_1 = (const CHAR16 *)Assert_71((__int64)FirstString_1); /*0x229ec*/
}
while ( FirstString ); /*0x229f2*/
return v7; /*0x22a0a*/
}
// Function: RstGetHiiString @ 0x22a14 (0x82 bytes)
// Index: 891/906
__int64 __fastcall RstGetHiiString(__int64 a1)
{
__int64 result; // rax
__int64 v3; // rcx
CHAR16 *Destination; // rax
CHAR16 *Source_1; // rdx
UINTN Length; // r8
__int64 v7; // [rsp+48h] [rbp+10h] BYREF
CHAR16 *Source; // [rsp+50h] [rbp+18h] BYREF
v7 = 0; /*0x22a1c*/
result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, __int64 *, CHAR16 **))(qword_58070 + 312))( /*0x22a45*/
2,
&unk_27890,
0,
&v7,
&Source);
if ( result >= 0 ) /*0x22a4e*/
{
v3 = v7; /*0x22a50*/
if ( v7 ) /*0x22a58*/
{
*(_QWORD *)(a1 + 16) = v7; /*0x22a5a*/
Destination = (CHAR16 *)MemAllocPages(8 * v3); /*0x22a62*/
Source_1 = Source; /*0x22a6c*/
Length = 8 * v7; /*0x22a71*/
*(_QWORD *)(a1 + 8) = Destination; /*0x22a78*/
StrnCpy(Destination, Source_1, Length); /*0x22a7c*/
return (*(__int64 (__fastcall **)(CHAR16 *))(qword_58070 + 72))(Source); /*0x22a8d*/
}
}
return result; /*0x22a90*/
}
// Function: RstGetHiiStringDefault @ 0x22a98 (0x82 bytes)
// Index: 892/906
__int64 __fastcall RstGetHiiStringDefault(__int64 a1)
{
__int64 result; // rax
__int64 v3; // rcx
CHAR16 *Destination; // rax
CHAR16 *Source_1; // rdx
UINTN Length; // r8
__int64 v7; // [rsp+48h] [rbp+10h] BYREF
CHAR16 *Source; // [rsp+50h] [rbp+18h] BYREF
v7 = 0; /*0x22aa0*/
result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, __int64 *, CHAR16 **))(qword_58070 + 312))( /*0x22ac9*/
2,
&unk_278A0,
0,
&v7,
&Source);
if ( result >= 0 ) /*0x22ad2*/
{
v3 = v7; /*0x22ad4*/
if ( v7 ) /*0x22adc*/
{
*(_QWORD *)(a1 + 32) = v7; /*0x22ade*/
Destination = (CHAR16 *)MemAllocPages(8 * v3); /*0x22ae6*/
Source_1 = Source; /*0x22af0*/
Length = 8 * v7; /*0x22af5*/
*(_QWORD *)(a1 + 24) = Destination; /*0x22afc*/
StrnCpy(Destination, Source_1, Length); /*0x22b00*/
return (*(__int64 (__fastcall **)(CHAR16 *))(qword_58070 + 72))(Source); /*0x22b11*/
}
}
return result; /*0x22b14*/
}
// Function: RstHiiStringInit @ 0x22b1c (0x49 bytes)
// Index: 893/906
__int64 __fastcall RstHiiStringInit(__int64 a1, __int64 a2, char a3)
{
*(_QWORD *)a1 = a2; /*0x22b24*/
*(_QWORD *)(a1 + 8) = 0; /*0x22b2a*/
*(_QWORD *)(a1 + 16) = 0; /*0x22b2e*/
*(_QWORD *)(a1 + 24) = 0; /*0x22b32*/
*(_QWORD *)(a1 + 32) = 0; /*0x22b36*/
*(_QWORD *)(a1 + 40) = 0; /*0x22b3a*/
*(_QWORD *)(a1 + 48) = 0; /*0x22b3e*/
*(_BYTE *)(a1 + 58) = a3; /*0x22b47*/
*(_WORD *)(a1 + 56) = -1; /*0x22b4b*/
RstGetHiiString(a1); /*0x22b4f*/
RstGetHiiStringDefault(a1); /*0x22b57*/
return a1; /*0x22b5f*/
}
// Function: Assert_125 @ 0x22b68 (0x76 bytes)
// Index: 894/906
__int64 Assert_125__int64 a1, __int64 a2)
{
__int64 v4; // rdi
__int64 i; // rsi
__int64 v6; // rdx
if ( !a2 ) /*0x22b85*/
return 0; /*0x22b85*/
v4 = 0; /*0x22b87*/
if ( !*(_QWORD *)(a1 + 16) ) /*0x22b89*/
return 0; /*0x22bbd*/
for ( i = 0; ; i += 8 ) /*0x22b8f*/
{
v6 = *(_QWORD *)(a1 + 8); /*0x22b91*/
if ( *(_QWORD *)(i + v6) ) /*0x22b95*/
{
if ( Assert_84(a1, *(_QWORD *)(i + v6), a2) ) /*0x22ba6*/
break; /*0x22ba6*/
}
v4 = (unsigned int)(v4 + 1); /*0x22baf*/
if ( (unsigned __int64)(unsigned int)v4 >= *(_QWORD *)(a1 + 16) ) /*0x22bbb*/
return 0; /*0x22bbb*/
}
return *(_QWORD *)(*(_QWORD *)(a1 + 8) + 8 * v4); /*0x22bce*/
}
// Function: DxeInstall @ 0x22be0 (0x48 bytes)
// Index: 895/906
RST_LIST_ENTRY *__fastcall DxeInstall(__int64 a1, int i, int a3)
{
_DWORD *Context; // rax
Context = (_DWORD *)MemAlloc(8); /*0x22c03*/
*Context = i; /*0x22c0f*/
Context[1] = a3; /*0x22c11*/
return RstInstallClass((RST_PRIVATE_DATA *)(a1 + 40), Context); /*0x22c1e*/
}
// Function: RstCompareUint32Values @ 0x22c28 (0xba bytes)
// Index: 896/906
bool __fastcall RstCompareUint32Values(_QWORD *a1, __int64 a2, int a3)
{
__int64 v5; // rax
__int64 v6; // rbp
__int64 v7; // rbx
__int64 v8; // rax
bool v9; // bl
int v11; // [rsp+40h] [rbp+18h] BYREF
v11 = a3; /*0x22c37*/
v5 = Assert_125(); /*0x22c46*/
v6 = v5; /*0x22c4b*/
if ( !a2 ) /*0x22c51*/
return 0; /*0x22c51*/
if ( !v5 ) /*0x22c56*/
return 0; /*0x22c56*/
v7 = RstNvmPassthruGetData(a1, v5); /*0x22c63*/
if ( !v7 ) /*0x22c69*/
return 0; /*0x22c69*/
v8 = RstNvmPassthruSetData(a1, a2); /*0x22c71*/
if ( !v8 ) /*0x22c79*/
return 0; /*0x22ccb*/
v9 = (*(unsigned __int8 (__fastcall **)(__int64, int *))(v7 + 8))(v8, &v11) == 1; /*0x22c9c*/
(*(void (__fastcall **)(__int64, void *, _QWORD, _QWORD))(qword_58070 + 288))(v6, &unk_352F0, *a1, 0); /*0x22ca2*/
(*(void (__fastcall **)(__int64, void *, _QWORD, _QWORD))(qword_58070 + 288))(a2, &unk_278A0, *a1, 0); /*0x22cc0*/
return v9; /*0x22cdc*/
}
// Function: DxeInstall_0 @ 0x22ce4 (0x48 bytes)
// Index: 897/906
__int64 __fastcall DxeInstall_0(__int64 a1)
{
__int64 result; // rax
_QWORD *p_i; // [rsp+30h] [rbp+8h] BYREF
MemFree(); /*0x22cf1*/
MemFree(); /*0x22cfa*/
while ( 1 ) /*0x22d1d*/
{
result = *(_QWORD *)(a1 + 40); /*0x22d1d*/
if ( !result ) /*0x22d24*/
break; /*0x22d24*/
p_i = *(_QWORD **)(a1 + 40); /*0x22d05*/
MemFree(); /*0x22d0a*/
RstInstallConfigAccess((_QWORD *)(a1 + 40), &p_i); /*0x22d18*/
}
return result; /*0x22d26*/
}
// Function: RstLedSetDeviceState @ 0x22d2c (0x175 bytes)
// Index: 898/906
void __fastcall RstLedSetDeviceState(__int64 a1)
{
_QWORD *v1; // rbx
int v3; // edx
int v4; // edx
int v5; // edx
unsigned int *v6; // rcx
unsigned __int64 v7; // rax
__int64 v8; // rdx
__int64 v9; // rdx
__int64 **i; // rbx
unsigned __int64 v11; // rcx
__int64 v12; // rdx
__int64 v13; // rdx
v1 = *(_QWORD **)(a1 + 40); /*0x22d36*/
if ( v1 ) /*0x22d40*/
{
do /*0x22e13*/
{
if ( !*(_BYTE *)(a1 + 58) ) /*0x22d57*/
{
RstHelper_309c("Setting \""); /*0x22d64*/
v3 = *(_DWORD *)(v1[2] + 4LL); /*0x22d6d*/
if ( v3 ) /*0x22d72*/
{
v4 = v3 - 1; /*0x22d74*/
if ( v4 ) /*0x22d77*/
{
v5 = v4 - 1; /*0x22d79*/
if ( v5 ) /*0x22d7c*/
{
if ( v5 == 1 ) /*0x22d81*/
RstHelper_309c("REBUILD"); /*0x22d8a*/
}
else
{
RstHelper_309c("FAULT"); /*0x22d93*/
}
}
else
{
RstHelper_309c("LOCATE"); /*0x22d9c*/
}
}
else
{
RstHelper_309c("LED_OFF"); /*0x22da5*/
}
RstHelper_309c("\" state for device %d.\n", *(_DWORD *)v1[2]); /*0x22db7*/
}
v6 = (unsigned int *)v1[2]; /*0x22dbc*/
v7 = *v6; /*0x22dc0*/
if ( v7 < *(_QWORD *)(a1 + 32) && (v8 = *(_QWORD *)(a1 + 24)) != 0 ) /*0x22dcf*/
v9 = *(_QWORD *)(v8 + 8 * v7); /*0x22dd1*/
else
v9 = 0; /*0x22dd7*/
if ( v9 ) /*0x22ddc*/
{
if ( !RstCompareUint32Values((_QWORD *)a1, v9, v6[1]) && !*(_BYTE *)(a1 + 58) ) /*0x22dfc*/
RstHelper_309c("Failed to set led state for selected device.\n"); /*0x22e08*/
}
else if ( !*(_BYTE *)(a1 + 58) ) /*0x22dde*/
{
RstHelper_309c("Failed to get selected device.\n"); /*0x22dea*/
}
v1 = (_QWORD *)*v1; /*0x22e0d*/
}
while ( v1 ); /*0x22e13*/
if ( *(_WORD *)(a1 + 56) != 0xFFFF ) /*0x22e22*/
{
RstHelper_309c("Waiting %d seconds...\n", *(unsigned __int16 *)(a1 + 56)); /*0x22e2f*/
RstMicrosecondsToTime(*(_WORD *)(a1 + 56)); /*0x22e38*/
RstHelper_309c("Resetting device states.\n"); /*0x22e44*/
for ( i = *(__int64 ***)(a1 + 40); i; i = (__int64 **)*i ) /*0x22e49*/
{
v11 = *(unsigned int *)i[2]; /*0x22e53*/
if ( v11 < *(_QWORD *)(a1 + 32) && (v12 = *(_QWORD *)(a1 + 24)) != 0 ) /*0x22e62*/
v13 = *(_QWORD *)(v12 + 8 * v11); /*0x22e64*/
else
v13 = 0; /*0x22e6a*/
if ( v13 ) /*0x22e6f*/
RstCompareUint32Values((_QWORD *)a1, v13, 0); /*0x22e77*/
}
}
if ( !*(_BYTE *)(a1 + 58) ) /*0x22e84*/
RstHelper_309c("\n"); /*0x22e91*/
}
else if ( !*(_BYTE *)(a1 + 58) ) /*0x22d42*/
{
RstHelper_309c("No device selected.\n"); /*0x22d52*/
}
}
// Function: RstErrorCodeToString @ 0x22ea4 (0x1d bytes)
// Index: 899/906
const char *__fastcall RstErrorCodeToString(__int64 n12)
{
if ( (unsigned __int16)n12 < 0x2Du ) /*0x22ea8*/
// "Ok" /*0x22ebc*/
return off_35170[(int)n12]; /*0x22ebc*/
else
return "Invalid error code"; /*0x22eaa*/
}
// Function: _disable_w @ 0x22ed0 (0x2 bytes)
// Index: 900/906
void sub_22ED0()
{
_disable(); /*0x22ed0*/
}
// Function: _enable_w @ 0x22ee0 (0x2 bytes)
// Index: 901/906
void sub_22EE0()
{
_enable(); /*0x22ee0*/
}
// Function: __getcallerseflags_w @ 0x22ef0 (0x3 bytes)
// Index: 902/906
unsigned __int64 sub_22EF0()
{
return __getcallerseflags(); /*0x22ef2*/
}
// Function: RstAsciiToUnicodeSerialPrint @ 0x22ef4 (0xde bytes)
// Index: 903/906
__int64 __fastcall RstAsciiToUnicodeSerialPrint(__int64 a1, _BYTE *a2, unsigned __int16 n255)
{
unsigned __int16 n255_1; // r9
unsigned __int16 i; // r8
__int16 v5; // cx
__int64 v6; // rax
__int64 SystemTable; // rcx
__int64 result; // rax
_WORD v9[260]; // [rsp+20h] [rbp-208h] BYREF
n255_1 = 255; /*0x22efd*/
if ( n255 < 0xFFu ) /*0x22f07*/
n255_1 = n255; /*0x22f07*/
for ( i = 0; i < n255_1; v9[v6] = v5 ) /*0x22f16*/
{
if ( !*a2 ) /*0x22f1c*/
break; /*0x22f1e*/
v5 = (unsigned __int8)*a2; /*0x22f20*/
v6 = i++; /*0x22f23*/
++a2; /*0x22f2b*/
}
SystemTable = SystemTable; /*0x22f39*/
v9[i] = 0; /*0x22f44*/
result = qword_58048; /*0x22f4d*/
if ( *(_QWORD *)(SystemTable + 64) ) /*0x22f49*/
{
result = *(_QWORD *)(SystemTable + 64); /*0x22f89*/
qword_58048 = result; /*0x22f8c*/
}
else if ( !qword_58048 ) /*0x22f5c*/
{
(*(void (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27750, 0, &qword_58048); /*0x22f75*/
result = qword_58048; /*0x22f7b*/
}
if ( result ) /*0x22f96*/
{
(*(void (__fastcall **)(__int64, _QWORD))(result + 40))(result, (unsigned __int8)byte_352E2); /*0x22fa2*/
(*(void (__fastcall **)(__int64, _WORD *))(qword_58048 + 8))(qword_58048, v9); /*0x22fb4*/
return (*(__int64 (__fastcall **)(__int64, __int64))(qword_58048 + 40))(qword_58048, 7); /*0x22fc6*/
}
return result; /*0x22fc9*/
}
// Function: RstVideoOutputProcessEscCodes @ 0x22fd4 (0xc7 bytes)
// Index: 904/906
__int64 __fastcall RstVideoOutputProcessEscCodes(unsigned __int16 a1, _BYTE *a2)
{
__int64 n0xFFFF; // rax
_BYTE *v3; // rbx
signed __int16 n255; // di
char v6; // si
int n255_1; // eax
n0xFFFF = 0xFFFF; /*0x22ff0*/
v3 = a2; /*0x22ff5*/
n255 = 0; /*0x22ffb*/
if ( word_58040 != -1 && a2 ) /*0x2300b*/
{
if ( *a2 ) /*0x2300d*/
{
do /*0x2306b*/
{
if ( v3[n255] == 0xF0 ) /*0x2301a*/
{
v6 = v3[n255 + 1]; /*0x2301c*/
RstAsciiToUnicodeSerialPrint(a1, v3, n255); /*0x2302b*/
if ( (v6 & 0xF0) == 0xE0 ) /*0x2303b*/
v6 = byte_352E2 ^ (byte_352E2 ^ v6) & 0xF; /*0x2304a*/
n255_1 = n255; /*0x2304d*/
byte_352E2 = v6; /*0x23050*/
n255 = 0; /*0x23057*/
v3 += n255_1 + 2; /*0x2305f*/
}
else
{
++n255; /*0x23064*/
}
}
while ( v3[n255] ); /*0x2306b*/
}
return RstAsciiToUnicodeSerialPrint(a1, v3, n255); /*0x2307b*/
}
return n0xFFFF; /*0x23094*/
}
// Function: RstHelper_309c @ 0x2309c (0x49 bytes)
// Index: 905/906
__int64 sub_2309C(char *a1, ...)
{
_BYTE v2[264]; // [rsp+20h] [rbp-108h] BYREF
va_list va; // [rsp+138h] [rbp+10h] BYREF
va_start(va, a1);
HiiGetStringOrNull((__int64)v2, 0x100u, a1, va); /*0x230c7*/
return RstVideoOutputProcessEscCodes(word_58040, v2); /*0x230dd*/
}
// Function: _mm_crc32_u32_w @ 0x23100 (0xd bytes)
// Index: 906/906
__int64 _mm_crc32_u32_wunsigned int a1, unsigned int a2)
{
return _mm_crc32_u32(a1, a2); /*0x2310b*/
}