Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os drivers podem incluir as seguintes rotinas de expedição:
-
IRP_MJ_CLEANUP indica que o último identificador de um objeto de arquivo associado ao objeto de dispositivo de destino está sendo fechado. Solicitações de E/S pendentes para o objeto de arquivo ainda podem existir. Os drivers podem implementar uma rotina DispatchCleanup para executar a limpeza que não é específica de nenhum identificador de arquivo específico. Os motoristas também podem usar sua rotina DispatchClose para a mesma finalidade.
DispatchQueryInformation, DispatchSetInformation
Alguns drivers de nível mais alto podem ter que processar IRP_MJ_QUERY_INFORMATION e IRP_MJ_SET_INFORMATION IRPs. Essas solicitações indicam que um aplicativo de modo de usuário, componente de modo kernel ou driver solicitou informações sobre o comprimento do objeto de arquivo (representando o objeto de dispositivo do driver) para o qual o solicitante de modo de usuário tem um identificador, ou que o solicitante de modo de usuário está tentando definir um fim de arquivo nesse objeto de arquivo.
Os drivers de classe paralela e de dispositivo serial lidam com estas solicitações definindo FILE_STANDARD_INFORMATION ou FILE_POSITION_INFORMATION com comprimento ou posição a zero. Outros drivers de dispositivo de nível superior devem suportar essas solicitações, particularmente se um aplicativo de modo de usuário ou um driver de modo kernel possa chamar funções de tempo de execução C para manipular o objeto de arquivo. Os drivers do sistema de arquivos devem oferecer suporte a essas solicitações de forma mais completa do que esses drivers de dispositivo de nível mais alto.
-
Um driver que armazena dados em cache em um dispositivo ou armazena dados em buffer internamente na memória alocada pelo driver pode receber IRP_MJ_FLUSH_BUFFERS. O recebimento dessa solicitação indica que o driver deve gravar seus dados em buffer ou liberar os dados armazenados em cache para o dispositivo, ou deve descartar os dados armazenados em buffer ou armazenados em cache que foram lidos do dispositivo.
Por exemplo, os drivers de classe de teclado e mouse do sistema, que têm buffers de anel internos para dados de entrada de seus dispositivos, suportam a solicitação de liberação. Controladores de dispositivos de armazenamento massivo e os em camadas acima deles também suportam esta solicitação.
-
Qualquer driver que provavelmente será chamado antes do sistema ser desligado deve lidar com IRP_MJ_SHUTDOWN. A rotina DispatchShutdown deve fazer qualquer limpeza determinada pelo driver que seja necessária antes que o gerenciador de energia envie um IRP de potência definida pelo sistema para desligar o sistema. Um driver pode chamar IoRegisterShutdownNotification ou IoRegisterLastChanceShutdownNotification para registar a notificação de desligamento.
Os drivers para dispositivos de armazenamento em massa e os drivers intermediários que se sobrepõem a eles podem contar com um driver de sistema de arquivos de nível superior para enviar IRPs de desligamento quando o sistema está prestes a desligar. Ou seja, o FSD é responsável por garantir que todos os dados de arquivos armazenados em cache sejam escritos em dispositivos periféricos, chamando drivers subjacentes para liberar dados de seus caches ou buffers de dispositivos (se houver), entre outras ações antes que o sistema seja desligado.
O driver de um dispositivo de armazenamento em massa que armazena dados internamente deve fornecer rotinas DispatchShutdown e DispatchFlushBuffers . Se um driver de armazenamento em massa armazena dados em buffer na memória, mas seu dispositivo não tem cache interno, ele também deve fornecer rotinas DispatchShutdown e DispatchFlushBuffers .
Qualquer driver intermediário colocado acima de um driver que lida com solicitações IRP_MJ_FLUSH_BUFFERS e IRP_MJ_SHUTDOWN deve também fornecer rotinas DispatchShutdown e DispatchFlushBuffers.