SmKmEtwAppendProductName
VOID __fastcall SmKmEtwAppendProductName(INT64 a1, INT64 a2){
UINT64 v2;
DEVICE_OBJECT *v4;
FILE_OBJECT *v5;
__int64 v6;
WCHAR *v7;
unsigned int v8;
UINT64 v9;
VOID *v10;
int UniqueId;
__int64 v12;
__int64 v13;
WCHAR *v14;
__int64 v15;
unsigned int v16;
__int64 v17;
unsigned int v18;
__int64 v19;
__int64 v20;
int v21;
unsigned int v22;
__int64 v23;
__int64 v24;
DEVICE_OBJECT *DeviceObject;
FILE_OBJECT *v26;
v4 = *(DEVICE_OBJECT **)(a2 + 24);
v26 = 0i64;
v5 = 0i64;
DeviceObject = v4;
if( !v4 )
{
SmKmStoreFileOpenVolume(*(FILE_OBJECT **)(a2 + 8), &v26, &DeviceObject);
v4 = DeviceObject;
v5 = v26;
}
v6 = *(_QWORD *)(a1 + 8) + *(unsigned int *)(a1 + 24);
v7 = (WCHAR *)((v6 + 1) & 0xFFFFFFFFFFFFFFFEui64);
v8 = v6 + *(_DWORD *)(a1 + 28) - *(_DWORD *)(a1 + 24) - (_DWORD)v7;
if( v4 )
{
v9 = 256i64;
v10 = (VOID *)((v6 + 1) & 0xFFFFFFFFFFFFFFFEui64);
if( v8 < 0x100 )
v9 = v8;
UniqueId = SmKmVolumeQueryUniqueId(v4, v10, v9, v2);
}
else
{
UniqueId = -1073741275;
}
if( UniqueId < 0 )
*v7 = 0;
v12 = -1i64;
v13 = -1i64;
do
++v13;
while( v7[v13] );
v14 = &v7[(unsigned int)v13 + 1];
if( SmUniqueIdParseProductName(v7, v14, v8 - 2 * (_DWORD)v13 - 2) < 0 )
{
LODWORD(v12) = 0;
}
else
{
do
++v12;
while( v14[v12] );
}
v15 = *(unsigned int *)(a1 + 24);
v16 = 2 * v12;
v17 = *(_QWORD *)(a1 + 8);
v18 = *(_DWORD *)(a1 + 16);
v19 = *(_QWORD *)a1;
v20 = 2i64 * v18;
v21 = v15 + 2;
*(_WORD *)(v15 + v17) = v12;
v22 = v18 + 1;
v23 = v17 + (unsigned int)(v15 + 2);
*(_QWORD *)(v19 + 8 * v20) = v15 + v17;
*(_QWORD *)(v19 + 8 * v20 + 8) = 2i64;
if( v14 )
memmove((UINT8 *)(v17 + (unsigned int)(v15 + 2)), (UINT8 *)v14, v16);
v24 = v19 + 16i64 * v22;
*(_DWORD *)(v24 + 12) = 0;
*(_QWORD *)v24 = v23;
*(_DWORD *)(v24 + 8) = v16;
*(_DWORD *)(a1 + 16) = v22 + 1;
*(_DWORD *)(a1 + 24) = v16 + v21;
if( v5 )
ObfDereferenceObjectWithTag(v5, 0x746C6644ui64);
}Referenced by:
SmKmStoreTerminateWorker