IoRegisterDeviceInterface-Funktion (wdm.h)
Die IoRegisterDeviceInterface-Routine registriert eine Geräteschnittstellenklasse, sofern sie noch nicht registriert wurde, und erstellt eine neue instance der Schnittstellenklasse, die ein Treiber anschließend für die Verwendung durch Anwendungen oder andere Systemkomponenten aktivieren kann.
Syntax
NTSTATUS IoRegisterDeviceInterface(
[in] PDEVICE_OBJECT PhysicalDeviceObject,
[in] const GUID *InterfaceClassGuid,
[in, optional] PUNICODE_STRING ReferenceString,
[out] PUNICODE_STRING SymbolicLinkName
);
Parameter
[in] PhysicalDeviceObject
Ein Zeiger auf das PDO für das Gerät.
[in] InterfaceClassGuid
Ein Zeiger auf die Klassen-GUID, die die zu registrierende Funktionalität (die Geräteschnittstellenklasse) identifiziert.
[in, optional] ReferenceString
Zeigt optional auf eine UNICODE_STRING. Die Zeichenfolge darf keine Pfadtrennzeichen ("/" oder "\") enthalten. Funktionstreiber geben normalerweise NULL für diesen Parameter an. Filtertreiber müssen NULL angeben.
Verweiszeichenfolgen werden nur von einigen wenigen Bustreibern verwendet, z. B. swenum, bei dem es sich um einen Bustreiber handelt, der Geräteschnittstelleninstanzen als Platzhalter für bei Bedarf erstellte Softwaregeräte verwendet. Wenn ein instance einer Schnittstelle geöffnet wird, übergibt der E/A-Manager die Verweiszeichenfolge des instance an den Treiber. Die Zeichenfolge wird Teil des Namens der Schnittstelle instance (als angefügte Pfadkomponente). Der Treiber kann dann die Verweiszeichenfolge verwenden, um zwischen zwei Schnittstelleninstanzen derselben Klasse für ein einzelnes Gerät zu unterscheiden.
Auf Microsoft Windows 98/Me-Systemen darf der ReferenceString-Wert nicht länger als MAX_PATH Zeichen sein. Für Windows 2000 und höhere Versionen von Windows gibt es keine Längenbegrenzung.
[out] SymbolicLinkName
Ein Zeiger auf eine Unicode-Zeichenfolgenstruktur, die vom Aufrufer zugewiesen wird. Wenn diese Routine erfolgreich ist, initialisiert sie die Unicode-Zeichenfolge und ordnet den Zeichenfolgenpuffer, der den Kernelmoduspfad enthält, dem symbolischen Link für einen instance der angegebenen Geräteschnittstellenklasse zu.
Der Aufrufer muss SymbolicLinkName als undurchsichtig behandeln und darf ihn nicht disassemblieren.
Der Aufrufer ist für das Freigeben von SymbolicLinkName mit RtlFreeUnicodeString verantwortlich, wenn er nicht mehr benötigt wird.
Rückgabewert
IoRegisterDeviceInterface gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich war. Mögliche Fehlerrückgabewerte sind:
Rückgabecode | Beschreibung |
---|---|
|
Die Parameter sind ungültig. Es ist möglich, dass PhysicalDeviceObject nicht auf einen gültigen PDO verweist oder dass die ReferenceString-Zeichenfolge ein ungültiges Zeichen enthält. |
Hinweise
IoRegisterDeviceInterface registriert eine Geräteschnittstellenklasse, sofern sie noch nicht registriert wurde, und erstellt eine neue instance der Schnittstellenklasse. Ein Treiber kann diese Routine für ein bestimmtes Gerät mehrmals aufrufen, um mehrere Schnittstellenklassen zu registrieren und Instanzen der Klassen zu erstellen. Eine Funktion oder ein Filtertreiber registriert in der Regel Geräteschnittstellen in der AddDevice-Routine . Beispielsweise kann ein fehlertoleranter Volumetreiber eine instance einer fehlertoleranten Volumeschnittstelle und eine instance einer Volumeschnittstelle für ein bestimmtes Volume registrieren.
Wenn die Geräteschnittstellenklasse noch nicht registriert wurde, erstellt der E/A-Manager einen Registrierungsschlüssel für sie zusammen mit instance spezifischen persistenten Speicher unter dem Schlüssel. Treiber können mithilfe von IoOpenDeviceInterfaceRegistryKey auf diesen persistenten Speicher zugreifen.
Ein Treiber registriert einmal eine Schnittstelle instance und ruft dann IoSetDeviceInterfaceState auf, um die Schnittstelle zu aktivieren und zu deaktivieren.
Registrierte Schnittstellen bleiben bei Betriebssystemneustarts erhalten. Wenn die angegebene Schnittstelle bereits registriert ist, übergibt der E/A-Manager seinen Namen in SymbolicLinkName und gibt den Informationserfolg status STATUS_OBJECT_NAME_EXISTS zurück.
Die meisten Treiber verwenden eine NULL-Verweiszeichenfolge für eine Geräteschnittstelle instance. Wenn ein Treiber eine Nicht-NULL-Verweiszeichenfolge verwendet, muss er zusätzliche Arbeit leisten, einschließlich möglicherweise der Verwaltung seines eigenen Namespaces und der Sicherheit. Ein Filtertreiber, der eine Geräteschnittstelle verfügbar macht, muss einen NULLReferenceString verwenden, um Konflikte mit anderen Treibern im Gerätestapel zu vermeiden.
Anrufer dieser Routine müssen die Registrierung für eine Geräteschnittstelle nicht entfernen, wenn sie nicht mehr benötigt wird. Geräteschnittstellenregistrierungen können bei Bedarf aus dem Benutzermodus entfernt werden.
Aufrufer von IoRegisterDeviceInterface müssen unter IRQL = PASSIVE_LEVEL im Kontext eines Systemthreads ausgeführt werden.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar ab Windows 2000. |
Zielplattform | Universell |
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (siehe Abschnitt Hinweise) |
DDI-Complianceregeln | HwStorPortProhibitedDIs(storport), IrqlIoPassive3(wdm), PowerIrpDDis(wdm) |
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für