首页
社区
课程
招聘
[注意]win7下这段代码会让你蓝得毁三观
发表于: 2013-3-12 10:41 8061

[注意]win7下这段代码会让你蓝得毁三观

2013-3-12 10:41
8061
typedef VOID (__fastcall* RcExAcquireFastMutex )(__inout PFAST_MUTEX fastMutex);

UNICODE_STRING                dstString;
RtlInitUnicodeString(&dstString, L"ExAcquireFastMutex");

RcExAcquireFastMutex CallExAcquireFastMutex = (RcExAcquireFastMutex)MmGetSystemRoutineAddress(&dstString);

if ( CallExAcquireFastMutex  )
{
        // 初始化fastMutex
        CallExAcquireFastMutex(fastMutex);
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 297
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼下给解释一下=。=
2013-3-12 10:47
0
雪    币: 1753
活跃值: (885)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
如果你获取的这个快速互斥体被其他线程占用~~
不加判断直接获取~~恐怕~~是会BSOD
2013-3-12 11:24
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
4
是你自己代码哪里写错了吧?
看一下bsod的堆栈信息以及show你的完整代码

ExAcquireFastMutex puts the caller into a wait state if the given fast mutex cannot be acquired immediately. Otherwise, the caller is given ownership of the fast mutex with APCs to the current thread disabled until it releases the fast mutex.
Use ExTryToAcquireFastMutex if the current thread can do other work before it waits on the acquisition of the given mutex.

我看WRK里面也是这样用的啊
FAST_MUTEX KiGenericCallDpcMutex;

ExInitializeFastMutex(&KiGenericCallDpcMutex);

ExAcquireFastMutex(&KiGenericCallDpcMutex);
xxxx
ExReleaseFastMutex(&KiGenericCallDpcMutex);
2013-3-12 11:51
0
雪    币: 1753
活跃值: (885)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
可以用该函数判断当前是否可以获取互斥体ExTryToAcquireFastMutex()
如果返回值为TRUE,表示已经占用该互斥体。如果为FALSE,表明该互斥已经被其他线程占用
2013-3-12 11:55
0
雪    币: 535
活跃值: (245)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
6
问题不在代码, 你可以试一下, 在win7下MmGetSystemRoutineAddress获取这个函数(以及其他几个函数)时没有做导出转向, 导致获取的地址是错误的

当然 如果你只是静态引用方式调用的话 没有任何错误
2013-3-12 12:17
0
雪    币: 535
活跃值: (245)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
7
问题不在代码, 你可以试一下, 在win7下MmGetSystemRoutineAddress获取这个函数(以及其他几个函数)时没有做导出转向, 导致获取的地址是错误的

当然 如果你只是静态引用方式调用的话 没有任何错误
2013-3-12 12:17
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
8
win7应该是ExiAcquireFastMutex

上传的附件:
2013-3-12 15:11
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=cvcvxk;1152061]win7应该是ExiAcquireFastMutex

[/QUOTE]

太强大了,猛抽了楼主~~~
2013-3-12 16:45
0
雪    币: 535
活跃值: (245)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
10
不去实际操作一下, 光靠意淫是不会有进步的, 骚年
2013-3-12 16:52
0
雪    币: 143
活跃值: (263)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
11
mark 学习一个
2013-3-13 07:55
0
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
几年前就发现这个问题了,微软的MmGetSystemRoutineAddress->MiFindExportedRoutineByName解析导出表有问题,如果写的函数名字不对劲会BSOD

微软很阴险的,这个函数的内核自己搞导入表的时候是不会用的,他自己用的那套没问题
2013-3-13 17:18
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
13
这个问题貌似当年在某个洗澡按摩吃饭流程里听MJ说过~~
2013-3-14 09:24
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
14
牛人都是自己写GetProcAddress的吧,不需要用MS提供的
2013-3-16 17:53
0
雪    币: 228
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
没注意过,冷汗!
2013-3-23 10:59
0
游客
登录 | 注册 方可回帖
返回
//