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