Responder a solicitudes de Check-Verify del sistema de archivos

A su discreción, el sistema de archivos puede enviar un IRP al punto de entrada dispatch del controlador del dispositivo para IRP_MJ_DEVICE_CONTROL solicitudes con Parameters.DeviceIoControl.IoControlCode en la ubicación de pila de E/S establecida en lo siguiente:

IOCTL_XXX_CHECK_VERIFY
donde XXX es el tipo de dispositivo, como DISK, TAPE o CDROM.

El tipo DISK incluye dispositivos multimedia extraíbles no particionables (disquete) y particionables.

Si el controlador de dispositivo subyacente determina que el medio no ha cambiado, el controlador debe completar el IRP y devolver el bloque IoStatus con los siguientes valores:

Estado

Establézcalo en STATUS_SUCCESS

Información

Establecer en cero

Además, si el tipo de dispositivo es DISK o CDROM y el autor de la llamada especificó un búfer de salida, el controlador devuelve el recuento de cambios multimedia en el búfer en Irp-AssociatedIrp.SystemBuffer> y establece Irp-IoStatus.Information> en sizeof(ULONG). Al devolver este recuento, el controlador ofrece al autor de la llamada una oportunidad para determinar si los medios han cambiado desde su perspectiva.

Si el controlador de dispositivo subyacente determina que el medio ha cambiado, realiza una acción diferente en función de si el volumen está montado. Si el volumen está montado (la marca de VPB_MOUNTED se establece en la VPB), el controlador debe hacer lo siguiente:

  1. Establezca las marcas en DeviceObject by ORing Flags con DO_VERIFY_VOLUME.

  2. Establezca el bloque IoStatus en irP en lo siguiente:

    • Estado establecido en STATUS_VERIFY_REQUIRED
    • Información establecida en cero
  3. Llame a IoCompleteRequest con el IRP de entrada.

Si el volumen no está montado, el controlador no debe establecer el bit de DO_VERIFY_VOLUME. El controlador debe establecer IoStatus.Status en STATUS_IO_DEVICE_ERROR, establecer IoStatus.Information en cero y llamar a IoCompleteRequest con irP.