当前位置:主页>销售管理软件> 列表

关于在winlogon.exe中插入dll,在dll中使用

仓库管理软件版1楼: 我做了一个进程监视的dll文件,主要是负责监视我的一个程序文件,如果在系统中发现该
程序的窗口(我使用findwindow函数),就退出,如果不存在就启动该程序,我将dll注射到winlogon.exe负责监视,结果发现在winlogon.exe中dll根本找不到该程序的窗口,就不停的启动我的程序,实际上这个程序已经运行,而将该dll注射到其他进程,比如wexplorer.exe,就能发现程序的窗口,请问究竟是怎么回事啊,难道在winlogon.exe不能使用findwindow函数?

2楼: winlogon.exe没有窗口,其进程空间的dll启动的进程也不会有窗口。就是说,进程肯定是启动了,但没有窗口。所以用findwindow没有用。
explorer.exe有窗口。其进程空间的dll启动的进程也会有窗口。 如用友财务软件价格

3楼: 好像不是这样的吧,当时我也这么想的,于是我采用
映射共享内存的方法,在我监视的程序中createFileMapping
方法创建了一个全局共享内存,在我监视线程里用OpenFileMapping
来打开这个全局共享内存,如果打开成功,说明我监视的进程
存在,打开不成功就启动该进程,结果发现明明监视的进程在运行
createFileMapping也很成功,在其他进程里这个dll监视进程运行很好
唯独在winlogon。exe不行,于是我又用CreateMutex的方法,在被监视的进程
CreateMutex,在监视线程dll里openMutex打开这个Mutex来判断进程是否运行
可这个监视线程的dll插入到winlogon.exe 也不能正常运行,明明被监视的进程
成功CreateMutex了,而在winlogon.exe却openMutex不成功,而在其他进程里却可以
,究竟是为什么?难道在winlogon.exe就实现不了进程监视?

4楼: 我觉得没必要非得用获得窗口句柄对程序进行监视,可以用其他的变通方法
比如可以建立winsock通讯,一旦disconnect就说明程序终止,这种方法在msgina.dll里可以的

5楼: 是否是权限不够?
你好好想想 我没仔细看 大概是这个问题。

6楼: 你的DLL根本就没进入到winlogon.exe的进程空间
这就是答案

仓库管理软件版7楼: winlogon以system身份启动的,explorer是以当前用户身份启动的
你的进程以也是以当前登录的用户身份启动的
XP把不同用户的对象划分开了,每个用户都有自己独立的对象,如互斥量,原子等
findwindow无法找到其他用户开启的窗口

8楼: 我的DLL肯定进入到winlogon.exe的进程空间了,这我是利用冰刃察看过了的
有什么好的方法在winlogon.exe的进程空间监视我们自己程序呢

9楼: 可以试试取多有的进程,检测你的进程是否存在,如果发现进程不存在来,就开一个。