阅读:3680回复:25
在 WDM 驱动程序中有什么函数可以得到当前的 IRQL 级别?
在 WDM 驱动程序中有什么函数可以得到当前的 IRQL 级别?
因为我在两个地方需要调用同一个函数,这两个地方的 IRQL 不一样,而那个被调用的函数中使用的函数需要区分 IRQL。 |
|
沙发#
发布于:2002-12-12 23:26
这几个应该都是“老面孔”了呀? 说实话,俺真是菜鸟!呵呵,别看俺发的贴子多:) |
|
板凳#
发布于:2002-12-13 10:33
我用如下语句:
if( KeGetCurrentIrql( ) == DISPATCH_LEVEL ) NdisDprAcquireSpinLock( &pAdapt->BufferLock ); else NdisAcquireSpinLock( &pAdapt->BufferLock ); 结果还是蓝屏,而不做判断直接用 NdisDprAcquireSpinLock() 和 NdisDprReleaseSpinLock() 就不会出问题,这是怎么回事? |
|
地板#
发布于:2002-12-13 13:03
当然执行了,是不是它执行需要一些条件?
|
|
地下室#
发布于:2002-12-13 14:55
我怀疑他不等于DISPATCH_LEVEL 你的意思是说当前的 IRQL 不是 DISPATCH_LEVEL 还是说 KeGetCurrentIrql() 返回的东西不会有这样的取值? |
|
5楼#
发布于:2002-12-13 15:42
我现在不做判断,改成 NdisDprAcquireSpinLock 就行了,我想知道为什么?
mikeluo,一个函数只能运行在比它的 IRQL 低的环境中吗? |
|
6楼#
发布于:2002-12-13 15:43
还有一个问题,我在 PtOpenAdapterComplete 中调用 NdisRequest 出现蓝屏,我这样:
KeRaiseIrql( DISPATCH_LEVEL, &OldIRQL ); NdisRequest( &Status, pAdapt->BindingHandle, &Request ); KeLowerIrql( OldIRQL ); 结果还是蓝屏,我该怎么做? |
|
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 帮忙检查一下,谢谢!!! |
|
8楼#
发布于:2002-12-16 17:34
mikeluo 帮忙啊,谢谢!
|
|
9楼#
发布于:2002-12-16 17:43
不好意思:),现在的问题是这个,谢谢 nicol
还有一个问题,我在 PtOpenAdapterComplete 中调用 NdisRequest 出现蓝屏 |
|
10楼#
发布于:2002-12-16 18:22
在 ADAPT 结构中声明为 NDIS_STATUS Status;
|
|
11楼#
发布于:2002-12-16 21:15
哦,我还以为你问的是 Request:)
是这样声明的: NDIS_STATUS Status; |
|
12楼#
发布于:2002-12-16 21:17
mikeluo,我专门开了一个帖子讨论,我把这个帖子结了,咱们在那里说好吗?
http://www.driverdevelop.com/forum/html_29964.html?1040044613 |
|