Есть такая ф-я ValidateHeap(heapHandle,dwFlags,lpMem), она определяет правильность всего хипа heapHandle или куска памяти lpMem. Так вот, если передать ей lpMem который не лежит внутри heapHandle он вернет false ? П.С. Вообще можно как-нибудь быстро опредлить принадлежность адреса хипу.
В смысле HeapSize ? А указатель на начало блока где взять ? Или ей можно кинуть указатель на середину ? П.С. HeapWalk _ОЧЕНЬ_ медленно (да и не нужно мне весь хип проходить)
По хэндлу кучи лежит какой-то бред, неужели нельзя как-нибудь достать оттуда хотябы размер (хотя это не будет работать если куча растущая)
Не, я имел ввиду по хэндлу кучи достать ее размер. П.С. А по адресу, если округлить до размера страницы в меньшую сторону, нету ли там чанка того-же типа ?
tylerdurden Не бред, а структура HEAP Описание для XP и w2k см.например тут). Адреса и размеры сегментов кучи можно достать по указателям PHEAP_SEGMENT из массива *Segments. Плюс отдельный двухсвязный список LIST_ENTRY VirtualAllocdBlocks - больших блоков, выделенных непосредственно через VirtualAlloc. Описания структуры блока не встречал, хотя особо и не искал, т.к. все и так ясно из отладчика - сначала ес-но идет LIST_ENTRY, затем по смещениям 10h и 14h одно и тоже значение - CommitedSize и оно же = размеру блока (в XP), а затем по аналогии с HEAP_ENTRY UnusedBytes, только тут это dword, а не байт. Разность CommitedSize-UnusedBytes = запрошенный размер HeapAlloc