IoWMIDeviceObjectToInstanceName
NTSTATUS __stdcall IoWMIDeviceObjectToInstanceName(
PVOID DataBlockObject,
PDEVICE_OBJECT DeviceObject,
PUNICODE_STRING InstanceName){
_DEVICE_OBJECT *DeviceAttachmentBaseRef;
NTSTATUS GuidObjectInstanceInfo;
UINT64 v7;
wchar_t *PoolWithTag;
__int64 v9;
struct _UNICODE_STRING UnicodeString;
int v12;
v12 = 0;
UnicodeString = 0i64;
DeviceAttachmentBaseRef = IoGetDeviceAttachmentBaseRef(DeviceObject);
GuidObjectInstanceInfo = WmipGetGuidObjectInstanceInfo(
(__int64)DataBlockObject,
(ULONG_PTR)DeviceAttachmentBaseRef,
&UnicodeString,
&v12);
if( GuidObjectInstanceInfo >= 0 )
{
v7 = (unsigned __int16)(UnicodeString.Length + 32);
InstanceName->MaximumLength = v7;
PoolWithTag = (wchar_t *)ExAllocatePoolWithTag(PagedPool, v7, 0x49696D57ui64);
InstanceName->Buffer = PoolWithTag;
if( PoolWithTag )
{
RtlStringCbPrintfW(PoolWithTag, InstanceName->MaximumLength, (WCHAR *)L"%ws_%d");
v9 = -1i64;
do
++v9;
while( InstanceName->Buffer[v9] );
GuidObjectInstanceInfo = 0;
InstanceName->Length = 2 * v9;
}
else
{
GuidObjectInstanceInfo = -1073741670;
}
if( UnicodeString.Buffer )
RtlFreeAnsiString(&UnicodeString);
}
HalPutDmaAdapter((PADAPTER_OBJECT)DeviceAttachmentBaseRef);
return GuidObjectInstanceInfo;
}Referenced by:
IoWMIHandleToInstanceName