[源码]更正《WIN64驱动编程基础教程》里关于枚举驱动的错误
在教程里讲到隐藏驱动的部分,有一个在驱动里通过双向链表枚举出系统所有驱动的代码。但在枚举结果中,总有一个信息不正确。这就是经典的“链表少一个问题”(『寂寞№梧桐』语)。
于是更正后的代码如下:**** Hidden Message ***** 输出驱动全链表的方法:
//这里字节对齐要采用默认,不要按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下测试通过
look 多谢分享 lokk 学习下,,,, 看看怎么回事
这得看看!!! 看看,学习了 TA大大更正教程了。。。学习一下 两位大侠都很给力 看看,学习下 如果您要查看本帖隐藏内容请回复
看看 还真没发现呢。。。。。。 这个得看看学习下了 这个不错 支持 过来学习一下 好吧。。。我使用的时候并没有注意到。。。 谢谢大神 多谢分享 谢谢TA的分享 看过老大教程,竟然没发现~ 我来学习的,正在看教程 教程 ForceProcMemRW也有问题,我已在kernelmode.info PM 楼主(m5home?)亦发帖询问 http://www.kernelmode.info/forum/viewtopic.php?f=14&t=3329 学习下 看看学习 学习学习 学习下看看 哪里的错误看看
我看看 快快快快快快快快快快