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