Функция GetWriteWatch позволяет получить адреса всех страниц указанного региона, в которые производилась запись.
function GetWriteWatch( Flags: Cardinal; // состояние слежения за записью BaseAddress: Pointer; // базовый адрес региона RegionSize: Cardinal; // размер региона var Addresses: Pointer; // первый элемент массива адресов страниц var Count: Cardinal; // количество полученных адресов страниц var Granularity: Cardinal // размер страницы ): Cardinal; stdcall;
Параметры
Flags [in]
Указывает, как функция будет сбрасывать флаги слежения за записью. Для того,
чтобы сбросить состояние слежения, необходимо установить этот параметр в
WRITE_WATCH_FLAG_RESET. Если этот параметр равен нулю, то функция GetWriteWatch
не будет сбрасывать состояние слежения. Для более детальной информации по этому
параметру смотрите раздел примечания.
BaseAddress [in]
Указывает базовый адрес региона, для которого будет получена информация по
записи. Указанный адрес должен находиться внутри диапазона памяти, выделенного
функций VirtualAlloc с флагом MEM_WRITE_WATCH.
RegionSize [in]
Указывает размер в байтах области памяти, для который будет произведена запись
информации о слежении за записью.
Addresses [out]
Указатель на буфер, в который будет скопирована информация о слежении за записью
в указанный регион памяти. После выхода из функции в нем храниться адреса
страниц, в которые была произведена запись с того момента, как указанный регион
был выделен либо с того момента, как был произведен сброс флага информации за
слежением.
Count [in/out]
Как входной параметр эта переменная показывает количество элементов в массиве
Addresses. Как выходной параметр в эту переменную заносится число страниц,
адреса которых были занесены в массив.
Granularity [out]
Указатель на переменную, в которую заносится размер страницы в байтах.
Возвращаемое значение
В случае удачного завершения функция возвращает нуль.
В случае неудачного завершения функция возвращает ненулевое значение.
Описание
Если вы хотите выполнять слежение за некоторым фрагментом виртуального адресного пространства процесса, то вы должны указать при его резервировании или при передаче физической памяти при помощи функции VirtualAlloc флаг MEM_WRITE_WATCH. Только в этом случа системой будет произведено слежение за попытками записи в указанный регион. Для того, чтобы получить информацию о том, по каким адресам производилась запись, вы должны произвести вызов функции GetWriteWatch.
Для того, чтобы сбросить состояние слежения, вы должны передать в качестве значения WRITE_WATCH_FLAG_RESET в параметре Falgs. Другой вариант - вызов функции ResetWriteWatch. Если вы используете функцию ResetWriteWatch, то любая информации о записи в указанный регион в промежутках между вызовами GetWriteWatch и ResetWriteWatch является потерянной. Вы должны поступить таким образом либо в том случае, когда твердо уверенны в том, что в указанный промежуток времени не производилась запись по указанным адресам, либо в том случае, когда эта информация не представляет для вас интереса.
Функция GetWriteWatch может быть полезной программам протоколирования, отладчикам или сборщикам мусора.
Требования
Windows NT/2000: Не поддерживается
Windows 95/98: Требуется Windows 98 или более поздняя версия
Бибиотека: Kernel32.dll
Подключаемый модуль: Не описана
Смотри также:
виртуальная память, работа с виртуальной памятью, список функций для работы с виртуальной памятью, ResetWriteWatch, VirtualAlloc
Список функций |
GlobalMemoryStatus![]() |
© Mystic, 2002