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