首页
社区
课程
招聘
[求助]内核与应用通信
2019-3-20 23:09 7042

[求助]内核与应用通信

2019-3-20 23:09
7042
最近在学习驱动开发,写内核与应用通信那章发现代码运行不了。出现以下错误。
程序是应用层发送信息给内核层然后返回信息。
小白看windbg显示只知道是中断级别的错误,但怎么修改没有头绪。
恳请有空的大佬指导一二。

1: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

IRQL_GT_ZERO_AT_SYSTEM_SERVICE (4a)
Returning to usermode from a system call at an IRQL > PASSIVE_LEVEL.
Arguments:
Arg1: 87243700, Address of system function (system call routine)
Arg2: 00000002, Current IRQL
Arg3: 00000000, 0
Arg4: 00000000, 0

Debugging Details:
------------------


PROCESS_NAME:  ”(
á.exe

BUGCHECK_STR:  RAISED_IRQL_FAULT

FAULTING_IP: 
+6c0071005f0028
87243700 8bff            mov     edi,edi

DEFAULT_BUCKET_ID:  WIN7_DRIVER_FAULT

CURRENT_IRQL:  2

ANALYSIS_VERSION: 6.3.9600.17237 (debuggers(dbg).140716-0327) x86fre

LAST_CONTROL_TRANSFER:  from 83f00daf to 83e89dfc

STACK_TEXT:  
8a8377fc 83f00daf 00000003 d9423579 00000065 nt!RtlpBreakWithStatusInstruction
8a83784c 83f018ad 00000003 0000001c 00000000 nt!KiBugCheckDebugBreak+0x1c
8a837c10 83e5e015 0000004a 87243700 00000002 nt!KeBugCheck2+0x68b
8a837c10 77d16bb4 0000004a 87243700 00000002 nt!KiServiceExit2+0x218
WARNING: Frame IP not in any known module. Following frames may be wrong.
002cf86c 00000000 00000000 00000000 00000000 0x77d16bb4


STACK_COMMAND:  kb

FOLLOWUP_IP: 
nt!KiServiceExit2+218
83e5e015 0fb68134010000  movzx   eax,byte ptr [ecx+134h]

SYMBOL_STACK_INDEX:  3

SYMBOL_NAME:  nt!KiServiceExit2+218

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: nt

IMAGE_NAME:  ntkrpamp.exe

DEBUG_FLR_IMAGE_TIMESTAMP:  5add18c0

IMAGE_VERSION:  6.1.7601.24117

FAILURE_BUCKET_ID:  RAISED_IRQL_FAULT__(____.exe_nt!KiServiceExit2+218

BUCKET_ID:  RAISED_IRQL_FAULT__(____.exe_nt!KiServiceExit2+218

ANALYSIS_SOURCE:  KM

FAILURE_ID_HASH_STRING:  km:raised_irql_fault__(____.exe_nt!kiserviceexit2+218

FAILURE_ID_HASH:  {10950155-c73a-f936-fafa-5e4e6ba44902}

Followup: MachineOwner
---------


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 53
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
abeyy 2019-3-21 09:36
2
0
Returning to usermode from a system call at an IRQL > PASSIVE_LEVEL.

如果你不懂什么是 IRQL, 建议先弄懂这个, 哪些 API 要求在哪个级别下运行.

另外, 会用谷歌不, 搜 "IRQL_GT_ZERO_AT_SYSTEM_SERVICE"
雪    币: 60
活跃值: (881)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wonderzdh 1 2019-3-21 10:09
3
0
IRQL 全称是  Interrupt Request Level,中断请求级别。
因为CPU运行不是线性的,而是会频繁的中断,你可以认为每时每刻都在发生中断。
中断后需要运行中断处理函数,那么在处理过程中,又发生中断了怎么办?
所以操作系统设计了这个中断级别,高中断级能打断低中断级的代码执行。实际上依赖硬件的中断控制器。
每个微软提供的API都会注明该函数可以运行的中断级别,如果中断级别过高,函数发生异常则无法正常处理,如访问的页面被换出到文件。
这在内核编程中,是最需要隐式考虑的问题。
最后于 2019-3-21 10:12 被wonderzdh编辑 ,原因:
雪    币: 159
活跃值: (80)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
crackJ 1 2019-3-21 10:44
4
0
有可能你之前提升的系统中断级别没有正确的降下来,话说假如只是做数据临界的话建议你还是考虑下fastmutex , 频繁的升降系统中断不安全的同时系统效率也很差
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
PwnAnywhere 2022-12-9 22:21
5
0
KeSetEvent(&g_cwk_event, 0, FALSE);
第三个参数设置为 FALSE
游客
登录 | 注册 方可回帖
返回