Partilhar via


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:

  1. Defina os Sinalizadores no DeviceObject by ORing Flags com DO_VERIFY_VOLUME.

  2. Defina o bloco IoStatus no IRP para o seguinte:

    • Status definido como STATUS_VERIFY_REQUIRED
    • Informações definidas como zero
  3. 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.