Поделиться через


Подпрограммы диспетчеризации драйвера класса хранилища

Подпрограммы драйвера класса DRIVER_DISPATCH и DispatchClose обычно не имеют требований к конкретному устройству. Большинство драйверов класса хранения являются промежуточными драйверами; их подпрограммы диспетчеризации просто возвращают STATUS_SUCCESS, чтобы указать, что данный объект устройства существует, чтобы драйверы более высокого уровня и, косвенно, приложения пользовательского режима могли открыть устройство для ввода-вывода и закрыть устройство после этого.

Подпрограммы драйвера классов DispatchDeviceControl и DispatchInternalDeviceControl должны быть резидентными; т. е. они не могут быть доступны для страниц и не могут быть частью раздела с возможностью страницы драйвера. В зависимости от IOCTL заданного запроса такая подпрограмма диспетчеризации может вызывать выстраиваемую подпрограмму или ждать вызова от объекта синхронизации или уведомления (тем самым блокируя выполняющийся поток), но подпрограмма диспетчеризации должна быть в состоянии передавать неизвестный IOCTL по DISPATCH_LEVEL.

Драйвер класса хранения должен иметь подпрограмму DispatchPnP для запросов на запуск, остановку и удаление устройства, а также на другие запросы PnP, такие как уведомление о том, что устройство находится на пути разбиения по страницам. Дополнительные сведения об обработке запроса на запуск PnP см. в разделе Обработка запуска PnP в драйвере класса хранилища. Дополнительные сведения об обработке других запросов PnP см. в разделе Обработка запросов PnP к периферийным устройствам хранилища.

Драйвер класса хранения также должен иметь подпрограмму DispatchPower для запросов на настройку состояния питания устройства. Дополнительные сведения см. в разделе Обработка запросов на питание к периферийным устройствам хранилища.

Драйвер класса хранения должен иметь подпрограмму DispatchShutdown и, возможно, подпрограмму DispatchFlushBuffers , если его устройство кэширует данные внутри системы, если его устройство может быть подключено к шине, управляемой адаптером HBA, которая кэширует данные внутренне, или если файловая система находится на уровне выше драйвера класса. Для обеспечения целостности данных такой кэш должен быть сброшен на устройство перед завершением работы системы.

Дополнительные сведения об общих требованиях к подпрограммам диспетчеризации см. в статье Написание подпрограмм диспетчеризации.