Compartilhar via


Função IsBadWritePtr (winbase.h)

Verifica se o processo de chamada tem acesso de gravação ao intervalo de memória especificado.

Importante Essa função está obsoleta e não deve ser usada. Apesar do nome, ele não garante que o ponteiro seja válido ou que a memória apontada seja segura para uso. Para obter mais informações, consulte Comentários nesta página.
 

Sintaxe

BOOL IsBadWritePtr(
  [in] LPVOID   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 gravação 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 gravação a todos os bytes no intervalo de memória especificado, o valor retornado será diferente de zero.

Se o aplicativo for executado em um depurador e o processo não tiver acesso de gravação a todos os bytes no intervalo de memória especificado, a função causará uma primeira chance STATUS_ACCESS_VIOLATION exceção. O depurador pode ser configurado para interromper essa condição. Depois de retomar a execução do processo no depurador, a função continua como de costume e retorna um valor diferente de zero Esse comportamento é por design e serve como um auxílio de depuração.

Comentários

Essa função normalmente é 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 que esgota 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 gravação a alguns, mas não a todos, dos bytes no intervalo de memória especificado, o valor retornado será diferente de 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 gravação à memória especificada, você deve usar o tratamento de exceção estruturado ao tentar acessar a memória. O uso do tratamento de exceções estruturadas 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.

IsBadWritePtr não é multithread safe. Para usá-lo corretamente em um ponteiro compartilhado por vários threads, chame-o dentro de uma região crítica do código que permite que apenas um thread acesse a memória que está sendo verificada. Use objetos no nível do sistema operacional, como seções críticas ou mutexes ou as funções interconectadas para criar a região crítica do código.

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 (incluir Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

IsBadCodePtr

IsBadReadPtr

IsBadStringPtr