Respondendo a solicitações de Check-Verify do sistema de arquivos
A seu critério, o sistema de arquivos pode enviar um IRP para o ponto de entrada Expedição do driver de dispositivo para solicitações de IRP_MJ_DEVICE_CONTROL com Parameters.DeviceIoControl.IoControlCode no local da pilha de E/S definido para o seguinte:
IOCTL_XXX_CHECK_VERIFY
em que XXX é o tipo de dispositivo, como DISK, TAPE ou CDROM.
O tipo DISK inclui dispositivos removíveis (disquete) e de mídia removível particionáveis.
Se o driver do dispositivo subjacente determinar que a mídia não foi alterada, o driver deverá concluir o IRP, retornando o bloco IoStatus com os seguintes valores:
Status |
Definir como STATUS_SUCCESS |
Informações |
Definir como zero |
Além disso, se o tipo de dispositivo for DISK ou CDROM e o chamador especificar um buffer de saída, o driver retornará a contagem de alterações de mídia no buffer em Irp-AssociatedIrp.SystemBuffer> e definirá Irp-IoStatus.Information> como sizeof(ULONG). Ao retornar essa contagem, o driver dá ao chamador a oportunidade de determinar se a mídia mudou de sua perspectiva.
Se o driver do dispositivo subjacente determinar que a mídia foi alterada, ele tomará uma ação diferente dependendo se o volume estiver montado. Se o volume estiver montado (o sinalizador VPB_MOUNTED estiver definido no VPB), o driver deverá fazer o seguinte:
Defina os Sinalizadores no DeviceObject by ORing Flags com DO_VERIFY_VOLUME.
Defina o bloco IoStatus no IRP para o seguinte:
- Status definido como STATUS_VERIFY_REQUIRED
- Informações definidas como zero
Chame IoCompleteRequest com o IRP de entrada.
Se o volume não estiver montado, o driver não deverá definir o bit DO_VERIFY_VOLUME. O driver deve definir IoStatus.Status como STATUS_IO_DEVICE_ERROR, definir IoStatus.Information como zero e chamar IoCompleteRequest com o IRP.