Функция IoGetDeviceProperty (wdm.h)

Подпрограмма IoGetDeviceProperty извлекает сведения об устройстве, такие как сведения о конфигурации и имя его PDO.

Синтаксис

NTSTATUS IoGetDeviceProperty(
  [in]            PDEVICE_OBJECT           DeviceObject,
  [in]            DEVICE_REGISTRY_PROPERTY DeviceProperty,
  [in]            ULONG                    BufferLength,
  [out, optional] PVOID                    PropertyBuffer,
  [out]           PULONG                   ResultLength
);

Параметры

[in] DeviceObject

Указатель на объект физического устройства (PDO) для запрашиваемого устройства.

[in] DeviceProperty

Указывает запрашиваемое свойство устройства. Должно быть одним из следующих значений перечисления DEVICE_REGISTRY_PROPERTY :

DevicePropertyAddress

Запрашивает адрес устройства в шине. PropertyBuffer указывает на ULONG.

Интерпретация этого адреса зависит от шины. Вызывающий объект этой подпрограммы должен снова вызвать подпрограмму, чтобы запросить DevicePropertyBusTypeGuid или, возможно, DevicePropertyLegacyBusType, чтобы он мог интерпретировать адрес. Значение адреса 0xFFFFFFFF указывает, что базовый водитель автобуса не указал адрес автобуса для устройства.

В следующем списке описаны сведения, которые некоторые водители автобуса хранят в PropertyBuffer для своих дочерних устройств.

Шина Описание
1394 Не предоставляет адрес, так как адреса являются переменными. По умолчанию используется 0xFFFFFFFF.
EISA Номер слота (0–F).
IDE Для устройства интегрированной среды разработки адрес содержит целевой идентификатор и LUN. Для канала интегрированной среды разработки адрес равен нулю или одному (0 = основной канал и 1 = дополнительный канал).
ISApnp Не предоставляет адрес. По умолчанию используется 0xFFFFFFFF.
Pc Card (PCMCIA) Номер сокета (обычно 0x00 или 0x40).
PCI Номер устройства в высоком слове и номер функции в нижнем слове.
SCSI Идентификатор целевого объекта.
USB номер порта.

DevicePropertyBootConfiguration

Запрашивает аппаратные ресурсы, назначенные устройству встроенным ПО, в необработанном виде. PropertyBuffer указывает на структуру CM_RESOURCE_LIST .

DevicePropertyBootConfigurationTranslated

Аппаратные ресурсы, назначенные устройству встроенным ПО в переведенном виде. PropertyBuffer указывает на структуру CM_RESOURCE_LIST .

DevicePropertyBusNumber

Запрашивает устаревший номер шины, к которому подключено устройство. PropertyBuffer указывает на ULONG.

DevicePropertyBusTypeGuid

Запрашивает GUID для шины, к которому подключено устройство. Идентификаторы GUID типа системной шины перечислены в файле заголовка Wdmguid.h. PropertyBuffer указывает на GUID, который представляет собой 16-байтовую структуру, содержащую GUID в двоичной форме.

DevicePropertyClassGuid

Запрашивает GUID для класса установки устройства. PropertyBuffer указывает на массив WCHAR, завершающийся значением NULL. Эта подпрограмма возвращает GUID в строковом формате следующим образом, где каждый "c" представляет шестнадцатеричный символ: {cccccccc-cccc-cccc-cccc-cccccc}

DevicePropertyClassName

Запрашивает имя класса установки устройства в текстовом формате. PropertyBuffer указывает на строку WCHAR с завершением NULL.

DevicePropertyCompatibleIDs

Запрашивает совместимые идентификаторы, сообщаемые устройством. PropertyBuffer указывает на значение REG_MULTI_SZ.

DevicePropertyDeviceDescription

Запрашивает строку, описывающую устройство, например "Microsoft PS/2 Port Mouse", обычно определяемую производителем. PropertyBuffer указывает на строку WCHAR с завершением NULL.

DevicePropertyDriverKeyName

Запрашивает имя раздела реестра для конкретного драйвера. PropertyBuffer указывает на строку WCHAR с завершением NULL.

DevicePropertyEnumeratorName

Запрашивает имя перечислителя для устройства, например "PCI" или "root". PropertyBuffer указывает на строку WCHAR с завершением NULL.

DevicePropertyFriendlyName

Запрашивает строку, которая может использоваться для различения двух похожих устройств, обычно определяемых установщиком класса. PropertyBuffer указывает на строку WCHAR с завершением NULL.

DevicePropertyHardwareID

Запрашивает идентификаторы оборудования , предоставленные устройством, которые идентифицируют устройство. PropertyBuffer указывает на значение REG_MULTI_SZ.

DevicePropertyInstallState

Запрашивает состояние установки устройства. Состояние установки возвращается в виде значения перечисления DEVICE_INSTALL_STATE .

DevicePropertyLegacyBusType

Запрашивает тип шины, например PCIBus или PCMCIABus. PropertyBuffer указывает на значение перечисления INTERFACE_TYPE .

DevicePropertyLocationInformation

Запрашивает сведения о расположении устройства в автобусе; интерпретация этой информации зависит от автобуса. PropertyBuffer указывает на строку WCHAR с завершением NULL.

DevicePropertyManufacturer

Запрашивает строку, определяющую производителя устройства. PropertyBuffer указывает на строку WCHAR с завершением NULL.

DevicePropertyPhysicalDeviceObjectName

Запрашивает имя PDO для этого устройства. PropertyBuffer указывает на строку WCHAR с завершением NULL.

DevicePropertyRemovalPolicy

Запрашивает текущую политику удаления устройства. Операционная система использует это значение в качестве указания для определения способа удаления устройства. Параметр PropertyBuffer указывает на значение перечисления DEVICE_REMOVAL_POLICY .

DevicePropertyUINumber

Запрашивает число, связанное с устройством, которое может отображаться в пользовательском интерфейсе. PropertyBuffer указывает на значение ULONG.

Обычно это номер слота, воспринимаемый пользователем, например номер, напечатанный рядом с слотом на доске, или другое число, которое упрощает поиск физического устройства для пользователя. Если устройство находится в шине без соглашения о номерах пользовательского интерфейса или драйверу не удается определить номер пользовательского интерфейса, это значение будет 0xFFFFFFFF.

[in] BufferLength

Задает размер объекта PropertyBuffer, предоставленного вызывающим элементом , в байтах.

[out, optional] PropertyBuffer

Указатель на буфер, предоставленный вызывающим объектом, для получения сведений о свойстве. Буфер может быть выделен из страничной памяти. Тип буфера определяется свойством DeviceProperty (см. выше).

[out] ResultLength

Указатель на ULONG для получения размера сведений о свойстве, возвращаемых в PropertyBuffer. Если IoGetDeviceProperty возвращает STATUS_BUFFER_TOO_SMALL, он устанавливает для этого параметра необходимую длину буфера.

Возвращаемое значение

IoGetDeviceProperty возвращает STATUS_SUCCESS, если вызов был выполнен успешно. Возможные возвращаемые значения ошибок включают следующее.

Код возврата Описание
STATUS_BUFFER_TOO_SMALL Буфер в PropertyBuffer был слишком мал. ResultLength указывает на необходимую длину буфера.
STATUS_INVALID_PARAMETER_2 Данное свойство DeviceProperty не является одним из свойств, обрабатываемых этой подпрограммой.
STATUS_INVALID_DEVICE_REQUEST Возможно, указывает, что данный объект DeviceObject не был допустимым указателем PDO.

Комментарии

IoGetDeviceProperty извлекает сведения о настройке устройства из реестра. Используйте эту процедуру вместо прямого доступа к реестру, чтобы изолировать драйвер от различий на разных платформах и от возможных изменений в структуре реестра.

Для многих запросов DeviceProperty может потребоваться два или более вызовов IoGetDeviceProperty , чтобы определить требуемый BufferLength. При первом вызове должно использоваться лучшее значение. Если состояние возврата STATUS_BUFFER_TOO_SMALL, драйвер должен освободить текущий буфер, выделить буфер размера, возвращаемого в ResultLength, и снова вызвать IoGetDeviceProperty . Так как некоторые свойства настройки являются динамическими, размер данных может меняться между временем возврата требуемого размера и повторным вызовом этой подпрограммы. Поэтому драйверы должны вызывать IoGetDeviceProperty внутри цикла, который выполняется до тех пор, пока состояние возврата не STATUS_BUFFER_TOO_SMALL.

Драйверы функций, поддерживающие устройства в устаревшей шине и шине PnP, могут использовать свойства DevicePropertyBusNumber, DevicePropertyBusTypeGuid и DevicePropertyLegacyBusType для различения автобусов.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

См. также раздел

CM_RESOURCE_LIST

DEVICE_REMOVAL_POLICY

ExAllocatePoolWithTag

GUID

INTERFACE_TYPE

IO_RESOURCE_REQUIREMENTS_LIST