Tesla.Angela 发表于 2015-5-20 18:28:40

[源码]更正《WIN64驱动编程基础教程》里关于枚举驱动的错误

在教程里讲到隐藏驱动的部分,有一个在驱动里通过双向链表枚举出系统所有驱动的代码。

但在枚举结果中,总有一个信息不正确。这就是经典的“链表少一个问题”(『寂寞№梧桐』语)。

于是更正后的代码如下:**** Hidden Message *****

lichao890427 发表于 2015-5-21 00:52:10

输出驱动全链表的方法:

//这里字节对齐要采用默认,不要按1对齐,这样才符合32位和64位结构体
typedef struct _LDR_DATA_TABLE_ENTRY
{
        LIST_ENTRY InLoadOrderLinks;
        LIST_ENTRY InMemoryOrderLinks;
        LIST_ENTRY InInitializationOrderLinks;
        PVOID DllBase;
        PVOID EntryPoint;
        ULONG SizeOfImage;
        UNICODE_STRING FullDllName;
        UNICODE_STRING BaseDllName;
        ULONG Flags;
        USHORT LoadCount;
        USHORT TlsIndex;
        union
        {
                LIST_ENTRY HashLinks;
                struct
                {
                        PVOID SectionPointer;
                        ULONG CheckSum;
                };
        };
        union
        {
                struct
                {
                        ULONG TimeDateStamp;
                };
                struct
                {
                        PVOID LoadedImports;
                };
        };
        struct _ACTIVATION_CONTEXT * EntryPointActivationContext;
        PVOID PatchInformation;
} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;

extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString)
{
        PLDR_DATA_TABLE_ENTRY Begin = (PLDR_DATA_TABLE_ENTRY)pDriverObj->DriverSection;
        PLIST_ENTRY Head = (PLIST_ENTRY)Begin->InLoadOrderLinks.Flink;
        PLIST_ENTRY Next = Head->Flink;
        do
        {
                PLDR_DATA_TABLE_ENTRY Entry = CONTAINING_RECORD(Next, LDR_DATA_TABLE_ENTRY, InLoadOrderLinks);
                Next = Next->Flink;
                KdPrint(("%wZ\n",&Entry->FullDllName));
        } while (Next != Head->Flink);

        return STATUS_SUCCESS;
}

按照微软的写法,自己实现了一次,在xp 32位 64位 和win7 32下测试通过

lichao890427 发表于 2015-5-20 18:37:21

look

icqw 发表于 2015-5-20 18:39:40

多谢分享

irooky 发表于 2015-5-20 19:38:36

lokk

andylau004 发表于 2015-5-20 19:49:23

学习下,,,,

陌路人 发表于 2015-5-20 20:44:28

看看怎么回事

laomaotx 发表于 2015-5-20 22:07:59

这得看看!!!

578052137 发表于 2015-5-20 23:30:41

看看,学习了

rkq1991 发表于 2015-5-21 18:03:11

TA大大更正教程了。。。学习一下

upring 发表于 2015-5-21 23:55:54

两位大侠都很给力

donydh 发表于 2015-5-22 02:10:40

看看,学习下

hapon 发表于 2015-5-25 03:15:59

如果您要查看本帖隐藏内容请回复

luqi_44 发表于 2015-5-31 17:45:37

看看

xiangyan_555 发表于 2015-6-3 13:44:03

还真没发现呢。。。。。。

xiaomo 发表于 2015-8-7 15:16:49

这个得看看学习下了

kz丶cn 发表于 2015-8-8 18:58:51

这个不错 支持

longxjh 发表于 2015-8-12 21:37:12

过来学习一下

446989572 发表于 2015-8-21 21:04:57

好吧。。。我使用的时候并没有注意到。。。

绿林科技 发表于 2015-8-23 19:59:58

谢谢大神

YOUBADBAD 发表于 2015-12-30 13:34:23

多谢分享

gmhzxy 发表于 2016-1-4 19:46:17

谢谢TA的分享

lily2997 发表于 2016-1-15 23:48:14

看过老大教程,竟然没发现~

hanhaochi 发表于 2016-1-19 18:57:47

我来学习的,正在看教程

alex 发表于 2016-1-27 18:31:51

教程 ForceProcMemRW也有问题,我已在kernelmode.info PM 楼主(m5home?)亦发帖询问 http://www.kernelmode.info/forum/viewtopic.php?f=14&t=3329

safeho 发表于 2016-1-30 21:09:58

学习下

860000023 发表于 2016-4-28 16:43:54

看看学习

her23ding 发表于 2016-5-24 12:25:08

学习学习

jyw0113 发表于 2016-6-27 15:11:08

学习下看看

365636633 发表于 2016-6-28 23:04:00

哪里的错误看看

develop2016 发表于 2016-7-9 20:58:58

我看看

jackwsy 发表于 2016-9-4 13:24:44

快快快快快快快快快快
页: [1] 2 3
查看完整版本: [源码]更正《WIN64驱动编程基础教程》里关于枚举驱动的错误