edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3840回复:25

在 WDM 驱动程序中有什么函数可以得到当前的 IRQL 级别?

楼主#
更多 发布于:2002-12-12 20:21
在 WDM 驱动程序中有什么函数可以得到当前的 IRQL 级别?

因为我在两个地方需要调用同一个函数,这两个地方的 IRQL 不一样,而那个被调用的函数中使用的函数需要区分 IRQL。
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-12 20:30
KeGetCurrentIrql( );
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-12 20:31
KeAcquireSpinLock, KeInitializeSpinLock, KeReleaseSpinLock, KeReleaseSpinLockFromDpcLevel
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-12 22:52
这几个应该都是“老面孔”了呀? :o
[color=red]大头鬼! :P[/color]
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-12 23:26
 
这几个应该都是“老面孔”了呀?


说实话,俺真是菜鸟!呵呵,别看俺发的贴子多:)
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-13 10:33
我用如下语句:

if( KeGetCurrentIrql( ) == DISPATCH_LEVEL )
NdisDprAcquireSpinLock( &pAdapt->BufferLock );
else
NdisAcquireSpinLock( &pAdapt->BufferLock );

结果还是蓝屏,而不做判断直接用 NdisDprAcquireSpinLock() 和 NdisDprReleaseSpinLock() 就不会出问题,这是怎么回事?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-13 12:35
if( KeGetCurrentIrql( ) == DISPATCH_LEVEL )
这句执行了么?
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-13 13:03
当然执行了,是不是它执行需要一些条件?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-13 13:11
我怀疑他不等于DISPATCH_LEVEL
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-13 14:55
 
我怀疑他不等于DISPATCH_LEVEL


你的意思是说当前的 IRQL 不是 DISPATCH_LEVEL 还是说 KeGetCurrentIrql() 返回的东西不会有这样的取值?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-12-13 15:05
你看看他返回的是DISPATCH_LEVEL么 值是2
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-12-13 15:42
我现在不做判断,改成 NdisDprAcquireSpinLock 就行了,我想知道为什么?

mikeluo,一个函数只能运行在比它的 IRQL 低的环境中吗?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-12-13 15:43
还有一个问题,我在 PtOpenAdapterComplete 中调用 NdisRequest 出现蓝屏,我这样:
KeRaiseIrql( DISPATCH_LEVEL, &OldIRQL );
NdisRequest( &Status, pAdapt->BindingHandle, &Request );
KeLowerIrql( OldIRQL );
结果还是蓝屏,我该怎么做?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-12-14 11:48
会不会是你在调用NdisRequest时内存分配的问题?
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-12-14 14:12
我的代码如下:
pAdapt->Request.RequestType = NdisRequestQueryInformation;
pAdapt->Request.DATA.QUERY_INFORMATION.Oid = OID_802_3_CURRENT_ADDRESS;
pAdapt->Request.DATA.QUERY_INFORMATION.InformationBuffer       = pAdapt->MACAddress;
pAdapt->Request.DATA.QUERY_INFORMATION.InformationBufferLength = 6;
pAdapt->Request.DATA.QUERY_INFORMATION.BytesWritten            = 0;
pAdapt->Request.DATA.QUERY_INFORMATION.BytesNeeded             = 0;
NdisRequest( &Status, pAdapt->BindingHandle, &pAdapt->Request );

请 mikeluo 帮忙检查一下,谢谢!!!
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-12-16 17:34
mikeluo 帮忙啊,谢谢!
nicol
驱动大牛
驱动大牛
  • 注册日期2001-11-28
  • 最后登录2009-07-30
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-12-16 17:39
if( KeGetCurrentIrql( ) == DISPATCH_LEVEL )
NdisDprAcquireSpinLock( &pAdapt->BufferLock );
else
NdisAcquireSpinLock( &pAdapt->BufferLock );


if
......
else
....

NdisAcquireSpinLock( &pAdapt->BufferLock );
放到else前面。
if( KeGetCurrentIrql( ) == DISPATCH_LEVEL )
NdisDprAcquireSpinLock( &pAdapt->BufferLock );
........
NdisAcquireSpinLock( &pAdapt->BufferLock );
else
.......
==寂寞骆驼==
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-12-16 17:43
不好意思:),现在的问题是这个,谢谢 nicol

 
还有一个问题,我在 PtOpenAdapterComplete 中调用 NdisRequest 出现蓝屏
nicol
驱动大牛
驱动大牛
  • 注册日期2001-11-28
  • 最后登录2009-07-30
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-12-16 17:48
不好意思:),现在的问题是这个,谢谢 nicol

 [quote] 还有一个问题,我在 PtOpenAdapterComplete 中调用 NdisRequest 出现蓝屏
[/quote]
蓝屏报什么错误?
==寂寞骆驼==
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-12-16 17:48
Status怎么声明的?
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
上一页
游客

返回顶部