Freigeben über


IoGetDeviceProperty-Funktion (wdm.h)

Die IoGetDeviceProperty Routine ruft Informationen zu einem Gerät ab, z. B. Konfigurationsinformationen und den Namen der PDO.

Syntax

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

Parameter

[in] DeviceObject

Zeiger auf das physische Geräteobjekt (PDO) für das gerät, das abgefragt wird.

[in] DeviceProperty

Ein DEVICE_REGISTRY_PROPERTY-typed-Enumerator, der die abzurufende Geräteeigenschaft identifiziert.

[in] BufferLength

Gibt die Größe des vom Aufrufer bereitgestellten PropertyBuffer-in Byte an.

[out, optional] PropertyBuffer

Zeigen Sie auf einen vom Aufrufer bereitgestellten Puffer, um die Eigenschafteninformationen zu empfangen. Der Puffer kann aus dem ausgelagerten Speicher zugeordnet werden. Der Typ des Puffers wird durch die DeviceProperty- bestimmt (siehe oben).

[out] ResultLength

Zeiger auf eine ULONG, um die Größe der Eigenschaftsinformationen zu empfangen, die an PropertyBuffer-zurückgegeben werden. Wenn IoGetDeviceProperty STATUS_BUFFER_TOO_SMALL zurückgibt, wird dieser Parameter auf die erforderliche Pufferlänge festgelegt.

Rückgabewert

IoGetDeviceProperty gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich war. Mögliche Fehlerrückgabewerte sind:

Rückgabecode Beschreibung
STATUS_BUFFER_TOO_SMALL Der Puffer bei PropertyBuffer war zu klein. ResultLength verweist auf die erforderliche Pufferlänge.
STATUS_INVALID_PARAMETER_2 Die angegebene DeviceProperty- ist keine der Eigenschaften, die von dieser Routine behandelt werden.
STATUS_INVALID_DEVICE_REQUEST Gibt möglicherweise an, dass das angegebene DeviceObject kein gültiger PDO-Zeiger war.

Bemerkungen

IoGetDeviceProperty Ruft Gerätesetupinformationen aus der Registrierung ab. Verwenden Sie diese Routine, anstatt direkt auf die Registrierung zuzugreifen, um einen Treiber von unterschiedlichen Plattformen und von möglichen Änderungen in der Registrierungsstruktur zu isolieren.

Für viele DeviceProperty--Anforderungen kann es zwei oder mehr Aufrufe an IoGetDeviceProperty- dauern, um die erforderliche BufferLength-zu ermitteln. Der erste Aufruf sollte einen besten Schätzwert verwenden. Wenn der Rückgabestatus STATUS_BUFFER_TOO_SMALL ist, sollte der Treiber seinen aktuellen Puffer freigeben, einen Puffer der in ResultLength-zurückgegebenen Größe zuweisen und IoGetDeviceProperty- erneut aufrufen. Da einige der Setupeigenschaften dynamisch sind, kann sich die Datengröße zwischen dem Zeitpunkt ändern, an dem die erforderliche Größe zurückgegeben wird, und Treiber ruft diese Routine erneut auf. Daher sollten Treiber IoGetDeviceProperty- in einer Schleife aufrufen, die ausgeführt wird, bis der Rückgabestatus nicht STATUS_BUFFER_TOO_SMALL ist.

Funktionstreiber, die Geräte in einem älteren Bus und einem PnP-Bus unterstützen, können die DevicePropertyBusNumber, DevicePropertyBusTypeGuidund DevicePropertyLegacyBusType Eigenschaften verwenden, um zwischen den Bussen zu unterscheiden.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- PASSIVE_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Siehe auch

CM_RESOURCE_LIST

DEVICE_REMOVAL_POLICY

ExAllocatePoolWithTag-

GUID-

INTERFACE_TYPE

IO_RESOURCE_REQUIREMENTS_LIST