首页
社区
课程
招聘
驱动符号链接的疑问
发表于: 2013-5-22 19:15 5058

驱动符号链接的疑问

2013-5-22 19:15
5058
VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject) 
{
	PDEVICE_OBJECT	pNextObj;
	KdPrint(("Enter DriverUnload\n"));
	pNextObj = pDriverObject->DeviceObject;
	while (pNextObj != NULL) 
	{
		PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)
			pNextObj->DeviceExtension;

		//删除符号链接
		UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName;
		IoDeleteSymbolicLink(&pLinkName);
		pNextObj = pNextObj->NextDevice;
		IoDeleteDevice( pDevExt->pDevice );
	}
}


教科书的标准代码如上.

我参考驱动开发技术详解里面. 删除符号链接的代码是在循环里面的.
我知道设备可以不止一个.但是不晓得符号链接有几个.因为书里并没有进行介绍.
我的问题
1.符号链接只有一个的话.可以放到循环外面.如果在循环里面.当有多个设备,只有一个符号链接.进行循环删除的时候.会不会出错?
2.设备数量是否=符号链接数量?
3.如果设备数量与符号链接数量不相等.我想新建个循环进行删除符号链接.但是判断条件?

驱动菜鸟一个.各种不懂.希望有前辈来解答下.谢谢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
1. 首先、我们在驱动中创建的设备对象在Ring3是不能直接访问的。所以要在Ring3控制设备对象就要对已经创建好的设备对象生成对应的符号链接对象。然后Ring3可以对该符号链接对象做出操作。如果驱动内生成的设备不需要在Ring3访问、就不需要生成相应的符号链接对象了。
  所以 设备对象数 != 符号链接对象数

2. 程序对不对、要先弄清楚原理。提醒一句“尽信书则不如无书”。

3. 至于没有符号链接对象、但又做出了删除的操作。要看相关的代码知否会产生未定义行为、例如 IoDeleteSymbolicLink、又或者你生成的成参数值就是未定义的。
2013-5-23 00:57
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
尽信书则不如无书  理解加实践
2013-5-23 09:14
0
雪    币: 1088
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
感谢深夜为我解答.我想我应该多复制几个删除符号链接的代码去测试一下
2013-5-23 10:57
0
游客
登录 | 注册 方可回帖
返回
//