Udostępnij przez


Odpowiadanie na żądania Check-Verify z systemu plików

Według własnego uznania system plików może wysłać IRP do punktu wejścia Dispatch sterownika urządzenia dla żądania IRP_MJ_DEVICE_CONTROL z parametrami DeviceIoControl.IoControlCode w lokalizacji stosu I/O ustawionej na następujące:

IOCTL_XXX_CHECK_VERIFY
gdzie XXX jest typem urządzenia, takiego jak DISK, TAPE lub CDROM.

Typ DISK zawiera zarówno niepartycyjne (dyskietki) i partycjonowalne urządzenia nośnika wymiennego.

Jeśli podstawowy sterownik urządzenia ustali, że nośnik nie uległ zmianie, sterownik powinien ukończyć protokół IRP, zwracając blok IoStatus o następujących wartościach:

Status

Ustaw wartość na STATUS_SUCCESS

Informacje

Ustaw wartość zero

Ponadto, jeśli typ urządzenia to DISK lub CDROM, a obiekt wywołujący określił bufor wyjściowy, sterownik zwraca liczbę zmian nośnika w buforze irp-AssociatedIrp.SystemBuffer> i ustawia parametr Irp-IoStatus.Information> na wartość sizeof(ULONG). Zwracając tę liczbę, kierowca daje rozmówcy możliwość ustalenia, czy media zmieniły się z perspektywy.

Jeśli podstawowy sterownik urządzenia ustali, że nośnik uległ zmianie, podejmuje inną akcję w zależności od tego, czy wolumin jest zamontowany. Jeśli wolumin jest zamontowany (flaga VPB_MOUNTED jest ustawiona w VPB), sterownik powinien wykonać następujące czynności:

  1. Ustaw flagi w obiekcie DeviceObject według flag ORing z DO_VERIFY_VOLUME.

  2. Ustaw blok IoStatus w IRP na następujące wartości:

    • Stan ustawiony na WYMAGANA_WERYFIKACJA_STATUSU
    • Informacje ustawione na zero
  3. Wywołaj metodę IoCompleteRequest przy użyciu wejściowego protokołu IRP.

Jeśli wolumin nie jest zamontowany, sterownik nie może ustawić bitu DO_VERIFY_VOLUME. Sterownik powinien ustawić wartość IoStatus.Status na STATUS_IO_DEVICE_ERROR, ustawić wartość IoStatus.Information na zero i wywołać element IoCompleteRequest z IRP.