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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de