ExpCreateOutputSIGNATURE
INT64 __fastcall ExpCreateOutputSIGNATURE(
__int64 a1,
unsigned int *a2,
unsigned int *a3,
unsigned int *a4,
__int64 a5,
__int64 a6,
wchar_t *a7,
char a8){
unsigned int v8;
__int64 v10;
unsigned int v11;
__int64 v12;
unsigned int v13;
__int64 v14;
__int64 v15;
INT64 result;
__int64 v17;
__int64 v18;
__int64 v19;
_UNICODE_STRING GuidString;
unsigned int *v21;
v21 = a2;
v8 = 93;
GuidString = 0i64;
if( a8 != 1 )
v8 = 63;
v10 = -1i64;
v11 = 0;
if( a7 )
{
v12 = -1i64;
do
++v12;
while( a7[v12] );
v8 += v12;
}
else
{
LODWORD(v12) = 0;
}
v13 = 2 * v8 + 12;
if( *a2 >= v13 )
{
v14 = a1 + 12;
*(_DWORD *)a1 = 1;
*(_DWORD *)(a1 + 4) = v13;
*(_DWORD *)(a1 + 8) = 2;
wcscpy_s((PWCHAR)(a1 + 12), v8, (PWCHAR)L"signature(");
v15 = -1i64;
do
++v15;
while( *(_WORD *)(v14 + 2 * v15) );
if( a8 == 1 )
{
result = RtlStringFromGUIDEx((const _GUID *const)a3, &GuidString, 1u);
if( (int)result < 0 )
return result;
wcscat_s((WCHAR *)(v14 + 2i64 * (unsigned int)v15), v8 - (unsigned int)v15, GuidString.Buffer);
ExFreePoolWithTag(GuidString.Buffer, 0);
LODWORD(v17) = GuidString.Length >> 1;
}
else
{
swprintf_s((WCHAR *)(v14 + 2i64 * (unsigned int)v15), v8 - (unsigned int)v15, (WCHAR *)L"%08x");
v17 = -1i64;
do
++v17;
while( *(_WORD *)(v14 + 2i64 * (unsigned int)v15 + 2 * v17) );
}
v18 = (unsigned int)(v17 + v15);
swprintf_s((WCHAR *)(v14 + 2 * v18), v8 - (unsigned int)v18, (WCHAR *)L"-%08x-%016I64x-%016I64x)");
do
++v10;
while( *(_WORD *)(v14 + 2 * v18 + 2 * v10) );
v19 = (unsigned int)(v18 + v10);
if( (_DWORD)v12 )
wcscpy_s((PWCHAR)(v14 + 2 * v19), v8 - (unsigned int)v19, a7);
a2 = v21;
}
else
{
v11 = -1073741789;
}
*a2 = v13;
return v11;
}Referenced by:
ExpTranslateEfiPath
ExpTranslateNtPath