|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
HeapValidate
The HeapValidate function attempts to validate a specified heap. The function scans all the memory blocks in the heap, and verifies that the heap control structures maintained by the operating system's heap manager are in a consistent state. You can also use the HeapValidate function to validate a single memory block within a specified heap, without checking the validity of the entire heap.
BOOL HeapValidate(
HANDLE hHeap, // handle to the heap of interest DWORD dwFlags, // bit flags that control heap access during function operation LPCVOID lpMem // optional pointer to individual memory block to validate );
Parameters
hHeap
Handle to the heap of interest. The HeapValidate function attempts to validate this heap, or a single memory block within this heap.
dwFlags
A set of bit flags that control heap access during function operation. The following bit flag has meaning:
Value Meaning HEAP_NO_SERIALIZE If this flag is set, heap access is not serialized while the HeapValidate function accesses the heap; heap access is not mutually exclusive. It is safe to set this flag only in a limited set of specific situations. For a discussion of those situations and heap serialization in general, see the Remarks section of HeapCreate. If this flag is clear, heap access is serialized while HeapValidate accesses the heap; heap access is mutually exclusive. This is the safe and simple default condition.
lpMem
Points to a memory block within the specified heap. This parameter may be NULL. If this parameter is NULL, the function attempts to validate the entire heap specified by hHeap. If this parameter is not NULL, the function attempts to validate the memory block pointed to by lpMem. It does not attempt to validate the rest of the heap.
Return Values
If the specified heap or memory block is valid, the return value is nonzero. If the specified heap or memory block is invalid, the return value is zero. On a system set up for debugging, the HeapValidate function then displays debugging messages that describe the part of the heap or memory block that is invalid, and stops at a hard-coded breakpoint so that you can examine the system to determine the source of the invalidity. The HeapValidate function does not set the thread's last error value.
Remarks
There are heap control structures for each memory block in a heap, and for the heap as a whole. When you use the HeapValidate function to validate a complete heap, it checks all of these control structures for consistency. When you use HeapValidate to validate a single memory block within a heap, it checks only the control structures pertaining to that element. HeapValidate can only validate allocated memory blocks. Calling HeapValidate on a freed memory block will return FALSE because there are no control structures to validate.
If you want to validate the heap elements enumerated by the HeapWalk function, you should only call HeapValidate on the elements that have the PROCESS_HEAP_ENTRY_BUSY bit flag in the wFlags member of the PROCESS_HEAP_ENTRY structure. HeapValidate returns FALSE for all heap elements that do not have this bit set.
See Also
HeapCreate, HeapWalk, PROCESS_HEAP_ENTRY
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
HeapValidate
Функция HeapValidate пытается подтверждать определенную кучу. Функция сканирует всех блоков памяти в кучу и проверяет, что управляющие структуры кучи поддерживались менеджером кучи операционной системы - в последовательном состоянии. Вы можете также использовать функцию HeapValidate, чтобы подтверждать единственного блока памяти в пределах определенной кучи, не проверяя достоверность целой кучи.
BOOL HeapValidate(
РУЧКА hHeap, // оперируется в кучу интереса DWORD dwFlags, // битовые флаги, которые управляют доступом кучи в течение функциональной операции дополнительного указателя LPCVOID lpMem // индивидуальному блоку памяти, чтобы подтверждаться );
Параметры
hHeap
Прооперируйте кучу интереса. Функция HeapValidate пытается подтверждать эту кучу, или единственный блока памяти в пределах этой кучи.
dwFlags
Установка бита сигнализирует этот управляющий доступ кучи в течение функциональной операции. Битовый флаг следующего имеет значение:
Значение Величины HEAP_NO_SERIALIZE Если этот флаг установлен, доступ кучи не издан сериями пока функциональные доступы HeapValidate куча; доступ кучи не взаимно исключительный. Это безопасное, чтобы устанавливать этот флаг только в ограниченной установке специфических ситуаций. Для дискуссии тех ситуаций и преобразования в последовательную форму кучи в общих чертах, смотри секцию Замечаний HeapCreate. Если этот флаг ясен, доступ кучи издан сериями тогда как HeapValidate имеет доступ к куче; доступ кучи взаимно исключительный. Это - безопасное и простое по умолчанию условие.
lpMem
Точки на блока памяти в пределах определенной кучи. Этот параметр может быть НЕДЕЙСТВИТЕЛЕН. Если этот параметр НЕДЕЙСТВИТЕЛЕН, функция пытается подтверждать целую кучу определенную hHeap. Если этот параметр не НЕДЕЙСТВИТЕЛЕН, функция пытается подтверждать блока памяти указанного, чтобы lpMem. Это не пытается подтверждать остальную часть кучи.
Обратные Величины
Если определенная куча или блок памяти в силе, обратная величина ненулевая. Если определенная куча или блок памяти недействительно, обратная величина нулевая. В системе установленной для отладки, HeapValidate функционирует затем отображает отладку сообщений, которая описывает часть кучи или блока памяти, которая - недействительные, и стоп в трудно-закодировавшие точечный разрыв чтобы Вы можете изучить систему, чтобы определять источник ложности. Функция HeapValidate не делает устанавливать величину последней ошибки резьбы.
Замечания
Есть нагромождать управляющие структуры для каждого блока памяти в куче, и для кучи в целом. Когда Вы используете функцию HeapValidate, чтобы подтверждать полную кучу, это проверяет все эти управляющие структуры на наличие согласованности. Когда Вы используете HeapValidate, чтобы подтверждать единственного блока памяти в пределах кучи, это проверяется только управляющие структуры относящиеся к этому элементу. HeapValidate МОЖЕТ только подтвердить размещенных блоков памяти. Разговор HeapValidate на свободном блоке памяти возвращает ЛОЖЬ поскольку нет управляющих структур, чтобы подтверждаться.
Если Вы хотите подтвердить элементы кучи перечисленные функцией HeapWalk, Вы должны только вызывать HeapValidate в элементах, что иметь битовый флаг PROCESS_HEAP_ENTRY_BUSY в элементе wFlags структуры PROCESS_HEAP_ENTRY. HeapValidate ВОЗВРАЩАЕТ ЛОЖЬ для всех элементов кучи, что нет был установлен этот бит.
Смотри Также
HeapCreate, HeapWalk, PROCESS_HEAP_ENTRY
|
|
|
|
| |