Funzione IoAttachDevice (wdm.h)
Il IoAttachDevice routine collega l'oggetto dispositivo del chiamante a un oggetto dispositivo di destinazione denominato, in modo che le richieste di I/O associate per il dispositivo di destinazione vengano instradate per prime al chiamante.
Sintassi
NTSTATUS IoAttachDevice(
[in] PDEVICE_OBJECT SourceDevice,
[in] PUNICODE_STRING TargetDevice,
[out] PDEVICE_OBJECT *AttachedDevice
);
Parametri
[in] SourceDevice
Puntatore all'oggetto dispositivo creato dal chiamante.
[in] TargetDevice
Puntatore a un buffer contenente il nome dell'oggetto dispositivo a cui deve essere collegato il SourceDevice specificato.
[out] AttachedDevice
Puntatore all'archiviazione allocata dal chiamante per un puntatore. Al ritorno, contiene un puntatore all'oggetto dispositivo di destinazione se l'allegato ha esito positivo.
Valore restituito
IoAttachDevice può restituire uno dei valori NTSTATUS seguenti:
Osservazioni
IoAttachDevice stabilisce il layering tra i driver in modo che gli stessi IRP possano essere inviati a ogni driver della catena.
Questa routine viene utilizzata dai driver intermedi durante l'inizializzazione. Consente a tale driver di collegare il proprio oggetto dispositivo a un altro dispositivo in modo che tutte le richieste effettuate al dispositivo originale vengano fornite per prime al driver intermedio.
Il chiamante può essere a livelli solo nella parte superiore di una catena esistente di driver a più livelli. IoAttachDevice cerca l'oggetto dispositivo più alto a più livelli TargetDevice e si collega a tale oggetto (che può essere il TargetDevice). Pertanto, questa routine non deve essere chiamata se un driver che deve essere di livello superiore è già stato sovrapposto sul dispositivo di destinazione.
Si noti che per i driver e i driver del file system nello stack di archiviazione, IoAttachDevice apre il dispositivo di destinazione con FILE_READ_ATTRIBUTES e quindi chiama IoGetRelatedDeviceObject. Ciò non comporta il montaggio di un file system. Pertanto, una chiamata riuscita a IoAttachDevice restituisce l'oggetto dispositivo del driver di archiviazione, non quello del driver del file system.
Questa routine imposta il AlignmentRequirement in SourceDevice sul valore nell'oggetto dispositivo inferiore successivo e imposta il StackSize sul valore nell'oggetto inferiore successivo più uno.
Avvertimento
AttachedDevice deve puntare a una posizione di memoria globale, ad esempio l'estensione del dispositivo del driver. IoAttachDevice apre l'oggetto file per il dispositivo di destinazione, aggiorna AttachedDevice, esegue il collegamento e quindi chiude l'oggetto file. Di conseguenza, il dispositivo di origine riceve le richieste di IRP_MJ_CLEANUP e IRP_MJ_CLOSE per l'oggetto file prima di IoAttachDevice restituisce. Il driver deve inoltrare queste richieste al dispositivo di destinazione e AttachedDevice deve essere una posizione di memoria accessibile alle routine DispatchClean up del driver e DispatchClose.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
libreria | NtosKrnl.lib |
dll | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
regole di conformità DDI | HwStorPortProhibitedDDIs(storport), IrqlIoPassive1(wdm) |