阅读:1308回复:7
在驱动中建立链表出现的问题
我想再filemon驱动中建立一个规则链表,但是赋值好像总是赋不上,有如下步骤:
1、在头文件中定义节点 typedef struct RefuseRule { CHAR file_fullPathName[MAXPATHLEN]; CHAR pro_name[PROCNAMELEN]; CHAR asktype[8]; struct RefuseRule *next; } RefuseRule,*PREFUSERULE; 2、定义全局变量 PREFUSERULE PRefuseRule ; RefuseRule *p_temp , first_node; int rule_count==-1; 3、初始化过滤规则链表 if(rule_count==-1) { PRefuseRule=(RefuseRule *) ExAllocatePool( NonPagedPool, (sizeof(RefuseRule))); strcpy(PRefuseRule->pro_name,""); strcpy(PRefuseRule->file_fullPathName,"abc.txt"); PRefuseRule->next=NULL; rule_count++; } 4、对链表进行增加和删除操作,用DbgPrint输出观察应用程序传入的串,正确传入,但是结果表明规则始终没有加上,结果发现头节点的信息就是第3步的都没有,传入的串分开后也有问题,最初使用数组不行,后使用malloc不行,现在使用ExAllocatePool( NonPagedPool, 。。。只能说不死机,但是赋值总是没有赋上。 ************************************* 这是什么原因呢,请大侠指点一二 或者能给出一个简单的初始化链表和添加节点的示例? 多谢 !!!!!!!! [编辑 - 7/30/04 by birdtomaster] |
|
沙发#
发布于:2004-07-31 01:25
给PRefuseRule初始化一下就行了,我在应用程序里试了!
|
|
|
板凳#
发布于:2004-07-31 01:36
道歉,好像不是这么档子事。现在我把你的代码照搬到我的程序里,也能通过。
|
|
|
地板#
发布于:2004-07-31 10:03
这段代码应该没问题,是不是其他地方有问题,驱动里不能用malloc之类的内存分配释放函数
|
|
|
地下室#
发布于:2004-07-31 10:03
道歉,好像不是这么档子事。现在我把你的代码照搬到我的程序里,也能通过。 编译也能通过吧,好像没有赋值上,因为是全局变量,再其它地方输出应该也可以但是看起来没有赋上值 |
|
5楼#
发布于:2004-07-31 10:12
这段代码应该没问题,是不是其他地方有问题,驱动里不能用malloc之类的内存分配释放函数 用malloc是要死机的,我试过的,在其它地方我首先就是输出PRefuseRule->file_fullPathName,但是没有输出,应该有啊,是在FilemonFastIoDeviceControl一开始就检查了,但是没有这个头节点的信息输出,初始化是在FilemonDispatch例程中初始化的,我仔细看了,我再仔细看看 |
|
6楼#
发布于:2004-08-01 11:44
将各变量定义为static全局变量后,可以在其它地方输出头节点信息 :P
|
|
7楼#
发布于:2004-08-02 08:54
我用的是LIST_ENTRY
发现现在有问题 借路问一下,IRP_MJ_CREATE遍历链表的时候,是不是需要把链表锁上啊?现在的程序没响应。 用什么函数锁? |
|