longda
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2004-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1780回复:8

还是在passthru中写文件的问题

楼主#
更多 发布于:2004-03-17 09:18
我用NdisAllocateMemory或者NdisAllocateMemoryWithTag申请内存,存放workitem的context,用IoAllocateWorkItem,IoQueueWorkItem,在MpSendPackets里创建并插入workitem,在写文件的函数里用NdisFreeMemory释放内存,但是这样可能会导致死机。不知道错在哪了。请求高人指点。
longda
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2004-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-17 09:22
忘了说了,我在执行完IoQueueWorkItem后,立刻执行oFreeWorkItem释放workitem,因为只有MPSendPackets知道IOWorkItem的指针。而context是在写文件后释放的。
start
驱动小牛
驱动小牛
  • 注册日期2001-11-05
  • 最后登录2010-09-03
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望27点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-18 17:35
关注
second
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-19 09:00
对iqrl判断了吗?
这里前几天有一个帖子讲过这个,里边的代码试过了,没问题。
longda
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2004-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-19 10:16
我就是要在DISPATCH_LEVEL写文件,所以才用IoQueueWorkItem。那个例子用的是ExQueueWorkItem,但是MSDN说这个函数已经过时了。这两个函数用法不太一样。
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-03-19 13:00
你用哪个函数写文件的。
longda
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2004-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-03-19 15:42
我用的是ZwWriteFile,在PASSIVE_LEVEL写的很正常
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-03-22 12:44
DDK说:
“Callers of ZwWriteFile must be running at IRQL PASSIVE_LEVEL.

longda
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2004-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-03-22 16:47
我知道,只能在PASSIVE_LEVEL调用ZwWriteFile,但IoQueueWorkItem可以实现在DISPATCH_LEVEL间接调用只有PASSIVE_LEVEL才能调用的函数。
我已经解决这个问题了,只要在Context里面把IOWorkItem的指针传给回调函数,让回调函数来释放就行了。
游客

返回顶部