Читал свои ссылки, гуглил, прозрел, хотя пока без практического применения
DWM (диспетчер окон рабочего стола) используется для спецэффектов при отображении окон: полупрозрачные рамки окон, «заблюривание» содержимого под окном, «живые» эскизы панели задач и т.д.
Идея создания dwm – в использовании ресурсов видеокарт не только для 3D, но и для всех окон; и технология получилась обратно совместимой со старыми приложениями – программы считают, что они рисуют себя как раньше – но на самом деле dwm получает «картинки» окон, а потом комбинирует их на рабочем столе, добавляя спецэффекты, когда надо, а результаты похоже хранятся в памяти, разделенной с видеокартой – поэтому например можно взять окно и потягать его по экрану, и если раньше окна ниже иногда видимо для глаз перерисовывали себя, то теперь этого не происходит – dwm имеет актуальную картинку всех окон и быстро компонует результирующую картинку, окна ниже я так понимаю иногда даже не получают уведомления о том, что их часть стала невалидной
При этом dwm немного похож на вывод видео в оверлей: я делал приложение, которое регистрировало себя для отображения эскиза другого приложения – после этого прямо поверх моего окна рисовалось чужое окно, причем рисовалось, обновляясь в реал-тайме, нагрузка на процессор при этом отсутствовала; но если получить картинку моего окна «обычным» способом (GetDC -> BitBlt), то превью отсутствовало – теперь понятно почему: картинка эскиза накладывалась dwm поверх моего окна при композиции десктопа
Но если надо получить изображение десктопа (GetDC(0) или нажав кнопку PrintScreen), то видимо dwm или кто-то еще вдупляется, что происходит, и для копирования берется содержимое памяти после накладывания спецэффектов и прочего, т.е. из видеопамяти
При этом dwm выделяет нужное количество памяти (всплеск размера используемой памяти в диспетчере задач) и теоретически должно быть проседание производительности (потому что копирование из видеопамяти медленный процесс), память потом попозже конечно освобождается, но если копировать экран 1920*1080 скажем 35 раз/сек, то она (память) будет выделяться быстрее, чем освобождаться, и через какое-то время система говорит: «Упс, существенно не хватает ресурсов»
И что с этим делать я пока не придумал и решения не нашел; экстенсивное решение – делать это не так часто или не использовать Aero