找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 183|回复: 0

【驱动笔记7】再谈ZwQuerySystemInformation

[复制链接]

210

主题

371

回帖

0

积分

管理员

积分
0
发表于 2013-10-16 12:10:21 | 显示全部楼层 |阅读模式
此前在“【科普6】利用NTDLL导出函数枚举进程”一文中我们曾经介绍了在ring3通过动态导出ntdll.dll中的ZwQuerySystemInformation函数来枚举系统进程,那么在ring0能否调用该函数呢?
    当然可以,而且在ring0调用会比在ring3更加简单,这样说来我们直接把ring3的代码复制到ring0就可以了?事实证明没有这么简单。
    因为这个函数属于未公开文档的函数,所以我们还是不能直接使用的,难道还要像在ring3一样,调用LoadLibrary和GetProcAddress从ntdll.dll中导出?靠,那和ring3还有什么区别?
    事实上,在ring0调用未公开文档函数是很容易的,只要在代码的开始声明一下就可以了,注意要这样声明:
NTKERNELAPI
NTSTATUS ZwQuerySystemInformation(
IN ULONG SystemInformationClass,
IN OUT PVOID SystemInformation,
IN ULONG SystemInformationLength,
OUT PULONG ReturnLength OPTIONAL
);
注意这里的开头使用了一个NTKERNELAPI,这个宏我不知道是干啥的,就到几个群里问了一下,得到了答案,它是在winddk.h这个头文件中声明的,如下:
#if (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_)) && !defined(_BLDR_)
#define NTKERNELAPI DECLSPEC_IMPORT // wdm
#else
#define NTKERNELAPI
#endif
这个我还真不敢准确地说是干啥用的,经验不够,不敢乱发言,反正就这么用着行了,有大牛路过的时候麻烦给俺们科普一下,扫下盲~~~
函数照上面的方法声明之后就可以直接用了,如下是我的代码,基本和ring3没多大区别:
//////////////////////////////////////////////////////////////////////////
//
// 使用ZwQuerySystemInformation函数枚举进程
//
//////////////////////////////////////////////////////////////////////////
VOID
EnumProcessList1()
{
ULONG cbBuffer = 0x10000;
ULONG dwCount = 0;
PVOID pBuffer = NULL;
PSYSTEM_PROCESS_INFORMATION pInfo;
pBuffer = ExAllocatePool(PagedPool, cbBuffer);
// 获取进程信息
KdPrint(("We Use ZwQuerySystemInformation!"));
ZwQuerySystemInformation( SystemProcessesAndThreadsInformation,
pBuffer,
cbBuffer,
NULL);
pInfo = (PSYSTEM_PROCESS_INFORMATION)pBuffer;
for( ; ; )
{
dwCount++;
if (pInfo->rocessId == 0)
{
KdPrint(("[%6d] System Idle Process", pInfo->rocessId));
}
else
{
KdPrint(("[%6d] %wZ", pInfo->rocessId, pInfo->rocessName));
}
if (pInfo->NextEntryDelta == 0)
{
break;
}
pInfo = (PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)pInfo) + pInfo->NextEntryDelta);
}
KdPrint(("rocessCount = %d", dwCount));
ExFreePool(pBuffer);
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 03:25 , Processed in 0.230640 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

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