阅读:1925回复:13
关于在驱动中如何使用单键表,会者很简单的!
小弟最近看了Waltoney写的《Programming the Microsoft windows Driver Model 》eBook,书中关于在驱动中使用单链表的演示写到,
//先定义数据结构: typedef struct _ONEWAY { UNICODE_STRING p;//小弟自已加入一项 SINGLE_LIST_ENTRY linkfield; } ONEWAY, *PONEWAY; SINGLE_LIST_ENTRY SingleHead; SingleHead.Next = NULL; PONEWAY psElement = (PONEWAY) ExAllocatePool(PagedPool, sizeof(ONEWAY) ); PushEntryList(&SingleHead, &psElement->linkfield); SINGLE_LIST_ENTRY psLink = PopEntryList(&SingleHead); if (psLink) { psElement = CONTAINING_RECORD(psLink, ONEWAY, linkfield); ... ExFreePool(psElement); } 小弟按照上述方法在一个驱动中定义了一个键表, 想使用此链表,但不知为什么,总会出现死机。 小弟不明白怎样使用这个单链表。 如: 如何插入元素及引用,如结构中的: UNICODE_STRING p; 项,如何引用其值及修改其值? 是不是使用CONTAINING_RECORD()宏,但具体的使用我不是很清楚。 那位大侠肯伸出缓助之手,小弟感激不尽。 [编辑 - 4/11/03 by bhjinhou] [编辑 - 4/16/03 by bhjinhou] |
|
沙发#
发布于:2003-04-11 15:15
那位大侠指点一下。
|
|
板凳#
发布于:2003-04-11 18:48
那位大侠能说一下单链表如何使用?
|
|
|
地板#
发布于:2003-04-16 13:56
为何不使用STL的list类?小弟我最近才开始使用STL,顿时感觉C++实在是接近完美的。
|
|
地下室#
发布于:2003-04-16 16:21
为何不使用STL的list类?小弟我最近才开始使用STL,顿时感觉C++实在是接近完美的。 多谢你的参与, 不好意思,是小弟题目没说清楚,我的意思是在Driver中使用单链表. :cool: |
|
5楼#
发布于:2003-04-16 16:33
个人建议不要使用系统提供的LIST_ENTRY 和SINGLE_LIST_ENTRY 链表及其相关函数
1、不好用 2、出错太容易 自己编一个链表及相关函数集,不难而且调试和差错控制也方便 |
|
|
6楼#
发布于:2003-04-16 16:53
个人建议不要使用系统提供的LIST_ENTRY 和SINGLE_LIST_ENTRY 链表及其相关函数 谢谢,安你这么说,我在驱动中能这样定义吗? typedef struct _IPWAY { UNICODE_STRING p; UINT len; _IPWAY link; } IPWAY,*PIPWAY; 请指教! 如果能,那在使用中有那些要注意的呢? :( |
|
7楼#
发布于:2003-04-16 17:00
typedef struct _IPWAY
{ struct _IPWAY *link; UNICODE_STRING p; UINT len; } IPWAY,*PIPWAY; 做一个链表不是很难吧!参考数据结构的书 |
|
|
8楼#
发布于:2003-04-16 17:05
typedef struct _IPWAY 我认为在一般的用户态程序中使用是不难,但是在驱动中我没用过, 我是想问你这两者有何区别吗? 如何进行资源的释放? [编辑 - 4/16/03 by bhjinhou] |
|
9楼#
发布于:2003-04-16 17:23
出内存操作外,只使用基本的语句(ansi c的子集)。
看你做什么东西,在NDIS下用, NdisAllocateMemory, NdisAllocateMemoryWithTag,NdisFreeMemory........ |
|
|
10楼#
发布于:2003-04-16 17:30
出内存操作外,只使用基本的语句(ansi c的子集)。 好吧,回头我试试,如有什么问题以后还请多多指点. 非常感谢! |
|
11楼#
发布于:2004-12-05 18:12
自己实现不方便吧,主要是不同的结构如果都要分别定义自己的添加删除等函数就太烦了,楼主帖子里访问方法有误吗?我没有试过,哪位大侠说说看错在哪里
|
|
12楼#
发布于:2004-12-06 11:05
这个不要自己去实现了吧,当然你有时间,要深入研究,自己写一个也不难,还是需要比较深入的对windows系统内核的了解的。一般直接用DDK里的就可以了。。。
|
|
13楼#
发布于:2004-12-06 11:11
自己实现不方便吧,主要是不同的结构如果都要分别定义自己的添加删除等函数就太烦了,楼主帖子里访问方法有误吗?我没有试过,哪位大侠说说看错在哪里 链表里的节点放的是指针,仔细看看DDK的例子就清楚了。UNICODE_STRING 用错了,相信楼主应该找到问题了。 [编辑 - 12/6/04 by Shentu] |
|