C++ 获取其它进程命令行参数
2015-12-11 11:50
483 查看
wintenl.h
下载地址
下载地址
#include "stdafx.h" #include "winternl.h" typedef NTSTATUS (WINAPI *NtQueryInformationProcessFake)(HANDLE, DWORD, PVOID, ULONG, PULONG); NtQueryInformationProcessFake ntQ = NULL; void getProcCMD(DWORD pid) { HANDLE hproc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid ); if (INVALID_HANDLE_VALUE != hproc){ HANDLE hnewdup = NULL; PEB peb; RTL_USER_PROCESS_PARAMETERS upps; WCHAR buffer[MAX_PATH] = {NULL}; HMODULE hm = LoadLibrary(_T("Ntdll.dll")); ntQ = (NtQueryInformationProcessFake)GetProcAddress(hm, "NtQueryInformationProcess"); if ( DuplicateHandle(GetCurrentProcess(), hproc, GetCurrentProcess(), &hnewdup, 0, FALSE, DUPLICATE_SAME_ACCESS) ) { PROCESS_BASIC_INFORMATION pbi; NTSTATUS isok = ntQ(hnewdup, 0/*ProcessBasicInformation*/, (PVOID)&pbi, sizeof(PROCESS_BASIC_INFORMATION), 0); if (BCRYPT_SUCCESS(isok)) { if ( ReadProcessMemory(hnewdup, pbi.PebBaseAddress, &peb, sizeof(PEB), 0) ) if ( ReadProcessMemory(hnewdup, peb.ProcessParameters, &upps, sizeof(RTL_USER_PROCESS_PARAMETERS), 0) ) { WCHAR *buffer = new WCHAR[upps.CommandLine.Length + 1]; ZeroMemory(buffer, (upps.CommandLine.Length + 1) * sizeof(WCHAR)); ReadProcessMemory(hnewdup, upps.CommandLine.Buffer, buffer, upps.CommandLine.Length, 0); delete buffer; } } CloseHandle(hnewdup); } CloseHandle(hproc); } }
相关文章推荐
- C++学习笔记(初级篇)——常用的预编译指令
- 新秀系列C/C++经典问题(四)
- C语言 与结构体相关 函数 指针 数组
- C++: 多态 虚函数
- c++ 面向切面变成 aop 通用模板
- c++11 计时器
- Learn note(cpp): take care when use new in a code block.
- C++实现自顶向下的归并排序算法
- CPP 6th——类(6)
- C语言词法及语法定义-ANTLR
- Loadrunner C语言脚本常用函数总结
- C#调用C++dll文件获取数据得到乱码的解决方法
- C++实现自底向上的归并排序算法
- C++学习
- 交换两个数的值(C语言)的两种方法
- C++中 explicit的用法
- C++类构造函数初始化列表
- C++运算符重载
- HDU 1176 非倒序 动态规划写法 望指教
- C指针声明解读之左右法则