SmKmEtwAppendObjectName
INT64 __fastcall SmKmEtwAppendObjectName(INT64 a1, UINT64 DeviceAttachmentBaseRefWithTag){
unsigned int v2;
unsigned int v4;
__int64 v6;
UINT8 *v7;
_OBJECT_NAME_INFORMATION *v8;
unsigned int v9;
void *v10;
UINT8 v11;
int v12;
UINT8 *Buffer;
unsigned __int16 v14;
unsigned __int16 *v15;
unsigned int v16;
unsigned __int16 **v17;
__int64 v18;
INT64 result;
INT64 *v20;
UINT64 ReturnLength;
__int128 Src[2];
v2 = *(_DWORD *)(a1 + 24);
v4 = *(_DWORD *)(a1 + 28) - v2;
LODWORD(ReturnLength) = 0;
v6 = *(_QWORD *)(a1 + 8) + v2;
Src[0] = *(_OWORD *)L"\\Device\\Unknown";
Src[1] = *(_OWORD *)L"Unknown";
v7 = (UINT8 *)(v6 + 2);
v8 = (_OBJECT_NAME_INFORMATION *)((v6 + 9) & 0xFFFFFFFFFFFFFFF8ui64);
v9 = v6 + v4 - (_DWORD)v8;
*(_QWORD *)&v8->Name.Length = 0i64;
v8->Name.Buffer = 0i64;
if( (DeviceAttachmentBaseRefWithTag & 1) != 0 )
{
DeviceAttachmentBaseRefWithTag = (UINT64)IoGetDeviceAttachmentBaseRefWithTag(
(DEVICE_OBJECT *)(DeviceAttachmentBaseRefWithTag & 0xFFFFFFFFFFFFFFFEui64),
0x746C6644ui64);
v10 = (void *)DeviceAttachmentBaseRefWithTag;
}
else
{
v10 = 0i64;
}
if( DeviceAttachmentBaseRefWithTag )
{
v11 = IoSetThreadHardErrorMode(0);
v12 = ObQueryNameString((VOID *)DeviceAttachmentBaseRefWithTag, v8, v9, &ReturnLength);
if( v10 )
ObfDereferenceObjectWithTag(v10, 0x746C6644ui64);
IoSetThreadHardErrorMode(v11);
}
else
{
v12 = -1073741809;
}
if( v12 >= 0 && v8->Name.Length )
{
Buffer = (UINT8 *)v8->Name.Buffer;
v14 = v8->Name.Length >> 1;
}
else
{
Buffer = (UINT8 *)Src;
v14 = 15;
}
memmove(v7, Buffer, 2i64 * v14);
v15 = (unsigned __int16 *)(*(_QWORD *)(a1 + 8) + *(unsigned int *)(a1 + 24));
v16 = 2 * v14;
*v15 = v14;
v17 = (unsigned __int16 **)(*(_QWORD *)a1 + 16i64 * *(unsigned int *)(a1 + 16));
*v17 = v15;
v17[1] = (unsigned __int16 *)2;
v18 = (unsigned int)++*(_DWORD *)(a1 + 16);
*(_DWORD *)(a1 + 24) += 2;
result = *(_QWORD *)(a1 + 8) + *(unsigned int *)(a1 + 24);
v20 = (INT64 *)(*(_QWORD *)a1 + 16 * v18);
*v20 = result;
v20[1] = v16;
++*(_DWORD *)(a1 + 16);
*(_DWORD *)(a1 + 24) += v16;
return result;
}Referenced by:
SmKmStoreTerminateWorker