Win32 API предоставляет набор функций, позволяющий процессу определить, имеет ли он указанные права доступа по указанному адресу или диапазону адресов. Доступны следующие функции проверки доступа:
| Функция | Описание |
|---|---|
|
Определяет, имеет ли процесс права чтения памяти по указанному адресу |
|
|
Определет, имеет ли процесс права чтения памяти по указанному диапазону адресов. |
|
|
Определяет, может ли процесс использовать переданный указатель как указатель на ANSI-строку (заканчивающуюся символом с кодом 0). Функция проверяет, имеет ли процесс доступ к фрагменту памяти, который начинается от заданного указателя, и длина которого определяется первым вхождением символа с кодом 0, но не больше заданного количества символов. |
|
|
Определет, имеет ли процесс права записи в память по указанному диапазону адресов. |
Функции IsBadHugeReadPtr и IsBadHugeWritePtr оставлены для совместимости с 16-битной версией Windows, которая делает различия между нормальным выделением памяти, и выделением фрагментов памяти, которые занимают несколько сегментов. В 32-битной версии Windows эти функции эквивалентны соответственно функциям IsBadReadPtr и IsBadWritePtr.
В случае многопоточности возможна ситуация, когда один из потоков изменяет права доступа к фрагменту памяти после того, как другой поток этот фрагмент уже протестировал. Даже если функции проверки доступа показывают вам, что вы имеете желаемый доступ к памяти, вы все равно должны помещать обращения к такой памяти в try..finally блок. Использование блоков структурной обработки исключительных ситуаций позволяют системе уведомить процесс о том, что случилось нарушение доступа (access violation), и предоставлят процессу удобные средства для обработки исключения. Для более детальной информации смотрите раздел "Структурная обработка исключений".
Описание прочих возможностей |
Сравнение методов выделения памяти![]() |
© Mystic, 2002