Share via


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. auf einen Zeiger, der von einem vorherigen Aufruf von IoGetDeviceObjectPointer zurückgegeben wird.

Rückgabewert

IoAttachDeviceToDeviceStack gibt einen Zeiger auf das Geräteobjekt zurück, an das das SourceDevice angefügt wurde. Der zurückgegebene Geräteobjektzeiger kann sich von TargetDevice unterscheiden, wenn TargetDevice über zusätzliche Treiber verfügt.

IoAttachDeviceToDeviceStack gibt NULL zurück, wenn das Geräteobjekt nicht angefügt werden konnte, weil z. B. das Zielgerät entladen wurde.

Hinweise

IoAttachDeviceToDeviceStack richtet layering zwischen Treibern ein, sodass 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 das AlignmentRequirement in SourceDevice auf den Wert im nächstniedrigen Geräteobjekt fest und legt stackSize auf den Wert im nächstniedrigen Objekt plus 1 fest.

Ein Treiberschreiber muss diese Routine vor allen Treibern aufrufen, die auf ihrem Treiber schichten müssen. IoAttachDeviceToDeviceStack fügt SourceDevice an das höchste Geräteobjekt an, das sich derzeit in der Kette befindet, und hat keine Möglichkeit, zu bestimmen, ob Treiber in der richtigen Reihenfolge gestapelt werden.

Ein Treiber, der einen Zeiger auf das Zielgerät durch Aufrufen von IoGetDeviceObjectPointer abgerufen hat, 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 der höheren Ebene entladen wird.

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 <= DISPATCH_LEVEL
DDI-Complianceregeln AddDevice(wdm), HwStorPortProhibitedDDIs(storport), PnpSameDeviceObject(wdm)

Weitere Informationen

IoAttachDevice

IoDetachDevice

IoGetDeviceObjectPointer

ObDereferenceObject