IsBadCodePtr

Функция IsBadCodePtr определяет, имеет ли процесс права чтения памяти по указанному адресу.

function IsBadCodePtr(
  lpfn: FARPROC          // адрес памяти
): BOOL; stdcall;

Параметры

lpfn [in]
Указатель на интересующий нас адрес памяти.

Возвращаемое значение

Если вызывающий процесс имеет права чтения памяти по указанному указателю, то возвращаемым значением функции будет False.

Если вызывающий процесс не имеет права чтения памяти по указанному указателю, то возвращаемым значением функции будет True. Для получения расширенной информации об ошибке следует сделать вызов GetLastError.

Если эта функция скомпилирована в отладочной версии приложения, и вызывающий процесс не имеет прав чтения памяти по указанному адресу, то эта функция может выполниться аналогично проедуре Assert и послужить точкой останова в отладчике. По выходу из отладчика функция, как и положено, вернет True. Такое поведение при проектировании приложения служит для облегчения процесса отладки приложения.

Описание

Обычная практика использования этой функции - тест на допустимость переданного в качестве параметра укателя на процедуру/функцию. Часто эта функция используется при проектировании DLL, где невозможно предугадать, какое значение будет передано пользователем в качестве аргумента функции.

Функция IsBadCodePtr проверят доступеность для чтения только указанного адреса, но не гарантирет того, что для чтения будет доступен диапазон памяти, начинающийся с этого адреса.

В случае многопоточности возможна ситуация, когда один из потоков изменяет права доступа к фрагменту памяти после того, как другой поток этот фрагмент уже протестировал. Даже если функция IsBadCodePtr показала вам, что вы имеем доступ для чтения по указанному адресу, вы все равно должны помещать обращения к такой памяти в try..finally блок. Использование блоков структурной обработки исключительных ситуаций позволяют системе уведомить процесс о том, что случилось нарушение доступа (access violation), и предоставлят процессу удобные средства для обработки исключения. Для более детальной информации смотрите раздел "Структурная обработка исключений".

Требования

Windows NT/2000: Требуется Windows NT 3.1 или более поздняя версия
Windows 95/98: Требуется Windows 95 или более поздняя версия
Бибиотека: Kernel32.dll
Подключаемый модуль: Windows

Смотри также:

  • виртуальная память,
  • проверка доступа,
  • список прочих функций,
  • IsBadReadPtr,
  • IsBadStringPtr,
  • IsBadWritePtr
  • НазадFillMemory IsBadHugeReadPtrВперед

    © Mystic, 2002