Função ProbeForRead (wdm.h)
A rotina ProbeForRead verifica se um buffer do modo de usuário realmente reside na parte do usuário do espaço de endereço e está alinhado corretamente.
Sintaxe
void ProbeForRead(
[in] const volatile VOID *Address,
[in] SIZE_T Length,
[in] ULONG Alignment
);
Parâmetros
[in] Address
Especifica o início do buffer do modo de usuário.
[in] Length
Especifica o comprimento, em bytes, do buffer do modo de usuário.
[in] Alignment
Especifica o alinhamento necessário, em bytes, do início do buffer do modo de usuário.
Retornar valor
Nenhum
Comentários
Se o intervalo de memória especificado não estiver dentro do intervalo de endereços do modo de usuário, ProbeForRead gerará a exceção STATUS_ACCESS_VIOLATION. Se o início do intervalo de endereços não estiver alinhado no limite de bytes especificado por Alignment, ProbeForRead gerará a exceção STATUS_DATATYPE_MISALIGNMENT.
Os drivers no modo kernel devem usar ProbeForRead para validar o acesso de leitura aos buffers alocados no espaço do usuário. É mais comumente usado durante METHOD_NEITHER E/S para validar o buffer de usuário apontado por Irp –> UserBuffer.
Os drivers devem chamar ProbeForRead dentro de um bloco try/except . Se a rotina gerar uma exceção, o driver deverá concluir o IRP com o erro apropriado. Observe que os acessos subsequentes do driver ao buffer do modo de usuário também devem ser encapsulados em um bloco try/except : um aplicativo mal-intencionado pode ter outro thread excluindo, substituindo ou alterando a proteção de intervalos de endereços do usuário a qualquer momento (mesmo após ou durante uma chamada para ProbeForRead ou ProbeForWrite). Para obter mais informações, consulte Tratamento de exceções.
Não use essa rotina em endereços no modo kernel; ele gerará uma exceção.
Se os campos Irp-RequestorMode> = KernelMode, os campos Irp-AssociatedIrp.SystemBuffer> e Irp-UserBuffer> não contiverem endereços de modo de usuário e uma chamada para ProbeForRead para investigar um buffer apontado por ambos os campos gerará uma exceção.
Se Length = 0, ProbeForRead não faz nenhuma verificação do endereço. Nesse caso, a rotina não gera uma exceção para um endereço desalinhado ou está fora do intervalo de endereços de usuário válidos.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows 2000. |
Plataforma de Destino | Universal |
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
Regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), IrqlExApcLte2(wdm) |