IoAttachDevice-Funktion (wdm.h)
Die IoAttachDevice Routine fügt das Geräteobjekt des Aufrufers an ein benanntes Zielgerätobjekt an, sodass E/A-Anforderungen, die an das Zielgerät gebunden sind, zuerst an den Aufrufer weitergeleitet werden.
Syntax
NTSTATUS IoAttachDevice(
[in] PDEVICE_OBJECT SourceDevice,
[in] PUNICODE_STRING TargetDevice,
[out] PDEVICE_OBJECT *AttachedDevice
);
Parameter
[in] SourceDevice
Zeiger auf das vom Aufrufer erstellte Geräteobjekt.
[in] TargetDevice
Zeigen Sie auf einen Puffer, der den Namen des Geräteobjekts enthält, an das die angegebene SourceDevice- angefügt werden soll.
[out] AttachedDevice
Zeiger zum vom Aufrufer zugewiesenen Speicher für einen Zeiger. Enthält einen Zeiger auf das Zielgerätobjekt, wenn die Anlage erfolgreich ist.
Rückgabewert
IoAttachDevice kann einen der folgenden NTSTATUS-Werte zurückgeben:
Bemerkungen
IoAttachDevice eine Layerung zwischen Treibern her, sodass dieselben IRPs an jeden Treiber in der Kette gesendet werden können.
Diese Routine wird während der Initialisierung von Zwischentreibern verwendet. Es ermöglicht einem solchen Treiber, ein eigenes Geräteobjekt auf eine andere Weise an ein anderes Gerät anzufügen, sodass alle Anforderungen an das ursprüngliche Gerät zuerst an den Zwischentreiber übergeben werden.
Der Aufrufer kann nur am oberen Rand einer vorhandenen Kette von mehrschichtigen Treibern angeordnet werden. IoAttachDevice sucht nach dem höchsten Geräteobjekt, das über TargetDevice- und an dieses Objekt angefügt ist (das kann die TargetDevicesein). Daher darf diese Routine nicht aufgerufen werden, wenn sich ein Treiber, der höher sein muss, bereits über das Zielgerät geschichtet hat.
Beachten Sie, dass für Dateisystemtreiber und Treiber im Speicherstapel IoAttachDevice das Zielgerät mit FILE_READ_ATTRIBUTES öffnet und dann IoGetRelatedDeviceObjectaufruft. Dies führt nicht dazu, dass ein Dateisystem bereitgestellt wird. Daher gibt ein erfolgreicher Aufruf von IoAttachDevice das Geräteobjekt des Speichertreibers und nicht die des Dateisystemtreibers zurück.
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.
Warnung
AttachedDevice- muss auf einen globalen Speicherort verweisen, z. B. die Geräteerweiterung des Treibers. IoAttachDevice öffnet das Dateiobjekt für das Zielgerät, aktualisiert AttachedDevice, führt den Anfügen aus und schließt dann das Dateiobjekt. Daher empfängt das Quellgerät die IRP_MJ_CLEANUP und IRP_MJ_CLOSE Anforderungen für das Dateiobjekt, bevor IoAttachDevice zurückgegeben wird. Der Treiber muss diese Anforderungen an das Zielgerät weiterleiten, und AttachedDevice- muss ein Speicherspeicherort sein, auf den die DispatchCleanup des Treibers und DispatchClose Routinen zugreifen kann.
Anforderungen
Anforderung | Wert |
---|---|
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), IrqlIoPassive1(wdm) |