首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
编程技术
发新帖
1
0
[求助]驱动中删除符号链接但没删除设备,如何处理
发表于: 2009-8-5 17:47
7419
[求助]驱动中删除符号链接但没删除设备,如何处理
win程序
2009-8-5 17:47
7419
在学习windows驱动开发技术详解的过程中
有一个例子是在DriverEntry中创建两个设备对象,其关系是水平向上的关系。
// 创建驱动设备对象
status = CreateDevice(pDriverObjcet);
status = CreateDevice2(pDriverObjcet);
在Unload例程中执行如下操作(少删除了一个设备)
RtlInitUnicodeString(&pLinkName, SYMLINKNAME);
IoDeleteSymbolicLink(&pLinkName);
RtlInitUnicodeString(&pLinkName2, SYMLINKNAME2);
IoDeleteSymbolicLink(&pLinkName2);
IoDeleteDevice(pDriverObject->DeviceObject);
用KDM加载执行的时候第一次都显示成功,但第二次就出问题了
点击运行的时候提示:系统找不到指定的文件
这种由同一个driver创建的设备,只删除一个那另一个以哪种形式存在?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
上传的附件:
driver.jpg
(31.14kb,121次下载)
收藏
・
1
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
4
)
qihoocom
雪 币:
635
活跃值:
(101)
能力值:
( LV12,RANK:420 )
在线值:
发帖
49
回帖
1165
粉丝
24
关注
私信
qihoocom
9
2
楼
删除2那个不就得了
2009-8-5 18:30
0
win程序
雪 币:
222
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
5
回帖
11
粉丝
0
关注
私信
win程序
3
楼
可能我表达的有问题
驱动和设备的生命周期各是多久?
他们之间是一种什么关系?
我的理解是:
驱动加载的时候,系统进程启动新的线程,调用执行体组件中的对象管理器,创建一个驱动对象。
然后由驱动对象创建设备对象。
在驱动调用DriverUnload例程时,删除设备。
这时候设备和驱动的生命周期同时结束。
我按上述想法试验了下,由一个Driver创建两个同级的Device
Driver
Device
但删除的时候只删除一个
剩下的那个Device
符号链接
这时候用WinObj查看驱动,驱动已经不存在了
只剩下那个没删除的设备
这种情况下再加载驱动,就会出现上面那种找不到指定文件的情况
重启系统后,那个没删除的设备就自动消失了
按理来说设备不能脱离驱动而存在,所以再加载驱动的时候会失败
由于在DriverUnload中没有对设备2的资源进行回收,在内核模式他不会自动释放
所以重启后才自动释放。
不知道这种理解对不
上传的附件:
1.JPG
(8.78kb,104次下载)
2.JPG
(7.19kb,104次下载)
3.JPG
(11.97kb,104次下载)
4.JPG
(6.59kb,104次下载)
2009-8-6 11:19
0
轩辕小聪
雪 币:
722
活跃值:
(123)
能力值:
( LV12,RANK:300 )
在线值:
发帖
10
回帖
547
粉丝
5
关注
私信
轩辕小聪
7
4
楼
看看WRK中的IoCreateDevice的流程吧(位于iosubs.c),它的流程就是ObCreateObject创建一个IoDeviceObjectType类型的对象,填充它的各个域,ObInsertObject把它加入对象表,最后把它的DriverObject域指向驱动对象,再调用IopInsertRemoveDevice把它加入DriverObject的DeviceObject的链表中。
IoDeleteDevice的流程,最后也同样调用IopInsertRemoveDevice把DeviceObject从DriverObject的DeviceObject链表中摘除。
VOID
IopInsertRemoveDevice(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT DeviceObject,
IN BOOLEAN Insert
)
{
KIRQL irql;
irql = KeAcquireQueuedSpinLock( LockQueueIoDatabaseLock );
if (Insert) {
DeviceObject->NextDevice = DriverObject->DeviceObject;
DriverObject->DeviceObject = DeviceObject;
}
else {
PDEVICE_OBJECT *prevPoint;
prevPoint = &DeviceObject->DriverObject->DeviceObject;
while (*prevPoint != DeviceObject) {
prevPoint = &(*prevPoint)->NextDevice;
}
*prevPoint = DeviceObject->NextDevice;
}
KeReleaseQueuedSpinLock( LockQueueIoDatabaseLock, irql );
}
可以看到,当第一个DriverObject->DeviceObject被Delete,原来其DeviceObject->NextDevice中保存的下一个设备对象就会被填入DriverObject->DeviceObject,所以只需要再原样调用一次:
IoDeleteDevice(pDriverObject->DeviceObject);//第一次
IoDeleteDevice(pDriverObject->DeviceObject);//第二次
就可以把两个设备都删除了。
如果要先删除特定的设备,只要通过DriverObject->DeviceObject开始,找DeviceObject->NextDevice找到相应的对象,对其调用IoDeleteDevice。
驱动对象及其创建的设备对象的水平层次结构如《windows驱动开发技术详解》第112页图4-14所示,楼主应该仔细看书。
2009-8-6 16:00
0
win程序
雪 币:
222
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
5
回帖
11
粉丝
0
关注
私信
win程序
5
楼
感谢轩辕小聪回复
那个删除的问题上午解决了
是通过下面代码来删除的
IoDeleteDevice(pDriverObject->DeviceObject->NextDevice);
IoDeleteDevice(pDriverObject->DeviceObject);
刚开始学驱动,有时间把WRK拿来研究下
还有关于驱动和设备的生命周期的理解对吗?
2009-8-6 16:42
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
win程序
5
发帖
11
回帖
10
RANK
关注
私信
他的文章
[求助]如何调试“安全删除U盘”
4232
[求助]提前处理“安全删除U盘”消息
3475
如何隐藏磁盘
7663
[求助]驱动中删除符号链接但没删除设备,如何处理
7420
[求助]VMP的壳如何脱?
2278
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
谁下载
×
WinDos2K
johnroot
coolboylmk
kuang110
guoke
somuch
偶一个NO
lmsoft
morning
onelife
figo
thinkSJ
thdzhqg
sxniao
sixL
heretic
zhzhtst
kangaroo
南山小松
cham
ryanliu
网络游侠
hackroad
mylo
sudami
轩辕小聪
要学会编
zzage
santuri
shileifull
trueme
nafol
mooncrack
疯子
niukuo
littlewisp
ericzw
ILHWF
wuqingli
cnsyzb
stanford
win程序
zfjzfj
cschenhui
qihoocom
Fypher
liangdong
wyhero
piaoma
DiYhAcK
xlyvip
pak
星河互动
kkblue
somylr
iqiqeee
bjwdxs
woshiczy
yeweijun
zxiso
hatling
lizichuan
skyNirvana
技术生命
Lshdelta
灯圆号
第八个门
cncomv
ntKnight
yeaiping
lishhu
cold
xed
SilenLambs
bycon
kkmylove
CCDmichael
legendwind
小阳哥
liuhongp
wmbol
wykyang
ztgameboy
heyuehui
xynzhaocg
pinkchild
wwwnimaba
ycmint
西班牙
dxddxd
Rprop
长风傲天
JinEver
dormsixboy
KiDebug
Heysu
noein
Tilics
vincentwa
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部