RtlFormatMessageEx
INT64 __stdcall RtlFormatMessageEx(
WCHAR *MessageFormat,
UINT64 MaximumWidth,
UINT8 IgnoreInserts,
UINT8 ArgumentsAreAnsi,
UINT8 ArgumentsAreAnArray,
INT8 **Arguments,
WCHAR *Buffer,
UINT64 Length,
UINT64 *ReturnLength){
INT8 **v9;
UINT8 v10;
unsigned int v12;
WCHAR *v13;
WCHAR *v14;
signed int v15;
unsigned int v16;
WCHAR *v17;
WCHAR v18;
WCHAR *v19;
int v20;
__int64 v21;
unsigned int v22;
unsigned int v23;
WCHAR v24;
unsigned int v25;
unsigned int v26;
__int64 v27;
unsigned int v28;
WCHAR *v29;
NTSTRSAFE_PWSTR v30;
char v31;
WCHAR v32;
wchar_t v33;
__int16 *v34;
unsigned int v35;
int v36;
int v37;
char *v38;
__int16 v39;
unsigned __int16 v40;
int v41;
__int64 v42;
signed __int64 v43;
__int16 v44;
unsigned __int16 v45;
signed __int64 v46;
__int16 v47;
char *v48;
unsigned int v49;
unsigned int v50;
__int64 v51;
wchar_t *v52;
INT8 *v53;
__int64 v54;
__int64 v55;
__int64 v56;
unsigned int v57;
__int64 v58;
WCHAR v59;
UINT8 *v60;
unsigned __int64 v61;
__int16 v62;
__int64 v63;
__int64 v64;
_WORD *v65;
_WORD *v66;
_WORD *v67;
UINT64 *v69;
UINT64 dwFlags;
__int64 v71;
unsigned int v74;
unsigned int v75;
INT8 **v76;
unsigned int v77;
unsigned int v78;
NTSTRSAFE_PWSTR ppszDestEnd;
NTSTRSAFE_PWSTR v80;
int v81;
int v82;
int v83;
WCHAR *v84;
__int64 v85;
WCHAR *v86;
UINT64 *v87;
__int64 v88[200];
wchar_t pszDest;
__int16 v90[30];
__int16 v91[9];
v9 = Arguments;
v10 = IgnoreInserts;
v78 = MaximumWidth;
v12 = MaximumWidth;
v13 = Buffer;
v87 = ReturnLength;
v14 = Buffer;
v76 = Arguments;
v84 = Buffer;
ppszDestEnd = 0i64;
v80 = 0i64;
v74 = 0;
v15 = (unsigned int)Length >> 1;
v81 = 37;
v85 = 8i64;
v82 = 10;
v83 = 32;
LABEL_2:
v16 = 0;
v75 = 0;
LABEL_3:
v17 = 0i64;
while( 1 )
{
v18 = *MessageFormat;
v19 = v14;
if( !*MessageFormat )
break;
++MessageFormat;
if( v18 != (_WORD)v81 )
{
if( v18 == 13 || v18 == (_WORD)v82 )
{
if( v18 == 10 && *MessageFormat == 13 || v18 == 13 && *MessageFormat == 10 )
++MessageFormat;
if( !v12 )
{
v15 -= 2;
if( v15 < 0 )
return 2147483653i64;
*v14 = 13;
v67 = v14 + 1;
*v67 = 10;
v14 = v67 + 1;
goto LABEL_2;
}
v17 = v14;
v18 = 32;
}
if( --v15 < 0 )
return 2147483653i64;
*v14 = v18;
++v16;
++v14;
if( v18 != (_WORD)v83 )
v19 = v17;
v17 = v19;
goto LABEL_118;
}
v20 = *MessageFormat;
v21 = (__int64)v14;
v86 = v14;
if( (unsigned __int16)(v20 - 49) <= (unsigned __int16)v85 )
{
++MessageFormat;
v22 = v20 - 48;
v23 = *MessageFormat;
v24 = v23;
if( (unsigned __int16)v23 >= 0x30u && v23 <= 0x39 )
{
++MessageFormat;
v22 = v23 + 2 * (5 * v22 - 24);
v25 = *MessageFormat;
v24 = v25;
if( (unsigned __int16)v25 >= 0x30u && v25 <= 0x39 )
{
++MessageFormat;
v22 = v25 + 2 * (5 * v22 - 24);
v24 = *MessageFormat;
if( *MessageFormat >= 0x30u && *MessageFormat <= 0x39u )
return 3221225485i64;
}
}
v26 = v22;
v27 = v22 - 1;
v77 = 0;
v28 = 0;
if( v24 == 33 )
{
v29 = MessageFormat + 1;
pszDest = 37;
v30 = (NTSTRSAFE_PWSTR)v90;
v31 = 0;
ppszDestEnd = (NTSTRSAFE_PWSTR)v90;
v32 = *v29;
if( *v29 != 33 )
{
v33 = *v29;
v34 = v90;
while( v33 )
{
if( v34 >= v91 )
break;
if( v33 == 42 )
{
v35 = v28;
v33 = v32;
v77 = ++v28;
if( v35 > 1 )
break;
}
*v30 = v33;
++v29;
v30 = (NTSTRSAFE_PWSTR)(v34 + 1);
ppszDestEnd = (NTSTRSAFE_PWSTR)++v34;
v32 = *v29;
v33 = *v29;
if( *v29 == 33 )
goto LABEL_21;
}
return 3221225485i64;
}
LABEL_21:
MessageFormat = v29 + 1;
*v30 = 0;
}
else
{
LODWORD(dwFlags) = 0;
RtlStringCbCopyExW(&pszDest, 0x40ui64, (WCHAR *)L"%s", &ppszDestEnd, 0i64, dwFlags);
v30 = ppszDestEnd;
v31 = 1;
v9 = v76;
}
if( IgnoreInserts )
{
if( v31 == 1 )
goto LABEL_30;
v36 = pszDest - 37;
if( pszDest == 37 )
{
v36 = (unsigned __int16)v90[0] - 115;
if( v90[0] == 115 )
v36 = (unsigned __int16)v90[1];
}
if( !v36 )
{
LABEL_30:
LODWORD(v71) = v26;
RtlStringCchPrintfExW(v14, v15, &v80, 0i64, 0i64, L"%%%u", v71);
}
else
{
LODWORD(v71) = v26;
RtlStringCchPrintfExW(v14, v15, &v80, 0i64, 0i64, L"%%%u!%s!", v71, v90);
}
LABEL_73:
if( v37 < 0 )
return 2147483653i64;
v58 = v80 - v14;
v15 -= v58;
if( v15 < 0 )
return 2147483653i64;
v16 = v75;
v9 = v76;
v21 = (__int64)v86;
v13 = v84;
v12 = v78;
v10 = IgnoreInserts;
v14 += (int)v58;
goto LABEL_102;
}
if( !v9 || v28 + (unsigned int)v27 >= 0xC8 )
return 3221225485i64;
if( ArgumentsAreAnsi )
{
v38 = (char *)(v30 - 1);
v39 = *(v30 - 1);
if( v39 == 99 )
{
v40 = *(v30 - 2) - 104;
if( v40 > 0xFu || (v41 = 32785, !_bittest(&v41, v40)) )
{
v42 = 3i64;
v43 = (char *)L"hc" - v38;
do
{
if( v42 == -2147483643 )
break;
v44 = *(_WORD *)&v38[v43];
if( !v44 )
break;
*(_WORD *)v38 = v44;
v38 += 2;
--v42;
}
while( v42 );
goto LABEL_50;
}
}
else
{
v41 = 32785;
}
if( v39 != 115 || (v45 = *(v30 - 2) - 104, v45 <= 0xFu) && _bittest(&v41, v45) )
{
if( v39 == 83 )
{
*(_WORD *)v38 = 115;
}
else if( v39 == 67 )
{
*(_WORD *)v38 = 99;
}
}
else
{
v42 = 3i64;
v46 = (char *)L"hs" - v38;
do
{
if( v42 == -2147483643 )
break;
v47 = *(_WORD *)&v38[v46];
if( !v47 )
break;
*(_WORD *)v38 = v47;
v38 += 2;
--v42;
}
while( v42 );
LABEL_50:
v48 = v38 - 2;
if( v42 )
v48 = v38;
*(_WORD *)v48 = 0;
}
}
v49 = v74;
if( (unsigned int)v27 >= v74 )
{
do
{
v50 = v49 + 1;
if( ArgumentsAreAnArray )
{
v51 = (__int64)*v9++;
}
else
{
*v9 += 8;
v51 = *((_QWORD *)*v9 - 1);
}
v88[v49++] = v51;
}
while( v50 <= (unsigned int)v27 );
v28 = v77;
v76 = v9;
v74 = v50;
}
v52 = (wchar_t *)v88[v27];
ppszDestEnd = v52;
v53 = 0i64;
v54 = 0i64;
if( v28 )
{
if( ArgumentsAreAnArray )
{
v53 = *v9;
v55 = v49++;
v74 = v49;
v88[v55] = (__int64)*v9++;
v76 = v9;
}
else
{
*v9 += 8;
v53 = (INT8 *)*((_QWORD *)*v9 - 1);
}
if( v28 > 1 )
{
v56 = v49;
v57 = v49 + 1;
v74 = v57;
if( ArgumentsAreAnArray )
{
v54 = (__int64)*v9;
v76 = v9 + 1;
}
else
{
*v9 += 8;
v74 = v57;
v54 = *((_QWORD *)*v9 - 1);
}
v88[v56] = v54;
}
}
RtlStringCchPrintfExW(v14, v15, &v80, 0i64, 0i64, &pszDest, v52, v53, v54);
goto LABEL_73;
}
if( (_WORD)v20 == 48 )
break;
if( !(_WORD)v20 )
return 3221225485i64;
switch( v20 )
{
case 'r':
if( --v15 < 0 )
return 2147483653i64;
*v14 = 13;
LABEL_81:
++v14;
++MessageFormat;
LABEL_103:
v17 = 0i64;
v16 = 0;
goto LABEL_118;
case 'n':
v15 -= 2;
if( v15 < 0 )
return 2147483653i64;
*v14++ = 13;
*v14 = 10;
goto LABEL_81;
case 't':
if( --v15 < 0 )
return 2147483653i64;
if( (v16 & 7) != 0 )
v16 = (v16 + 7) & 0xFFFFFFF8;
else
v16 += 8;
v59 = 9;
LABEL_91:
v17 = v14;
goto LABEL_92;
case 'b':
if( --v15 < 0 )
return 2147483653i64;
v59 = 32;
goto LABEL_91;
}
if( !v10 )
{
if( --v15 < 0 )
return 2147483653i64;
*v14 = v20;
goto LABEL_101;
}
v15 -= 2;
if( v15 < 0 )
return 2147483653i64;
*v14++ = 37;
v59 = *MessageFormat;
LABEL_92:
*v14 = v59;
LABEL_101:
++v14;
++MessageFormat;
LABEL_102:
if( !v21 )
goto LABEL_103;
v16 += ((__int64)v14 - v21) >> 1;
LABEL_118:
v75 = v16;
if( v12 && v12 != -1 && v16 >= v12 )
{
if( v17 )
{
v60 = (UINT8 *)v17;
do
{
if( *(_WORD *)v60 != 32 && *(_WORD *)v60 != 9 )
break;
v60 += 2;
}
while( v60 != (UINT8 *)v14 );
if( v17 > v13 )
{
do
{
v61 = (unsigned __int64)(v17 - 1);
v62 = *(v17 - 1);
if( v62 != 32 && v62 != 9 )
break;
--v17;
}
while( v61 > (unsigned __int64)v13 );
}
v63 = (v60 - (UINT8 *)v17) >> 1;
if( (_DWORD)v63 == 1 )
{
if( --v15 >= 0 )
goto LABEL_135;
return 2147483653i64;
}
if( (unsigned int)v63 > 2 )
v15 = v63 + v15 - 2;
LABEL_135:
v64 = ((char *)v14 - (char *)v60) >> 1;
v16 = v64;
v75 = v64;
memmove((UINT8 *)v17 + 4, v60, 2 * v64);
v12 = v78;
*v17 = 13;
v65 = v17 + 1;
*v65 = 10;
v66 = &v65[(unsigned int)v64];
}
else
{
v15 -= 2;
if( v15 < 0 )
return 2147483653i64;
*v14 = 13;
v66 = v14 + 1;
v16 = 0;
v75 = 0;
*v66 = 10;
}
v9 = v76;
v14 = v66 + 1;
v13 = v84;
v10 = IgnoreInserts;
goto LABEL_3;
}
}
if( v15 < 1 )
return 2147483653i64;
v69 = v87;
*v14 = 0;
if( v69 )
*(_DWORD *)v69 = 2 * (((char *)v14 - (char *)v13 + 2) >> 1);
return 0i64;
}Referenced by:
PiGetDeviceRegProperty
PiGetDeviceRegistryProperty
RtlFormatMessage