Função FltFastIoPrepareMdlWrite (fltkernel.h)

A rotina FltFastIoPrepareMdlWrite retorna uma lista vinculada de MDLs (listas de descritores de memória) que apontam para o intervalo especificado de dados de arquivo armazenados em cache para gravar dados diretamente no cache.

Sintaxe

BOOLEAN FLTAPI FltFastIoPrepareMdlWrite(
        PFLT_INSTANCE    InitiatingInstance,
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  ULONG            LockKey,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

Parâmetros

InitiatingInstance

Ponteiro de instância opaco para o chamador. Esse parâmetro é necessário e não pode ser NULL.

[in] FileObject

Um ponteiro para o objeto de arquivo.

[in] FileOffset

Um ponteiro para um valor que especifica o deslocamento de bytes inicial dentro do cache que contém os dados.

[in] Length

O comprimento em bytes dos dados a serem lidos do cache.

[in] LockKey

Um valor associado ao intervalo de bytes a ser bloqueado. Se o intervalo a ser bloqueado se sobrepor a outro intervalo que já está bloqueado com um bloqueio nãoclusivo ou se o intervalo a ser lido for um subconjunto de outro intervalo que já esteja bloqueado não exclusivamente, o valor nesse parâmetro deverá ser a chave para esse bloqueio nãoclusivo. O bloqueio deve ser mantido pelo processo pai do thread de chamada. Caso contrário, esse parâmetro não terá efeito.

[out] MdlChain

Na saída, um ponteiro para uma lista vinculada de MDLs (listas de descritores de memória) que apontam para o intervalo de bytes dentro dos dados armazenados em cache.

[out] IoStatus

Um ponteiro para uma estrutura IO_STATUS_BLOCK que, na saída, contém o status da transferência. Se a operação for bem-sucedida, IoStatus.Status será definido como STATUS_SUCCESS. Caso contrário, ele será definido como um código de erro NTSTATUS apropriado. IoStatus.Information é definido como o número real de bytes que a rotina bloqueou com êxito.

Retornar valor

A rotina FltFastIoPrepareMdlWrite retornará TRUE se a operação for bem-sucedida e FALSE se a operação falhar.

Comentários

FltFastIoPrepareMdlWrite é semelhante a FsRtlCopyWrite, exceto que FltFastIoPrepareMdlWrite não copia dados para o cache. Em vez disso, as páginas físicas que o chamador substituirão estão bloqueadas na memória e FltFastIoPrepareMdlWrite retorna uma ou mais MDLs (listas de descritores de memória) que apontam para o intervalo de bytes especificado. As páginas bloqueadas permanecem bloqueadas até que o chamador chame FltFastIoMdlWriteComplete.

As páginas para as quais os MDLs apontam estão bloqueadas na memória, mas não são mapeadas no espaço do sistema. O chamador pode executar esse mapeamento chamando MmGetSystemAddressForMdlSafe.

Mesmo que a chamada para FltFastIoPrepareMdlWrite falhe, um ou mais MDLs podem ter sido alocados. O chamador pode examinar o valor de IoStatus.Information para determinar se isso ocorreu. Se tiver, o chamador deverá chamar FltFastIoMdlWriteComplete para liberar os MDLs alocados.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho fltkernel.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Confira também

FltFastIoMdlWriteComplete

FsRtlCopyWrite

MmGetSystemAddressForMdlSafe