IoWMIDeviceObjectToInstanceName

NTSTATUS __stdcall IoWMIDeviceObjectToInstanceName(
        VOID *DataBlockObject,
        _DEVICE_OBJECT *DeviceObject,
        _UNICODE_STRING *InstanceName){
  _ADAPTER_OBJECT *v5; 
  _ADAPTER_OBJECT *v6; 
  int GuidObjectInstanceInfo; 
  UINT64 v8; 
  VOID **PoolWithTag; 
  __int64 v10; 
  _UNICODE_STRING BaseName; 
  UINT64 BaseIndex; 

  LODWORD(BaseIndex) = 0;
  BaseName = 0i64;
  LODWORD(v5) = IoGetDeviceAttachmentBaseRef((INT64)DeviceObject, (INT64)DeviceObject, (INT64)InstanceName);
  v6 = v5;
  GuidObjectInstanceInfo = WmipGetGuidObjectInstanceInfo(
                             (_WMIGUIDOBJECT *)DataBlockObject,
                             (ULONG_PTR)v5,
                             &BaseName,
                             &BaseIndex);
  if( GuidObjectInstanceInfo >= 0 )
  {
    v8 = (unsigned __int16)(BaseName.Length + 32);
    InstanceName->MaximumLength = v8;
    PoolWithTag = ExAllocatePoolWithTag(1ui64, v8, 1231646039i64);
    InstanceName->Buffer = (wchar_t *)PoolWithTag;
    if( PoolWithTag )
    {
      RtlStringCbPrintfW((WCHAR *)PoolWithTag, InstanceName->MaximumLength, (WCHAR *)L"%ws_%d");
      v10 = -1i64;
      do
        ++v10;
      while( InstanceName->Buffer[v10] );
      GuidObjectInstanceInfo = 0;
      InstanceName->Length = 2 * v10;
    }
    else
    {
      GuidObjectInstanceInfo = -1073741670;
    }
    if( BaseName.Buffer )
      RtlFreeAnsiString(&BaseName);
  }
  HalPutDmaAdapter(v6);
  return GuidObjectInstanceInfo;
}

Referenced by:

IoWMIHandleToInstanceName