IoQueryDeviceDescription

NTSTATUS __stdcall IoQueryDeviceDescription(
        PINTERFACE_TYPE BusType,
        PULONG BusNumber,
        PCONFIGURATION_TYPE ControllerType,
        PULONG ControllerNumber,
        PCONFIGURATION_TYPE PeripheralType,
        PULONG PeripheralNumber,
        PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
        PVOID Context){
  int v8; 
  PVOID Handle; 
  _UNICODE_STRING Destination; 
  _UNICODE_STRING PathName; 
  _IO_QUERY_DESC QueryDescription[2]; 
  PULONG v14; 
  PCONFIGURATION_TYPE v15; 
  PULONG v16; 
  PCONFIGURATION_TYPE v17; 
  PULONG v18; 
  PIO_QUERY_DEVICE_ROUTINE v19; 
  PVOID v20; 
  UINT64 BusNum; 

  Handle = 0i64;
  LODWORD(BusNum) = -1;
  Destination = 0i64;
  if( !BusType )
    return -1073741822;
  v17 = PeripheralType;
  v18 = PeripheralNumber;
  v19 = CalloutRoutine;
  v14 = BusNumber;
  *(_QWORD *)QueryDescription = BusType;
  v15 = ControllerType;
  v20 = Context;
  v16 = ControllerNumber;
  Destination.MaximumLength = 2048;
  Destination.Buffer = (wchar_t *)ExAllocatePoolWithTag(1ui64, 0x800ui64, 1314025289i64);
  if( !Destination.Buffer )
    return -1073741670;
  RtlAppendUnicodeStringToString(&Destination, &CmRegistryMachineHardwareDescriptionSystemName);
  v8 = IopOpenRegistryKey(&Handle, 0i64, &Destination, 0x20019ui64, 0);
  if( v8 >= 0 )
  {
    PathName = Destination;
    v8 = pIoQueryBusDescription(QueryDescription, &PathName, Handle, &BusNum, 1u);
    ZwClose((_HANDLE)Handle);
  }
  ExFreePoolWithTag(Destination.Buffer, 0);
  if( v8 == -2147483622 )
    return -1073741772;
  return v8;
}

Referenced by:

No references.