birdtomaster
驱动牛犊
驱动牛犊
  • 注册日期2003-10-03
  • 最后登录2008-09-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1309回复:7

在驱动中建立链表出现的问题

楼主#
更多 发布于:2004-07-30 16:09
我想再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]
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-31 01:25
给PRefuseRule初始化一下就行了,我在应用程序里试了!
省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-31 01:36
道歉,好像不是这么档子事。现在我把你的代码照搬到我的程序里,也能通过。
省元坊
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-31 10:03
这段代码应该没问题,是不是其他地方有问题,驱动里不能用malloc之类的内存分配释放函数
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
birdtomaster
驱动牛犊
驱动牛犊
  • 注册日期2003-10-03
  • 最后登录2008-09-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-31 10:03
道歉,好像不是这么档子事。现在我把你的代码照搬到我的程序里,也能通过。

编译也能通过吧,好像没有赋值上,因为是全局变量,再其它地方输出应该也可以但是看起来没有赋上值
birdtomaster
驱动牛犊
驱动牛犊
  • 注册日期2003-10-03
  • 最后登录2008-09-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-31 10:12
这段代码应该没问题,是不是其他地方有问题,驱动里不能用malloc之类的内存分配释放函数

用malloc是要死机的,我试过的,在其它地方我首先就是输出PRefuseRule->file_fullPathName,但是没有输出,应该有啊,是在FilemonFastIoDeviceControl一开始就检查了,但是没有这个头节点的信息输出,初始化是在FilemonDispatch例程中初始化的,我仔细看了,我再仔细看看
birdtomaster
驱动牛犊
驱动牛犊
  • 注册日期2003-10-03
  • 最后登录2008-09-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-01 11:44
将各变量定义为static全局变量后,可以在其它地方输出头节点信息 :P
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-02 08:54
我用的是LIST_ENTRY
发现现在有问题
借路问一下,IRP_MJ_CREATE遍历链表的时候,是不是需要把链表锁上啊?现在的程序没响应。

用什么函数锁?
游客

返回顶部