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