I can't remember where I read it but csrss.exe does handle the task of rendering the mouse pointer. It's probably makes the most sense for csrss.exe to handle it because it's well positioned to deliver messages to any win32 application, since all win32 applications run "under" it.
Почему `csrss.exe` вызывается при каждом перемещении мыши?
После загрузки Windows XP SP3 и снижения активности всех процессоров я заметил, что происходит, когда я просто перемещаю мышь по кругу в пустое место на рабочем столе: сначала exporer.exe
вызывается, а затем csrss.exe
.
В статье в википедии об csrss.exe
этом говорится что-то вроде
Когда процесс пользовательского режима вызывает функцию, включающую консольные окна, создание процесса / потока или параллельную поддержку, вместо системного вызова библиотеки Win32 (kernel32.dll, user32.dll, gdi32.dll) отправляют межпроцессный вызов к процессу CSRSS, который выполняет большую часть реальной работы без ущерба для ядра. [1] Менеджер окон и сервисы GDI обрабатываются драйвером режима ядра (win32k.sys). [2]
Что заставляет меня верить, что движения мыши тоже управляются win32k.sys
- но, возможно, я неправильно понимаю это.
Может кто-нибудь собрать кусочки вместе? Мне интересно узнать точную причину звонка. Благодарю.
2 ответа на вопрос
csrss
В csrss.exe
стенды для подсистемы клиент / сервер. Это та часть, которая говорит о том, win32k.sys
что - после того, как эта часть была переведена в режим ядра (раньше она была в пользовательском режиме для NT 3.51) - отвечает (как следует из названия) за большую часть функциональности GUI подсистемы Win32 (включая окно Сообщения).
В Windows существует несколько подсистем, и по умолчанию, когда вы работаете на рабочем столе или запускаете службу Windows, вы будете использовать программу, привязанную к подсистеме Win32. Среди прочего это подразумевает, что kernel32.dll
при запуске программа будет загружена (как первая или вторая DLL, в зависимости от точной версии Windows) в программу.
Большинство kernel32.dll
вызовов заканчиваются в самом ядре (через ntdll.dll
пользовательский режим или ntoskrnl.exe
в режиме ядра), тогда как вызовы user32.dll
чаще всего заканчиваются в win32k.sys
. Разная функциональность, другое место, где они в конечном итоге. Это также окончательное объяснение того, почему ваше движение мыши приводит к вызову подсистемы клиент-сервер. csrss.exe
является подсистема Win32 и, следовательно, несет ответственность за все окровавленные детали, которые являются специфическими для подсистемы Win32, таких как окно сообщения. Шрифты, окна и т. Д. Не являются первоклассными гражданами в ядре, тогда как мьютексы, события, файлы являются. Но обработка первого все еще перенесена в ядро благодаря его расширению.win32k.sys
которая даже получает свою собственную таблицу дескрипторов системных служб (SDT или SSDT), которая используется для безопасного вызова служб ядра из пользовательского режима.
Кстати: если у вас есть дизассемблер или какой-либо инструмент dumpbin
( например, поставляется с Visual Studio), вы можете проверить это самостоятельно:
for %i in (user32.dll ntdll.dll kernel32.dll ntoskrnl.exe win32k.sys) do @(echo %i & dumpbin /headers %i|findstr subsystem)
Даст на Windows 7 x64 (при запуске изнутри C:\Windows\System32
):
user32.dll 6.01 subsystem version 2 subsystem (Windows GUI) ntdll.dll 6.01 subsystem version 3 subsystem (Windows CUI) kernel32.dll 6.01 subsystem version 3 subsystem (Windows CUI) ntoskrnl.exe 6.01 subsystem version 1 subsystem (Native) win32k.sys 6.01 subsystem version 1 subsystem (Native)
«Собственная» подсистема фактически означает отсутствие подсистемы в Windows. Т.е. он напрямую взаимодействует с нативным API (который не имеет многих ограничений API Win32). Драйверы режима ядра не имеют подсистемы, то есть «собственной подсистемы». Также некоторые из программ, которые запускаются раньше, winlogon.exe
например, smss.exe
которые на самом деле winlogon.exe
создаются, являются "нативными программами". Один хороший пример здесь - это то, autochk.exe
что отвечает за проверку флага «грязный» в файловых системах и запуска проверки файловой системы, если он установлен.
Пример нативного API был бы по NtCreateFile
сравнению с Win32 CreateFile
. Однако для объяснения деталей нужна книга. Обратитесь к "Внутренним компонентам Windows" Руссиновича за обзором и "Справочнику по Windows API для Windows NT / 2000" Неббетта для некоторых подробностей. Также см undocumented.ntinternals.net и Недокументированные секреты Windows 2000 ...
Похожие вопросы
-
4
Как узнать, кто вошел в Windows XP?
-
3
Как обстоят дела с папкой C: \ Program Files \ xerox \ nwwia?
-
3
Почему отключение моего флэш-накопителя приводит к синему экрану?
-
-
2
Есть ли какой-нибудь способ получить пункт меню «отправить в -> получатель почты» в Gmail?
-
2
Почему установщик IIS не может скопировать staxmem.dll, несмотря на то, что он находится в указанной...
-
1
Переключить настройки DNS для каждого пользователя Windows?
-
4
Есть ли способ поделиться сканером многофункционального принтера?
-
8
Как предотвратить сжатие панели задач при использовании удаленного рабочего стола?
-
20
Я что-то упускаю, придерживаясь Windows XP?
-
6
Лучшая клавиатура со встроенным указательным устройством для медиацентра Mac?