Rotinas de expedição do driver de classe de armazenamento
As rotinas DRIVER_DISPATCH de driver de classe e DispatchClose geralmente não têm requisitos específicos do dispositivo. A maioria dos drivers de classe de armazenamento são drivers intermediários; suas rotinas de expedição apenas retornam STATUS_SUCCESS para indicar que um determinado objeto de dispositivo existe para que drivers de nível superior e, indiretamente, aplicativos de modo de usuário possam abrir o dispositivo para E/S e fechar o dispositivo posteriormente.
As rotinas DispatchDeviceControl e DispatchInternalDeviceControl do driver de classe devem ser residentes; ou seja, eles não podem ser pagináveis nem fazem parte da seção pageable-image de um driver. Dependendo do IOCTL de uma determinada solicitação, essa rotina de expedição pode chamar uma rotina paginada ou aguardar uma chamada de um objeto de sincronização ou notificação (bloqueando assim o thread em execução), mas a rotina de expedição deve ser capaz de passar um IOCTL desconhecido por meio de DISPATCH_LEVEL.
Um driver de classe de armazenamento deve ter uma rotina DispatchPnP para que as solicitações iniciem, parem e removam o dispositivo e respondam a outras solicitações PnP, como a notificação de que o dispositivo está no caminho de paginação. Para obter detalhes sobre como lidar com uma solicitação de início PnP, consulte Manipulando a inicialização PnP em um driver de classe de armazenamento. Para obter detalhes sobre como lidar com outras solicitações PnP, consulte Manipulando solicitações PnP para periféricos de armazenamento.
Um driver de classe de armazenamento também deve ter uma rotina DispatchPower para que as solicitações definam o estado de energia de seu dispositivo. Para obter detalhes, consulte Manipulando solicitações de energia para periféricos de armazenamento.
Um driver de classe de armazenamento deve ter uma rotina DispatchShutdown e, possivelmente, uma rotina DispatchFlushBuffers se seu dispositivo armazenar dados em cache internamente, se seu dispositivo puder ser anexado a um barramento controlado por um HBA que armazena dados em cache internamente ou se um sistema de arquivos estiver em camadas acima do driver de classe. Para manter a integridade dos dados, esse cache deve ser liberado para o dispositivo antes que o sistema seja desligado.
Consulte também Escrevendo rotinas de expedição para obter mais informações sobre requisitos gerais para rotinas de expedição.