Собсно вопрос: как в кернелмоде получить хендл порта, для отправки сообщений серверу подсистемы win32 (csrss)? (в ntrootkit, например, его адресс прописан жестко, в некоторых других проектах из ntdll импортируецца ф-ция CsrClientCallServer, которой сабж и вовсе не нужен)
Смотрим в дизасме участок функции CsrClientCallServer Код (Text): .text:7C9132EB loc_7C9132EB: ; CODE XREF: CsrClientCallServer+B9BDj .text:7C9132EB ; CsrClientCallServer+B9E1j .text:7C9132EB push esi .text:7C9132EC push esi .text:7C9132ED push dword_7C97C134 .text:7C9132F3 call ZwRequestWaitReplyPort .text:7C9132F8 cmp edi, ebx .text:7C9132FA jnz loc_7C91EB68 dword_7C97C134 хранит хендл порта. по референсам на дворд выходим на функцию CsrNewThread Код (Text): .text:7C918E7A public CsrNewThread .text:7C918E7A CsrNewThread proc near .text:7C918E7A push dword_7C97C134 .text:7C918E80 call ZwRegisterThreadTerminatePort .text:7C918E85 retn .text:7C918E85 CsrNewThread endp Эта функция одинакова во всех виндах. Вот из дворда в ней и бери хендл. Не забудь только, что он валиден только в контексте того процесса в котором он взят.
Кстати, а что ему даст этот хендл Сообщения то для каждой винды разные .. по крайней мере, я не видел стандарта создания сообщений подсистеме csrss .