IRP_MJ_FLUSH_BUFFERS (FS e drivers de filtro)

Quando enviado

O Gerenciador de E/S, outros componentes do sistema operacional e outros drivers do modo kernel enviam IRP_MJ_FLUSH_BUFFERS solicitações quando os dados armazenados em buffer precisam ser liberados para o disco. Ele pode ser enviado, por exemplo, quando um aplicativo de modo de usuário tiver chamado uma função Win32, como FlushFileBuffers. (Para drivers do sistema de arquivos e drivers de filtro do sistema de arquivos, chamar CcFlushCache é preferível para enviar um IRP.)

Todos os drivers de filtro e sistema de arquivos que mantêm buffers internos para dados devem lidar com esse IRP para que as alterações em dados de arquivo ou metadados possam ser preservadas entre desligamentos do sistema.

Operação: Drivers do sistema de arquivos

O driver do sistema de arquivos deve liberar em disco quaisquer dados ou metadados importantes associados ao objeto de arquivo e concluir o IRP. Para obter mais informações sobre como lidar com esse IRP, estude o exemplo de FASTFAT.

Operação: Drivers de filtro do sistema de arquivos herdado

O driver de filtro deve liberar em disco quaisquer dados ou metadados importantes associados ao objeto de arquivo e passar esse IRP para o driver mais baixo na pilha.

Parâmetros

Um driver de filtro ou sistema de arquivos chama IoGetCurrentIrpStackLocation com o IRP fornecido para obter um ponteiro para seu próprio local de pilha no IRP, mostrado na lista a seguir como IrpSp. (O IRP é mostrado como Irp.) O driver pode usar as informações definidas nos seguintes membros do IRP e no local da pilha IRP no processamento de uma solicitação de buffers de liberação:

  • DeviceObject é um ponteiro para o objeto de dispositivo de destino.

  • Irp->O IoStatus aponta para uma estrutura de IO_STATUS_BLOCK que recebe o status de conclusão final e informações sobre a operação solicitada.

  • IrpSp->FileObject aponta para o objeto de arquivo associado a DeviceObject.

    O parâmetro IrpSp-FileObject> contém um ponteiro para o campo RelatedFileObject, que também é uma estrutura FILE_OBJECT. O campo RelatedFileObject da estrutura FILE_OBJECT não é válido durante o processamento de IRP_MJ_FLUSH_BUFFERS e não deve ser usado.

  • IrpSp->MajorFunction está definido como IRP_MJ_FLUSH_BUFFERS.

Confira também

CcFlushCache

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_FLUSH_BUFFERS (Referência de Kernel do WDK)