SmKmEtwAppendProductName
NTSTATUS __fastcall SmKmEtwAppendProductName(__int64 *a1, __int64 a2, __int64 a3, _KEY_VALUE_FULL_INFORMATION **a4){
_UNICODE_STRING *v5;
_FILE_OBJECT *v6;
__int64 v7;
wchar_t *v8;
unsigned int v9;
__int64 v10;
_UNICODE_STRING *v11;
NTSTATUS UniqueId;
__int64 v13;
__int64 v14;
wchar_t *v15;
__int64 v16;
size_t v17;
__int64 v18;
unsigned int v19;
__int64 v20;
__int64 v21;
int v22;
unsigned int v23;
__int64 v24;
__int64 v25;
NTSTATUS result;
UINT8 *v27;
_UNICODE_STRING *KeyName;
_FILE_OBJECT *v29;
v5 = *(_UNICODE_STRING **)(a2 + 24);
v29 = 0i64;
v6 = 0i64;
KeyName = v5;
if( !v5 )
{
SmKmStoreFileOpenVolume(*(_FILE_OBJECT **)(a2 + 8), &v29, (PDEVICE_OBJECT *)&KeyName);
v5 = KeyName;
v6 = v29;
}
v7 = a1[1] + *((unsigned int *)a1 + 6);
v8 = (wchar_t *)((v7 + 1) & 0xFFFFFFFFFFFFFFFEui64);
v9 = v7 + *((_DWORD *)a1 + 7) - *((_DWORD *)a1 + 6) - (_DWORD)v8;
if( v5 )
{
v10 = 256i64;
v11 = (_UNICODE_STRING *)((v7 + 1) & 0xFFFFFFFFFFFFFFFEui64);
if( v9 < 0x100 )
v10 = v9;
UniqueId = SmKmVolumeQueryUniqueId(v5, v11, (UINT64 *)v10, a4, v27);
}
else
{
UniqueId = -1073741275;
}
if( UniqueId < 0 )
*v8 = 0;
v13 = -1i64;
v14 = -1i64;
do
++v14;
while( v8[v14] );
v15 = &v8[(unsigned int)v14 + 1];
if( SmUniqueIdParseProductName(v8, v15, v9 - 2 * (_DWORD)v14 - 2) < 0 )
{
LODWORD(v13) = 0;
}
else
{
do
++v13;
while( v15[v13] );
}
v16 = *((unsigned int *)a1 + 6);
v17 = 2 * v13;
v18 = a1[1];
v19 = *((_DWORD *)a1 + 4);
v20 = *a1;
v21 = 2i64 * v19;
v22 = v16 + 2;
*(_WORD *)(v16 + v18) = v13;
v23 = v19 + 1;
v24 = v18 + (unsigned int)(v16 + 2);
*(_QWORD *)(v20 + 8 * v21) = v16 + v18;
*(_QWORD *)(v20 + 8 * v21 + 8) = 2i64;
if( v15 )
memmove((VOID *)(v18 + (unsigned int)(v16 + 2)), v15, v17);
v25 = v20 + 16i64 * v23;
*(_DWORD *)(v25 + 12) = 0;
*(_QWORD *)v25 = v24;
*(_DWORD *)(v25 + 8) = v17;
*((_DWORD *)a1 + 4) = v23 + 1;
result = v17 + v22;
*((_DWORD *)a1 + 6) = v17 + v22;
if( v6 )
return ObfDereferenceObjectWithTag(v6, 0x746C6644ui64);
return result;
}Referenced by:
SmKmStoreTerminateWorker