Função FsRtlMdlReadEx (ntifs.h)

A rotina FsRtlMdlReadEx executa uma leitura de MDL em cache rápida. Se os dados solicitados não forem armazenados em cache, a rotina será revertida para uma operação de leitura MDL baseada em IRP.

Sintaxe

NTSTATUS FsRtlMdlReadEx(
  [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 uma variável que especifica o deslocamento de bytes inicial dentro do arquivo armazenado em 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 sobrepõe 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 deve 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

Um endereço de uma variável que recebe um ponteiro para uma lista vinculada de MDLs (listas de descritores de memória). MdlChain deve ser inicializado como NULL antes da chamada para FsRtlMdlReadEx.

[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

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

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

Comentários

Se a E/S rápida estiver disponível no sistema de arquivos, a rotina FsRtlMdlReadEx ignorará o mecanismo de leitura IRP usual e retornará uma lista vinculada de MDL (listas de descritores de memória) que o chamador pode usar para acessar diretamente os dados do arquivo armazenado em cache. Essa operação não copia nem armazena dados em buffer e, portanto, é muito mais rápida do que uma leitura normal. Se a E/S rápida não estiver habilitada, FsRtlMdlReadEx gerará uma leitura MDL baseada em IRP síncrona e retornará os MDLs da solicitação.

As páginas descritas pelos MDLs estão bloqueadas na memória, mas não mapeadas no espaço do sistema. O chamador pode executar esse mapeamento chamando MmGetSystemAddressForMdlSafe.

Semelhante ao CcMdlRead, a rotina FsRtlMdlReadEx bloqueia as páginas que contêm os dados de arquivo armazenados em cache para impedir que o sistema troque essas páginas pelo arquivo de página. As páginas permanecem bloqueadas na memória até que o chamador invoque a rotina CcMdlReadComplete .

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Confira também

CcMdlRead

CcMdlReadComplete

IO_STATUS_BLOCK

MmGetSystemAddressForMdlSafe