Украдено из комментария к сообщению в блоге здесь
Позволь мне
дать небольшое представление о том, как
Рабочие места кучи рабочего стола сделаны.
куча рабочего стола в режиме ядра
виртуальное адресное пространство, так индивидуально
выделение кучи рабочего стола должно быть
сделано компонентом, работающим в ядре
Режим. В частности, win32k.sys является
единственный компонент режима ядра, который делает
распределение рабочего стола в куче. win32k.sys
в режиме ядра на стороне Win32, и
включает в себя как оконный менеджер
(ПОЛЬЗОВАТЕЛЬ) и GDI. Это окно
часть менеджера win32k.sys, которая использует
куча рабочего стола. Функциональность
оконный менеджер подвержен процессам
работает в режиме пользователя через
user32.dll. Это user32.dll, что
экспортирует вызываемые функции пользовательского режима
которые реализованы в win32k.sys. Так
если процесс не загружает user32.dll,
он не будет использовать кучу рабочего стола.
Относительно вашего вопроса о настройке
точка останова , которая будет ловить рабочий стол
выделения кучи ... да, есть такие
функция - win32k! DesktopAlloc .
Тем не менее, это режим ядра
функция, и установить точку останова на
для этого потребуется использовать ядро
отладчик.
Это звучит очень страшно для меня, который никогда не выходил из режима пользователя в Windows.
Когда у меня возникла похожая проблема, я просто ставил точки останова по всей загрузочной части нашего приложения. На каждом перерыве я следил за уровнем выделенных ручек и тем, что говорил мне dhelpmon. Делая что-то вроде бинарного поиска, я начал выяснять, где происходит распределение.