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