Função IsBadReadPtr (winbase.h)
Verifica se o processo de chamada tem acesso de leitura ao intervalo de memória especificado.
Sintaxe
BOOL IsBadReadPtr(
[in] const VOID *lp,
[in] UINT_PTR ucb
);
Parâmetros
[in] lp
Um ponteiro para o primeiro byte do bloco de memória.
[in] ucb
O tamanho do bloco de memória, em bytes. Se esse parâmetro for zero, o valor retornado será zero.
Valor retornado
Se o processo de chamada tiver acesso de leitura a todos os bytes no intervalo de memória especificado, o valor retornado será zero.
Se o processo de chamada não tiver acesso de leitura a todos os bytes no intervalo de memória especificado, o valor retornado não será zero.
Se o aplicativo for compilado como uma versão de depuração e o processo não tiver acesso de leitura a todos os bytes no intervalo de memória especificado, a função causará uma asserção e entrará no depurador. Saindo do depurador, a função continua como de costume e retorna um valor diferente de zero. Esse comportamento é por design, como um auxílio de depuração.
Comentários
Normalmente, essa função é usada ao trabalhar com ponteiros retornados de bibliotecas de terceiros, em que você não pode determinar o comportamento de gerenciamento de memória na DLL de terceiros.
Espera-se que os threads em um processo cooperem de forma que um não libere a memória de que o outro precisa. O uso dessa função não nega a necessidade de fazer isso. Se isso não for feito, o aplicativo poderá falhar de maneira imprevisível.
Desreferenciar ponteiros potencialmente inválidos pode desabilitar a expansão da pilha em outros threads. Um thread esgotando sua pilha, quando a expansão da pilha foi desabilitada, resulta no encerramento imediato do processo pai, sem nenhuma janela de erro pop-up ou informações de diagnóstico.
Se o processo de chamada tiver acesso de leitura a alguns, mas não a todos, dos bytes no intervalo de memória especificado, o valor retornado não será zero.
Em um ambiente de multitarefa preemptiva, é possível que algum outro thread altere o acesso do processo à memória que está sendo testada. Mesmo quando a função indica que o processo tem acesso de leitura à memória especificada, você deve usar o tratamento de exceção estruturado ao tentar acessar a memória. O uso do tratamento de exceção estruturado permite que o sistema notifique o processo se ocorrer uma exceção de violação de acesso, dando ao processo a oportunidade de lidar com a exceção.
Requisitos
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winbase.h (inclua Windows.h) |
Biblioteca | Kernel32.lib |
DLL | Kernel32.dll |