自己写Winlogon必须实现以下技术细节:
1.首先建立WindowStation,名字必须为Winsta0;因为某内核模式的程序里有对Winsta0的引用
2.建立三个桌面;首先必须建立winlogon名字的桌面,因为win32k.sys里有对winlogon名字桌面
的引用;接着建立default桌面,因为explorer必须运行在default桌面上,如果在winlogon桌面上,
会内存泄露,时间长了,有时会莫名其妙的挂起(这个我没有深究,估计"Default"桌面也在哪个
系统库里,显式的引用了)
3.对winlogn桌面进行安全设置(可不进行) Enable必须的特权,
4.启动services.exe;services.exe首先创建一个同步对象,然后WaitForSingleObject挂起等待它
5.启动lsass.exe;lsass用NtConnetPort到winlgon。NtConnectPort失败的话就挂起,这样整个
winlogon也就挂起不继续了,等效于死机了,然后lsass把services.exe建的同步对象状态设置成激活,
这样service.exe得到lsass启动的信号,就resume了.
所以这里必须创建lsass连接到winlogon的对象 这个对象暂时我还没有研究出来,但lsass.exe创建udp
500端口 可能为Ntcreateport创建端口 这个正在研究中
MS的winlogon首先建立WindowStation,即Winsta0,自己实现的话,
WindowStation的名字也必须是winsta0,否则...,然后建立三个桌面,
自己实现的话,必须建立名字叫winlogon的桌面,不能随便命名,因为
win32k.sys里面有对叫winlogon名字的桌面的引用。同时,应用程