Просматривая исходный код, выясняется, что ImDisk выделяет память в контексте системного процесса.Взгляните на рабочий набор для системы (например, с помощью Process Explorer ) - в нем должно быть указано использование физической памяти ImDisk.
Мой оригинальный ответ, который я написал до того, как посмотрелисходный код (все еще может быть полезен, если мое предположение неверно):
Для процессов вы можете просто взглянуть на значения рабочего набора - они указывают использование физической памяти для этого процесса.Однако для кода режима ядра, не специфичного для какого-либо процесса, это немного сложнее.Вам нужно что-то вроде RAMMap .Я говорю «что-то вроде», потому что на вкладках «Количество использований» и «Физические страницы» будет почти невозможно определить, откуда на самом деле берутся страницы (кто их выделил).
Редактировать:
Извините, я не осознавал, что вы хотели сделать это программно.Если вы хотите получить размер рабочего набора процесса, вызовите GetProcessMemoryInfo .Так что просто откройте системный процесс (PID 4) и вызовите эту функцию.
Что я имел в виду под второй частью, так это то, что я не знаю ни о каком отслеживании / отслеживании, выполняемом ядром для какого-либо ядра.API выделения памяти в режиме, по крайней мере, для просмотра использования физической памяти конкретного драйвера.То, как ядро управляет физическими страницами, не совсем то, о чем беспокоятся программисты в режиме пользователя или в режиме ядра.
Однако я кое-что здесь упустил, поскольку ImDisk не использует эти API - он использует ZwAllocateVirtualMemory.Если вам известен диапазон адресов блока, выделенного драйвером, вы можете вызвать QueryWorkingSet в системном процессе и выполнить некоторые вычисления, чтобы получить точный размер.