Compartilhar via


Função FsRtlPrepareMdlWriteEx (ntifs.h)

A rotina FsRtlPrepareMdlWriteEx 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. Se o suporte de cache para a gravação não estiver disponível, a rotina será revertida para uma operação de gravação MDL baseada em IRP.

Sintaxe

NTSTATUS FsRtlPrepareMdlWriteEx(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  ULONG            LockKey,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

Parâmetros

[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 gravados no 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á está bloqueado de forma inexistente, 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 de NTSTATUS apropriado. IoStatus.Information é definido como o número real de bytes que a rotina bloqueou com êxito.

Valor de retorno

FsRtlPrepareMdlWriteEx retorna STATUS_SUCCESS ou um valor de NTSTATUS apropriado, como um dos seguintes:

Código de retorno Descrição
STATUS_INSUFFICIENT_RESOURCES
Não foi possível alocar um IRP para a gravação baseada em IRP.

Observações

Se a E/S rápida estiver disponível para o sistema de arquivos, a rotina de FsRtlPrepareMdlWriteEx ignorará o mecanismo de gravação IRP usual e retornará uma lista vinculada de listas de descritores de memória (MDL) que o chamador pode usar para gravar dados diretamente no cache de arquivos. Em vez de copiar dados armazenados em buffer no cache, as páginas físicas que o chamador substituirá estão bloqueadas na memória e podem ser gravadas diretamente. FsRtlPrepareMdlWriteEx retorna uma ou mais listas de descritores de memória (MDLs) que apontam para o intervalo de bytes especificado.

Se a E/S rápida não estiver habilitada, FsRtlPrepareMdlWriteEx gerará uma preparação de gravação MDL baseada em IRP síncrona e retornará os MDLs alocados da solicitação.

As páginas às 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.

Cada chamada para FsRtlPrepareMdlWriteEx deve ser seguida por uma chamada para CcMdlWriteComplete.

Requisitos

Requisito Valor
da Plataforma de Destino Universal
cabeçalho ntifs.h (inclua Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Consulte também

CcMdlWriteComplete

CcPrepareMdlWrite

MmGetSystemAddressForMdlSafe