Ядро Windows - Есть ли что-то вроде ExGetPoolsForTag (pool_tag)? - PullRequest
2 голосов
/ 02 февраля 2012

речь идет о драйвере ядра Windows и управлении памятью.

Мне действительно любопытно, есть ли функция (или даже какой-либо неудобный подход) для получения (или итерации) всех выделений памяти для определенного тега пула ?? Они выделяются с использованием ExAllocatePoolWithTag (тип, размер, тег) ...

Есть функции ядра, использующие определенный Pool-Tag, теперь мне нужно найти все выделения, сделанные с использованием этого Tag?

Я относительно уверен, что это невозможно (по соображениям безопасности), но мне все еще нужно подтверждение об этом.

Ура, Будет

<ч /> Обновить: (о комментариях к WinDbg ниже)

kd> !poolfind ObFl

Scanning large pool allocation table for Tag: ObFl (fffffa8002290000 : fffffa8002350000)

Searching NonPaged pool (fffffa8001772000 : ffffffe000000000) for Tag: ObFl

... Таким образом, это означает, что мы должны найти общий способ найти «таблицу распределения пула» или границы невыгружаемого пула (если требуется). Звучит многообещающе.

<ч /> Update2: Существует несколько экспортов ntoskrnl: nt! PoolBigPageTable nt! PoolBigPageTableSize nt! PoolBigPageTableHash, которые мне нужно проверить ....

Ответы [ 2 ]

4 голосов
/ 02 февраля 2012

Я не знаю документированного способа, позволяющего это сделать из кода, однако отладчик ядра Windows (WinDBG) позволит вам достичь этого.

См. документы для команд! Pool,! Poolused,! Poolfind.

0 голосов
/ 06 мая 2012

Распределение ядра может быть выделено и освобождено в любое время.Если вы выполняете итерации по внутренним структурам данных, они могут внезапно исчезнуть из-под вас, и вы будете проверять ошибки.

Отладчик может обойти эти структуры, поскольку сначала он останавливает систему.

...