Condividi tramite


Sincronizzazione dell'annullamento di IRP

Dal punto di vista di un conducente, un IRP può essere annullato in qualsiasi momento. L'annullamento di IRP si verifica in modo asincrono; pertanto, i piloti devono essere in grado di gestire una serie di potenziali condizioni di gara, create se l'IRP viene annullata in uno dei punti seguenti:

  • Dopo aver chiamato una routine del driver, ma prima di accodare un IRP.

  • Dopo aver chiamato una routine del driver, ma prima di cercare di elaborare un IRP. Ad esempio, un IRP potrebbe essere annullato dopo che viene chiamata la routine StartIo , ma prima che la routine StartIo rimuova l'IRP dalla coda del dispositivo.

  • Dopo che la routine del driver rimuove dalla coda l'IRP, ma prima di avviare l'I/O richiesto.

Si noti che dopo che un driver accoda un IRP e rilascia tutti i blocchi spin che proteggono la coda, un altro thread può accedere e modificare l'IRP. Quando il thread originale riprende - anche già alla riga di codice successiva - l'IRP potrebbe essere stato annullato o altrimenti modificato.

Il driver può utilizzare il framework sicuro per l'annullamento IRP per implementare l'accodamento IRP. Il sistema registra quindi una routine Cancel per il driver che gestisce automaticamente la sincronizzazione per annullare in sicurezza gli IRP. Per ulteriori informazioni, vedere le code IRP Cancel-Safe. In caso contrario, i driver devono implementare la propria sincronizzazione.

I membri seguenti di un IRP contengono informazioni sull'annullamento:

  • Irp->Cancel indica se un IRP viene annullato o deve essere annullato.

  • Irp->CancelRoutine indica se un IRP è annullabile. Se questo membro contiene un puntatore a una routine di annullamento, allora l'IRP è annullabile. Se questo membro è NULL, l'IRP non è annullabile. Se questo membro è NULL, ma è impostato Irp->Cancel, ciò indica che la routine di annullamento è in esecuzione e che l'IRP è in fase di annullamento.

Se un driver gestisce IRP annullabili, è responsabile dell'impostazione della routine Cancel appropriata in ogni IRP che contiene in uno stato annullabile.

Questa sezione include gli argomenti seguenti sulla sincronizzazione dell'annullamento di IRP.

Uso dello Spin Lock del Sistema

Sincronizzazione della cancellazione nelle routine del driver che elaborano gli IRP

la sincronizzazione dell'annullamento nei driver Higher-Level senza annullare routine

Utilizzo di un Driver-Supplied Spin Lock