首页
社区
课程
招聘
[求助]求证ObReferenceObjectByName函数增加引用的对象
发表于: 2010-1-21 21:33 6112

[求助]求证ObReferenceObjectByName函数增加引用的对象

2010-1-21 21:33
6112
#define KBD_DRIVER_NAME  L"\\Driver\\Kbdclass"
RtlInitUnicodeString(&uniNtNameString, KBD_DRIVER_NAME);   
status = ObReferenceObjectByName (
        &uniNtNameString,
        OBJ_CASE_INSENSITIVE,
        NULL,
        0,
        IoDriverObjectType,
        KernelMode,
        NULL,
        &KbdDriverObject
        );
    // 如果失败了就直接返回
    if(!NT_SUCCESS(status))
    {
        KdPrint(("MyAttach: Couldn't get the MyTest Device Object\n"));
        return( status );
    }
    else
    {
        // 这个打开需要解应用。早点解除了免得之后忘记。
        ObDereferenceObject(DriverObject);
    }

这是寒江独钓里面的源代码,按照它的写法,ObReferenceObjectByName是增加了当前驱动对象的引用计数,而不是KbdDriverObject 所指向的驱动对象.我觉得它这里写错了,误导偶,应该是增加KbdDriverObject 所指向的驱动对象的引用计数吧
后面编程发现...连续2次使用ObReferenceObjectByName后,第3次的ObDereferenceObject(DriverObject)必蓝屏了...才突然想到这点..求证求证錒

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 8142
活跃值: (2731)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
嗯。。支持。。。ObXXXX系列的函数 再解析对象的时候总喜欢给目标增加引用计数。所以需要递减。而不是给自己递减。递减自己的时候次数多了。成0的时候就销毁了。而你这时候还再运行代码。那肯定蓝了。呵呵。
2010-1-21 22:53
0
雪    币: 75
活跃值: (688)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
我想也是,,,多谢楼上錒
2010-1-21 23:57
0
雪    币: 200
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也看到这地方发现了这问题,结果一goo,就gle到这里来了 囧
2010-4-21 22:51
0
雪    币: 106
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
晕,根本就是作者笔误。
如果在内核分配一个shellcode,用系统线程运行之,哪里有所谓的“当前驱动”,难道这就不能调用ObReferenceObjectByName了?
成功后立刻解引用KbdDriverObject,是因为KbdDriverObject是常驻内存的,不用担心指针无效。
2010-4-21 23:13
0
游客
登录 | 注册 方可回帖
返回
//