Funzione IoAttachDeviceToDeviceStackSafe (ntddk.h)
La routine IoAttachDeviceToDeviceStackSafe collega l'oggetto dispositivo del chiamante all'oggetto dispositivo più in alto in uno stack di driver.
Sintassi
NTSTATUS IoAttachDeviceToDeviceStackSafe(
[in] PDEVICE_OBJECT SourceDevice,
[in] PDEVICE_OBJECT TargetDevice,
[out] PDEVICE_OBJECT *AttachedToDeviceObject
);
Parametri
[in] SourceDevice
Puntatore a un oggetto dispositivo creato dal chiamante.
[in] TargetDevice
Puntatore all'oggetto dispositivo nello stack a cui deve essere collegato l'oggetto SourceDevice .
[out] AttachedToDeviceObject
In input, questo parametro specifica l'indirizzo di SourceDevice-DeviceExtension-AttachedToDeviceObject>>, che deve contenere un puntatore NULL. Nell'output, questo parametro riceve un puntatore all'oggetto dispositivo a cui è stato collegato SourceDevice .
Valore restituito
IoAttachDeviceToDeviceStackSafe restituisce STATUS_SUCCESS se SourceDevice è collegato correttamente sopra targetDevice; in caso contrario restituisce STATUS_NO_SUCH_DEVICE.
Commenti
Come IoAttachDeviceToDeviceStack, IoAttachDeviceToDeviceStackSafe stabilisce la sovrapposizione tra i driver in modo che gli stessi IRP vengano inviati a ogni driver nello stack. Tuttavia, a differenza di IoAttachDeviceToDeviceStack, IoAttachDeviceToDeviceStackSafe ha un parametro aggiuntivo , AttachedToDeviceObject, che il driver di filtro usa per passare l'indirizzo del campo AttachedToDeviceObject dell'oggetto SourceDevice . IoAttachDeviceToDeviceStackSafe aggiorna questo campo mantenendo il blocco del database di sistema di I/O. Poiché contiene questo blocco, IoAttachDeviceToDeviceStackSafe evita una race condition che potrebbe verificarsi altrimenti se l'oggetto SourceDevice ha ricevuto un IRP prima dell'aggiornamento del relativo campo AttachedToDeviceObject.
Un driver di filtro del file system chiama IoAttachDeviceToDeviceStackSafe per collegare il proprio oggetto dispositivo filtro (SourceDevice) sopra un oggetto dispositivo (TargetDevice) appartenente a un file system o a un altro driver di filtro. Le successive richieste di I/O inviate a AttachedToDeviceObject vengono ricevute prima dal driver di filtro, che li elabora e li inoltra al driver successivo nello stack chiamando IoCallDriver.
Se l'oggetto dispositivo specificato da TargetDevice si trova attualmente nella parte superiore dello stack di driver, SourceDevice viene collegato direttamente a TargetDevice. In questo caso , TargetDevice e il puntatore AttachedToDeviceObject restituito sono uguali.
Se uno o più oggetti dispositivo filtro sono già collegati sopra targetDevice nello stack di driver, IoAttachDeviceToDeviceStackSafe collega SourceDevice all'oggetto dispositivo di filtro più alto. Un puntatore a quest'ultimo viene restituito in AttachedToDeviceObject.
Al momento immediatamente dopo che è collegato alla parte superiore dello stack, SourceDevice occupa la parte superiore dello stack di driver. Si noti, tuttavia, che questo non significa necessariamente che SourceDevice rimarrà all'inizio dello stack di driver. Altri filtri possono collegare i propri oggetti dispositivo filtro sopra sourceDevice nello stack.
IoAttachDeviceToDeviceStackSafe imposta il membro AlignmentRequirement dell'oggetto dispositivo a cui punta SourceDevice sul valore dell'oggetto corrispondente nell'oggetto dispositivo inferiore successivo e imposta StackSize in SourceDevice sul valore nell'oggetto inferiore successivo più uno.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Questa routine è disponibile in Aggiornamento cumulativo per Windows 2000 Service Pack 4 (SP4) e in Windows XP e versioni successive. |
Piattaforma di destinazione | Universale |
Intestazione | ntddk.h (include Ntddk.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
Regole di conformità DDI | HwStorPortProhibitedDDIs(storport) |