RtlUnicodeStringPrintfEx
NTSTATUS __stdcall RtlUnicodeStringPrintfEx(
_UNICODE_STRING *DestinationString,
_UNICODE_STRING *RemainingString,
UINT64 dwFlags,
WCHAR *pszFormat){
ULONG v5;
size_t v6;
WCHAR *v7;
WCHAR *v8;
unsigned __int64 v9;
NTSTATUS v10;
unsigned __int16 Length;
unsigned __int64 MaximumLength;
wchar_t *Buffer;
WCHAR *v14;
unsigned __int64 v15;
unsigned __int64 v16;
int v17;
WCHAR *v19;
size_t pcchNewDestLength[2];
wchar_t *v21;
WCHAR *ppszDestEnd;
size_t pcchRemaining[2];
char Args;
v5 = dwFlags;
v6 = 0;
v7 = pszFormat;
v8 = 0i64;
v9 = 0i64;
v21 = 0i64;
v10 = 0;
if( DestinationString || (v5 & 0x100) == 0 )
{
Length = DestinationString->Length;
if( (DestinationString->Length & 1) != 0 )
return -1073741811;
MaximumLength = DestinationString->MaximumLength;
if( (MaximumLength & 1) != 0 || Length > (unsigned __int16)MaximumLength || (_WORD)MaximumLength == 0xFFFF )
return -1073741811;
Buffer = DestinationString->Buffer;
if( !Buffer && (Length || (_WORD)MaximumLength) )
{
v10 = -1073741811;
v8 = 0i64;
}
else
{
v21 = DestinationString->Buffer;
v9 = MaximumLength >> 1;
v8 = Buffer;
}
}
if( v10 >= 0 )
{
ppszDestEnd = v8;
v14 = v8;
*(_QWORD *)pcchRemaining = v9;
LOWORD(v15) = v9;
*(_QWORD *)pcchNewDestLength = 0i64;
LOWORD(v16) = 0;
if( (v5 & 0x100) != 0 )
{
v19 = (WCHAR *)&::ppszDestEnd;
if( pszFormat )
v19 = pszFormat;
v7 = v19;
}
v10 = 0;
if( (v5 & 0xFFFFE000) != 0 )
{
v10 = -1073741811;
}
else if( v9 )
{
*(_QWORD *)pcchRemaining = 0i64;
v17 = vsnwprintf(v8, v9, v7, &Args);
if( v17 < 0 || (v16 = v17, v17 > v9) )
{
v16 = v9;
*(_QWORD *)pcchNewDestLength = v9;
v10 = -2147483643;
}
else
{
*(_QWORD *)pcchNewDestLength = v17;
}
v8 = v21;
v15 = v9 - v16;
*(_QWORD *)pcchRemaining = v9 - v16;
v14 = &v21[v16];
ppszDestEnd = v14;
if( v10 >= 0 )
{
if( (v5 & 0x200) != 0 && v15 )
memset(&v21[v16], (unsigned __int8)v5, 2 * v15);
goto LABEL_17;
}
}
else
{
if( !*v7 )
{
LABEL_17:
if( DestinationString )
DestinationString->Length = 2 * v16;
if( (int)(v10 + 0x80000000) < 0 || v10 == -2147483643 )
{
if( RemainingString )
{
RemainingString->Length = 0;
RemainingString->MaximumLength = 2 * v15;
RemainingString->Buffer = v14;
}
}
return v10;
}
v10 = v8 != 0i64 ? -2147483643 : -1073741811;
}
if( (v5 & 0x1C00) != 0 && v9 )
{
RtlUnicodeStringExHandleOtherFlags(v8, v9, v6, pcchNewDestLength, &ppszDestEnd, pcchRemaining, v5);
v14 = ppszDestEnd;
LOWORD(v15) = pcchRemaining[0];
LOWORD(v16) = pcchNewDestLength[0];
}
goto LABEL_17;
}
return v10;
}Referenced by:
PiBuildAndOpenDeviceDirectoryPath
PiCreateDriverRedirectedStateKey
PiDevCfgBuildDriverConfigurationId
PiDevCfgBuildIndirectString
PiDevCfgLogDeviceConfigured
PiGetDriverMutableStateDirectory
PiOpenDriverRedirectedStateKey