Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os drivers podem incluir as seguintes rotinas de despacho:
-
IRP_MJ_CLEANUP indica que o último identificador de um objeto de arquivo associado ao objeto de dispositivo de destino está sendo fechado. As 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 a 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 no modo de usuário, um 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 do modo de usuário tem um identificador ou que o solicitante do modo de usuário está tentando definir um fim de arquivo nesse objeto de arquivo.
Drivers de classe e dispositivo serial paralelos lidam com essas solicitações definindo o FILE_STANDARD_INFORMATION ou FILE_POSITION_INFORMATION comprimento ou posição como zero. Outros drivers de dispositivo de nível superior devem dar suporte a essas solicitações, especialmente se um aplicativo de modo de usuário ou driver de modo kernel possam chamar funções de Runtime C para manipular o objeto de arquivo. Os drivers do sistema de arquivos devem dar suporte a essas solicitações mais plenamente 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 no dispositivo ou descartar dados armazenados em buffer ou armazenados em cache que foram lidos do dispositivo.
Por exemplo, os drivers de classe de mouse e teclado do sistema, que têm buffers de anel internos para dados de entrada de seus dispositivos, dão suporte à solicitação de liberação. Controladores de dispositivos de armazenamento em massa e controladores que operam acima deles também suportam essa solicitação.
-
Qualquer driver que provavelmente será chamado antes que o sistema seja desligado deve lidar com IRP_MJ_SHUTDOWN. A rotina DispatchShutdown deve realizar qualquer tarefa de limpeza conforme determinado pelo driver, que seja necessária antes que o gerenciador de energia envie um IRP de set-power para desligar o sistema. Um driver pode chamar IoRegisterShutdownNotification ou IoRegisterLastChanceShutdownNotification para se registrar para notificação de desligamento.
Os drivers para dispositivos de armazenamento em massa e os drivers intermediários em camadas sobre eles podem confiar em um driver de sistema de arquivos de nível superior para encaminhar IRPs de desligamento a eles quando o sistema estiver prestes a se desligar. Ou seja, o FSD é responsável por garantir que todos os dados de arquivo armazenados em cache sejam gravados em dispositivos periféricos, chamando drivers subjacentes para liberar dados de seus caches ou buffers de dispositivo (se houver) e assim por diante antes que o sistema seja desligado.
O driver de um dispositivo de armazenamento em massa que armazena dados em cache internamente deve fornecer rotinas DispatchShutdown e DispatchFlushBuffers . Se um driver de armazenamento em massa armazenar dados em buffer na memória, mas seu dispositivo não tiver cache interno, ele também deverá fornecer rotinas DispatchShutdown e DispatchFlushBuffers .
Qualquer driver intermediário em camadas acima de um driver que lida com solicitações IRP_MJ_FLUSH_BUFFERS e IRP_MJ_SHUTDOWN também fornece rotinas DispatchShutdown e DispatchFlushBuffers .