Condividi tramite


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)

Vedi anche

IoAttachDeviceToDeviceStack

IoCallDriver