能力值:
( LV2,RANK:10 )
|
-
-
2 楼
这么简单的问题,难道没人知道?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
可以用CreateService
如果是已加载的驱动,再次调用将不成功
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
驱动程序里用CreateService??
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
kcynic你理解错我的意思了。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
很简单,当加载D1.sys的时候, 驱动先去查找D2.sys是否已经被加载了(可以查找驱动程序列表),如果是,则退出; D2.sys里同理....
如果D1.sys与D2.sys都不是你写的,你没有源代码; 你可以从用户程序里判断, 每个驱动程序一般都会有个符号连接,供用户层程序来使用, 你可以在用户层程序里用CreateFile来判断设备对象是否已经存在.....
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
d1.sys不知道d2.sys是文件名的啊,也不知道对方的符号名和设备名。
|
能力值:
( LV12,RANK:1010 )
|
-
-
8 楼
LZ,你在异想天开吗?
6楼的回答已经很贴切了.
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
大米的回答很幽默,呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
写注册表、写文件、选一个大多数程序都不会去 HOOK的API 将其HOOK 。。。两个驱动都导出接口在DriverEntry相互调。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
开来是没类似用户态下的方便的办法了。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
我都说了, 在用户程序里用CreateFile来判断设备对象是否已经存在;
驱动程序会创建设备对象的, 还会为这个设备对象创建符号连接,以供用户程序来使用, 如, d1.sys加载后, 如果是NT式驱动, IO管理器会为其创建一个驱动对象, 这个驱动对象的名称就按你加载此驱动的服务名称来定; 然后, d1.sys会在此驱动对象里创建一个设备对象, 如 \Device\d1 , 同时, 还会创建符号连接, 你在用户层里就可以通过CreateFile来打开这个设备对象, 如: HANDLE d1h = CreateFile("\\\\.\\d1", ... ) 然后GetLastError来判断是何种状态, 就可以正确地判断出 d1.sys 到底有没有被加载.
设备名与符号连接可以通过一些驱动查看工具来获得;
|
能力值:
( LV8,RANK:130 )
|
-
-
13 楼
不算难题...
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
13能否指教一二
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
真是不明白你到底想干啥。
你举的例子就正好说明了一个问题:那个RunningFlag标志必须是你知道的特征,所以你才能利用它来防止重复运行。在驱动中也可以利用相关的特征才达到目的,比如模块名、设备名等特征,如果啥特征都不知道,估计上帝也不知道你想干啥.
一旦知道特征了就容易了,在DriverEntry()里边进行检测,如果存在就返回STATUS_UNSUCCESSFULLY,想不失败都难。
|
|
|