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) |