Функция IsBadWritePtr (winbase.h)
Проверяет, имеет ли вызывающий процесс доступ на запись в указанный диапазон памяти.
Синтаксис
BOOL IsBadWritePtr(
[in] LPVOID lp,
[in] UINT_PTR ucb
);
Параметры
[in] lp
Указатель на первый байт блока памяти.
[in] ucb
Размер блока памяти в байтах. Если этот параметр равен нулю, возвращаемое значение равно нулю.
Возвращаемое значение
Если вызывающий процесс имеет доступ на запись ко всем байтам в указанном диапазоне памяти, возвращаемое значение равно нулю.
Если вызывающий процесс не имеет доступа на запись ко всем байтам в указанном диапазоне памяти, возвращаемое значение будет ненулевым.
Если приложение выполняется в отладчике и процесс не имеет доступа на запись ко всем байтам в указанном диапазоне памяти, функция вызывает первое исключение STATUS_ACCESS_VIOLATION. Отладчик можно настроить для прерывания работы для этого условия. После возобновления выполнения процесса в отладчике функция продолжает работу в обычном режиме и возвращает ненулевое значение. Это поведение является конструктивным и служит помощником по отладке.
Комментарии
Эта функция обычно используется при работе с указателями, возвращаемыми из сторонних библиотек, где нельзя определить поведение управления памятью в сторонней библиотеке DLL.
Ожидается, что потоки в процессе будут взаимодействовать таким образом, что один из них не будет освобождать память, необходимую другому. Использование этой функции не отменяет необходимость делать это. Если этого не сделать, приложение может завершиться непредсказуемым сбоем.
Разыменовывание потенциально недопустимых указателей может отключить расширение стека в других потоках. Поток, исчерпающий свой стек, когда расширение стека было отключено, приводит к немедленному завершению родительского процесса без всплывающих окон ошибок или диагностических сведений.
Если вызывающий процесс имеет доступ на запись некоторых (но не всех) байтов в указанном диапазоне памяти, возвращаемое значение будет ненулевым.
В среде с упреждающей многозадачностью другой поток может изменить доступ процесса к тестируемой памяти. Даже если функция указывает, что процесс имеет доступ на запись к указанной памяти, при попытке получить доступ к памяти следует использовать структурированную обработку исключений. Использование структурированной обработки исключений позволяет системе уведомлять процесс о возникновении исключения нарушения доступа, предоставляя процессу возможность обрабатывать исключение.
IsBadWritePtr не является многопотоковой. Чтобы правильно использовать его в указателе, совместно используемом несколькими потоками, вызовите его в критической области кода, которая позволяет только одному потоку получить доступ к проверяемой памяти. Используйте объекты уровня операционной системы, такие как критические разделы, мьютексы или взаимосвязанные функции, для создания критической области кода.
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | winbase.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |