通过ntdll.dll提供的API函数实现当前进程的枚举

原创 2013年12月04日 10:13:25

这种枚举的方法是通过ntdll.dll提供的API函数ZwQuery?SystemInformation()来实现,此方法比前面所提供的方法复杂一些,

下面提供实际的代码如下:

#include <windows.h>
#include <ntsecapi.h>
#include <stdio.h>
typedef DWORD (WINAPI *ZWQUERYSYSTEMINFORMATION) (DWORD,PVOID,DWORD,PDWORD);
typedef struct _SYSTEM_PROCESS_INFORMATION{
	DWORD NextEntryDelta;
	DWORD ThreadCount;
	DWORD Reserved[6];
	FILETIME ftCreateTime;
	FILETIME ftUserTime;
	UNICODE_STRING ProcessName;
	DWORD BasePriority;
	DWORD ProcessID;
	DWORD InheritedFromProcessID;
	DWORD HandleCount;
	DWORD Reserved2[2];
	DWORD VmCounters;
	DWORD dCommitCharge;
	PVOID ThreadInfos[1];
}SYSTEM_PROCESS_INFORMATION,* PSYSTEM_PROCESS_INFORMATION;
#define SystemProcessesAndThreadsInformation 5
void main()
{
	HMODULE hNtDLL=GetModuleHandle("ntdll.dll");
	if(!hNtDLL)
		return;
	ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation=(ZWQUERYSYSTEMINFORMATION)GetProcAddress(
																			hNtDLL,"ZwQuerySystemInformation");
	ULONG cbBuffer=0x10000; // 设置缓冲区的大小,与系统有关
	LPVOID pBuffer=NULL;
	pBuffer=malloc(cbBuffer);
	if(pBuffer==NULL)
		return;
	ZwQuerySystemInformation(SystemProcessesAndThreadsInformation,pBuffer,cbBuffer,NULL);
	PSYSTEM_PROCESS_INFORMATION  pInfo=(PSYSTEM_PROCESS_INFORMATION)pBuffer;
	for(;;)
	{
		printf("ProcessID: %d (%ls) \n",pInfo->ProcessID,pInfo->ProcessName.Buffer);
		if(pInfo->NextEntryDelta ==0)
			break;
		// 查找下一个进程结构地址
		pInfo=(PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)pInfo)+pInfo->NextEntryDelta);
	}
	free(pBuffer);
}

但是运行的时候程序根本就起不来
版权声明:开放

ntdll.dll学习总结

ntdll.dll ntdll.dll描述了windows本地NTAPI的接口。是重要的Windows NT内核级文件。当Windows启动时,ntdll.dll就 驻留在内存中特定的写保护区域,...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年10月16日 00:37
  • 3483

在应用层使用ntdll.dll中的未导出函数

// Test.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" typedef NTSTATUS (NTAPI* NTCREATEFILE)( OUT ...
  • fengkuangfj
  • fengkuangfj
  • 2014年06月05日 18:34
  • 1997

NTDLL.dll5 : 导出函数表

================================================== Function Name     : __isascii Address          ...
  • zhou191954
  • zhou191954
  • 2014年07月29日 10:55
  • 1020

NTDLL.dll6 : 导出函数原型

代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.c...
  • zhou191954
  • zhou191954
  • 2014年07月31日 13:46
  • 797

R3下猥琐NTDLL钩子

链 接: http://bbs.pediy.com/showthread.php?t=163658 在R3下对NTDLL里面的Zw函数的HOOK 大部分都是在函数前几个字节做HO...
  • cqyczj
  • cqyczj
  • 2014年04月25日 07:21
  • 583

在Ring0下HOOK Ntdll.dll的Nt*函数的方法

typedef struct _SECTION_IMAGE_INFORMATION { PVOID EntryPoint; ULONG StackZeroBits; ULONG StackR...
  • u011653354
  • u011653354
  • 2013年08月13日 09:39
  • 1467

内核分析PE获取DLL导出函数地址

环境:VS2012+WIN8 64 类型:C++编写的WDM驱动程序 测试:VM WIN7 用途:主要用于驱动程序中得到WIN32 API地址,也可得到自定义的DLL中的函数导出地址...
  • nanhaizhixin
  • nanhaizhixin
  • 2014年09月29日 12:36
  • 1777

得到DLL中的指定函数地址

//HelloWDM.h #ifndef _PE_H_ #define _PE_H_ #pragma once typedef unsigned short WORD; typedef unsign...
  • qq125096885
  • qq125096885
  • 2016年06月27日 14:43
  • 1098

vs+opencv 使用过程中所遇问题记录 day1

tips
  • u012422524
  • u012422524
  • 2016年06月16日 10:47
  • 1137

C/C++ Windows API——枚举进程、结束进程及提升权限

// EnumProcessDemo.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include #include //CreateToolhelp32S...
  • chy555chy
  • chy555chy
  • 2016年10月21日 16:27
  • 1882
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过ntdll.dll提供的API函数实现当前进程的枚举
举报原因:
原因补充:

(最多只允许输入30个字)