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

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

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

因为我在两个地方需要调用同一个函数,这两个地方的 IRQL 不一样,而那个被调用的函数中使用的函数需要区分 IRQL。
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分
板凳#
发布于:2002-12-13 10:33
我用如下语句:

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

结果还是蓝屏,而不做判断直接用 NdisDprAcquireSpinLock() 和 NdisDprReleaseSpinLock() 就不会出问题,这是怎么回事?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-13 13:03
当然执行了,是不是它执行需要一些条件?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-13 14:55
 
我怀疑他不等于DISPATCH_LEVEL


你的意思是说当前的 IRQL 不是 DISPATCH_LEVEL 还是说 KeGetCurrentIrql() 返回的东西不会有这样的取值?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-13 15:42
我现在不做判断,改成 NdisDprAcquireSpinLock 就行了,我想知道为什么?

mikeluo,一个函数只能运行在比它的 IRQL 低的环境中吗?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-13 15:43
还有一个问题,我在 PtOpenAdapterComplete 中调用 NdisRequest 出现蓝屏,我这样:
KeRaiseIrql( DISPATCH_LEVEL, &OldIRQL );
NdisRequest( &Status, pAdapt->BindingHandle, &Request );
KeLowerIrql( OldIRQL );
结果还是蓝屏,我该怎么做?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于: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分
8楼#
发布于:2002-12-16 17:34
mikeluo 帮忙啊,谢谢!
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-16 17:43
不好意思:),现在的问题是这个,谢谢 nicol

 
还有一个问题,我在 PtOpenAdapterComplete 中调用 NdisRequest 出现蓝屏
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-12-16 18:22
在 ADAPT 结构中声明为 NDIS_STATUS Status;
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-12-16 21:15
哦,我还以为你问的是 Request:)

是这样声明的:
NDIS_STATUS  Status;
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-12-16 21:17
mikeluo,我专门开了一个帖子讨论,我把这个帖子结了,咱们在那里说好吗?

http://www.driverdevelop.com/forum/html_29964.html?1040044613
游客

返回顶部