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 di dispositivo per IRP_MJ_DEVICE_CONTROL richieste con Parameters.DeviceIoControl.IoControlCode nel percorso dello stack di 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 dispositivi rimovibili non partizionabili, come i floppy, e dispositivi rimovibili partizionabili.
Se il driver di dispositivo sottostante determina che il supporto non è stato modificato, il driver deve completare l'IRP, restituendo il blocco IoStatus con i valori seguenti:
Stato |
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 dei supporti nel buffer in corrispondenza di Irp->AssociatedIrp.SystemBuffer e imposta Irp->IoStatus.Information su sizeof(ULONG). Restituendo questo conteggio, il driver offre al chiamante l'opportunità di determinare se il supporto è cambiato dal suo punto di vista.
Se il driver di dispositivo sottostante determina che il supporto è stato modificato, viene eseguita un'azione diversa a seconda che il volume sia montato. Se il volume viene montato (il flag VPB_MOUNTED è impostato nel VPB), il driver deve eseguire le operazioni seguenti:
Impostare il flag di nel DeviceObject di ORing Flags con DO_VERIFY_VOLUME.
Impostare il blocco IoStatus nell'IRP su di quanto segue:
- Stato impostato su STATUS_VERIFY_REQUIRED
- informazione impostata a zero
Chiamare IoCompleteRequest con l'IRP in ingresso.
Se il volume non è montato, il driver non deve impostare il bit DO_VERIFY_VOLUME. Il driver deve impostare IoStatus.Status su STATUS_IO_DEVICE_ERROR, impostare IoStatus.Information su zero e chiamare IoCompleteRequest con IRP.