找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5470|回复: 6

关于TA大大的x64基础教程2-7的某个函数遇到的问题

[复制链接]

3

主题

55

回帖

0

精华

铂金会员

积分
2015
发表于 2016-5-3 14:20:46 | 显示全部楼层 |阅读模式
编译环境VS2010 WDK17600,
//枚举指定进程的模块
VOID EnumModule(PEPROCESS Process)
{
        SIZE_T        Peb = 0;
        SIZE_T        Ldr = 0;
        PLIST_ENTRY         ModListHead = 0;
        PLIST_ENTRY  Module = 0;
        ANSI_STRING         AnsiString;
        KAPC_STATE         ks;

        //EPROCESS地址无效则退出
        if(!MmIsAddressValid(Process))
                return;
        //获取PEB地址
        Peb = (SIZE_T)PsGetProcessPeb(Process);
        //PEB地址无效则退出
        if(!Peb)
                return;
        //依附进程
        KeStackAttachProcess(Process,&ks);
        __try
        {
                //获得LDR地址
                Ldr = Peb + (SIZE_T)LdrInPebOffset;
                //测试是否可读,不可读则抛出异常退出
                ProbeForRead((CONST PVOID)Ldr,8,8);
                //获得链表头
                ModListHead = (PLIST_ENTRY)(*(PULONG64)Ldr+ModListInPebOffset);
                //再次测试可读性
                ProbeForRead((CONST PVOID)ModListHead,8,8);
                //获得第一个模块的信息
                Module = ModListHead->Flink;
                while(ModListHead !=Module)
                {
                        //打印信息:基址、大小、DLL路径
                        DbgPrint("[MODULE]Base=%p Size=%ld Path=%wZ\n",(PVOID)(((PLDR_DATA_TABLE_ENTRY)Module)->DllBase),
                                                                                                                        (ULONG)(((PLDR_DATA_TABLE_ENTRY)Module)->SizeOfImage),
                                                                                                                        &(((PLDR_DATA_TABLE_ENTRY)Module)->FullDllName));
                        Module = Module->Flink;
                        //测试下一个模块信息的可读性
                        ProbeForRead((CONST PVOID)Module,80,8);
                }
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
                DbgPrint("[EnumModule]__except (EXCEPTION_EXECUTE_HANDLER)");
        }
        //取消依附进程
        KeUnstackDetachProcess(&ks);
}
编译的时候 这个函数有出现一个小问题,就是不屏蔽掉KeStackAttachProcess(Process,&ks)和KeUnstackDetachProcess(&ks);
编译出来的驱动,在启动的时候会出现 打开服务失败,错误码是2,提示系统找不到指定文件。如果他这两个函数屏蔽掉,驱动就可以正常的安装和启动。请问一下有没有同学遇到跟我一样的问题,需要怎么解决。。。。。

3

主题

55

回帖

0

精华

铂金会员

积分
2015
 楼主| 发表于 2016-5-4 11:28:49 来自手机 | 显示全部楼层
论坛没人能帮新手么

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2016-5-4 17:59:26 | 显示全部楼层
无言以对。。。只能建议你好好检查代码。

3

主题

55

回帖

0

精华

铂金会员

积分
2015
 楼主| 发表于 2016-5-5 00:11:14 | 显示全部楼层
TA大大,我开始也是以为代码敲得有问题,后面是直接复制你的代码到我工程里面,发现问题还是一样。但是我用wdk直接build出来的驱动又是正常的。新手学驱动发现真的好多莫名奇妙的问题出现。去百度吧,百度不出个原因出来,一堆转来转去的帖子。同样的东西。现在学起来真的很吃力额。

3

主题

55

回帖

0

精华

铂金会员

积分
2015
 楼主| 发表于 2016-5-5 00:13:56 | 显示全部楼层
Tesla.Angela 发表于 2016-5-4 17:59
无言以对。。。只能建议你好好检查代码。

TA大大,我开始也是以为代码敲得有问题,后面是直接复制你的代码到我工程里面,发现问题还是一样。但是我用wdk直接build出来的驱动又是正常的。新手学驱动发现真的好多莫名奇妙的问题出现。去百度吧,百度不出个原因出来,一堆转来转去的帖子。同样的东西。现在学起来真的很吃力额。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2016-5-6 22:54:48 | 显示全部楼层
860000023 发表于 2016-5-5 00:13
TA大大,我开始也是以为代码敲得有问题,后面是直接复制你的代码到我工程里面,发现问题还是一样。但是我用wdk直接build出来的驱动又是正常的 ...
那你以后直接用WDK来BUILD即可。

3

主题

55

回帖

0

精华

铂金会员

积分
2015
 楼主| 发表于 2016-5-20 00:47:17 来自手机 | 显示全部楼层
问题又来了多个文件编译,wdk好像需要.rc文件,另外,我的这个问题已经解决,现在分享一下解决的办法,经过我个人的n次尝试得出编译环境里需要把内存安全检测去掉,驱动就正常加载并启动了。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表