IoAttachDeviceToDeviceStack-Funktion (wdm.h)
Die IoAttachDeviceToDeviceStack Routine fügt das Geräteobjekt des Aufrufers an das höchste Geräteobjekt in der Kette an und gibt einen Zeiger auf das zuvor höchste Geräteobjekt zurück.
Syntax
PDEVICE_OBJECT IoAttachDeviceToDeviceStack(
[in] PDEVICE_OBJECT SourceDevice,
[in] PDEVICE_OBJECT TargetDevice
);
Parameter
[in] SourceDevice
Zeiger auf das vom Aufrufer erstellte Geräteobjekt.
[in] TargetDevice
Zeiger auf das Geräteobjekt eines anderen Treibers, z. B. einen Zeiger, der von einem vorherigen Aufruf an IoGetDeviceObjectPointerzurückgegeben wird.
Rückgabewert
IoAttachDeviceToDeviceStack- gibt einen Zeiger auf das Geräteobjekt zurück, an das die SourceDevice- angefügt wurde. Der zurückgegebene Geräteobjektzeiger kann sich von TargetDevice- unterscheiden, wenn TargetDevice zusätzliche Treiber übereinander angeordnet hatte.
IoAttachDeviceToDeviceStack gibt NULL- zurück, wenn das Geräteobjekt nicht angefügt werden konnte, da beispielsweise das Zielgerät entladen wurde.
Bemerkungen
IoAttachDeviceToDeviceStack- Die Layerung zwischen Treibern wird so eingerichtet, dass dieselben IRPs an jeden Treiber in der Kette gesendet werden.
Ein Zwischentreiber kann diese Routine während der Initialisierung verwenden, um ein eigenes Geräteobjekt an das Geräteobjekt eines anderen Treibers anzufügen. Nachfolgende E/A-Anforderungen, die an TargetDevice gesendet werden, werden zuerst an den Zwischentreiber gesendet.
Diese Routine legt die AlignmentRequirement- in SourceDevice- auf den Wert im nächsten unteren Geräteobjekt fest und legt die StackSize- auf den Wert im nächsten unteren Objekt plus eins fest.
Ein Treiberautor muss diese Routine aufrufen, bevor alle Treiber, die sich über ihrem Fahrer befinden müssen, übereinander zulegen müssen. IoAttachDeviceToDeviceStack fügt SourceDevice- an das aktuell in der Kette angeordnete höchste Geräteobjekt an und hat keine Möglichkeit zu bestimmen, ob Treiber in der richtigen Reihenfolge angeordnet werden.
Ein Treiber, der einen Zeiger auf das Zielgerät abgerufen hat, indem IoGetDeviceObjectPointer- aufgerufen wird, sollte ObDereferenceObject mit dem Dateiobjektzeiger aufrufen, der von IoGetDeviceObjectPointer zurückgegeben wurde, um seinen Verweis auf das Dateiobjekt freizugeben, bevor es sein eigenes Geräteobjekt trennt, z. B. wenn ein solcher Treiber auf höherer Ebene entladen wird.
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- | <= DISPATCH_LEVEL |
DDI-Complianceregeln | AddDevice(wdm), HwStorPortProhibitedDIs(storport), PnpSameDeviceObject(wdm) |