
#include <ntifsh>
VOID
Unload(
IN PDRIVER_OBJECT DriverObject
);
VOID GetAllProcess(ULONG Address);
NTSTATUS
DriverEntry( IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath )
{
NTSTATUS status = STATUS_SUCCESS;
ULONG Address;
ULONG oldAddress;
//得到当前进程的地址
Address = (ULONG)PsGetCurrentProcess();
//得到EPROCESS中链表的偏移
Address += 0x88;
//用oldAddress保存当前进程链表的地址
oldAddress = Address;
//遍历进程链表
do
{
GetAllProcess(Address);
//让Address指向当前链表的下一个进程链表的地址(注意是Flink)
Address = (ULONG)Address;
}while( oldAddress!=Address );//当得到的链表地址与保存的地址相等说明遍历完整个线程链表,返回
DriverObject->DriverUnload = Unload;
return status;
}
VOID
Unload(
IN PDRIVER_OBJECT DriverObject
)
{
}
VOID GetAllProcess(ULONG Address)
{
//得到对应的EPROCESS结构
Address -= 0x88;
//EPROCESS偏移0x174为ImageFileName(进程名)
DbgPrint("ProcessName %s \n",(char)Address+0x174);
//EPROCESS偏移0x18为页目录物理地址
DbgPrint("Process Context %d \n",(ULONG)(Address+0x18));
}
请参考java API
public BufferedInputStream(InputStream in,
int size)创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个长度为 size 的内部缓冲区数组并将其存储在 buf 中。
参数:
in - 底层输入流。
size - 缓冲区大小。
抛出:
IllegalArgumentException - 如果 size <= 0
VC
获取进程线程数
#include
void
EnumProcess(void)
{
HANDLE
hProcessSnap;
HANDLE
hProcess;
PROCESSENTRY32
pe32;
DWORD
dwPriorityClass;
hProcessSnap
=
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,
0);
if
(hProcessSnap
==
INVALID_HANDLE_VALUE)
{
return;
}
pe32dwSize
=
sizeof(PROCESSENTRY32);
if
(!Process32First(hProcessSnap,
&pe32))
{
CloseHandle(hProcessSnap);
return;
}
do
{
//printf("%s",
pe32szExeFile);
//完整文件名
//printf("%d",
(int)pe32cntThreads);//线程数
}while(Process32Next(hProcessSnap,
&pe32));
CloseHandle(hProcessSnap);
}
如果要获取进程句柄
HANDLE
hProcessHandle;
hProcessHandle
=
OpenProcess(0x1F0FFF,
true,
ProcessID);//ProcessID进程ID
这个在控制台,Win32
SDK
,MFC
都可以用的,只不过
SDK
,MFC
输出就
不用
printf
了,只要把获取的内容赋给变量就行了
以上就是关于c++进程遍历全部的内容,包括:c++进程遍历、java 获取process返回值的指定部分、用VC++编写程序,像任务管理器那样获得某个进程的句柄数,和线程数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)