Condividi tramite


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:

  1. Impostare il flag di nel DeviceObject di ORing Flags con DO_VERIFY_VOLUME.

  2. Impostare il blocco IoStatus nell'IRP su di quanto segue:

    • Stato impostato su STATUS_VERIFY_REQUIRED
    • informazione impostata a zero
  3. 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.