Risposta alle richieste di Check-Verify dal file system
A sua discrezione, il file system può inviare un'IRP al punto di ingresso Dispatch del driver del dispositivo per le richieste di IRP_MJ_DEVICE_CONTROL con Parameters.DeviceIoControl.IoControlCode nel percorso dello stack I/O impostato sul seguente:
IOCTL_XXX_CHECK_VERIFY
dove XXX è il tipo di dispositivo, ad esempio DISK, TAPE o CDROM.
Il tipo DISK include sia dispositivi rimovibili non partizionabili (floppy) che partizionabili.
Se il driver del dispositivo sottostante determina che il supporto non è stato modificato, il driver deve completare l'IRP, restituendo il blocco IoStatus con i valori seguenti:
Status |
Impostare su STATUS_SUCCESS |
Informazioni |
Impostare su zero |
Inoltre, se il tipo di dispositivo è DISK o CDROM e il chiamante ha specificato un buffer di output, il driver restituisce il conteggio delle modifiche multimediali nel buffer in Irp-AssociatedIrp.SystemBuffer> e imposta Irp-IoStatus.Information> su sizeof(ULONG). Restituendo questo conteggio, il conducente offre al chiamante l'opportunità di determinare se il supporto è cambiato dal suo punto di vista.
Se il driver del dispositivo sottostante determina che il supporto è cambiato, viene eseguita un'azione diversa a seconda che il volume sia montato. Se il volume viene montato (il flag di VPB_MOUNTED è impostato nel VPB), il driver deve eseguire le operazioni seguenti:
Impostare i flag in DeviceObject by ORing Flags con DO_VERIFY_VOLUME.
Impostare il blocco IoStatus nell'IRP su quanto segue:
- Stato impostato su STATUS_VERIFY_REQUIRED
- Informazioni impostate su zero
Chiamare IoCompleteRequest con l'IRP di input.
Se il volume non è montato, il driver non deve impostare il bit di DO_VERIFY_VOLUME. Il driver deve impostare IoStatus.Status su STATUS_IO_DEVICE_ERROR, impostare IoStatus.Information su zero e chiamare IoCompleteRequest con l'IRP .