Freigeben über


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)

Siehe auch

DEVICE_OBJECT

IoAttachDeviceToDeviceStack

IoAttachDeviceToDeviceStackSafe

IoCreateDevice

IoDetachDevice-

IoGetRelatedDeviceObject