C++获取进程启动参数_c++ 获取启动参数_ts1011的博客-程序员秘密

技术标签: c/c++  

#include "stdafx.h"
#include <Windows.h>

#include <stdio.h>

#define ProcessBasicInformation 0

typedef struct
{
	USHORT Length;
	USHORT MaximumLength;
	PWSTR  Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

typedef struct
{
	ULONG          AllocationSize;
	ULONG          ActualSize;
	ULONG          Flags;
	ULONG          Unknown1;
	UNICODE_STRING Unknown2;
	HANDLE         InputHandle;
	HANDLE         OutputHandle;
	HANDLE         ErrorHandle;
	UNICODE_STRING CurrentDirectory;
	HANDLE         CurrentDirectoryHandle;
	UNICODE_STRING SearchPaths;
	UNICODE_STRING ApplicationName;
	UNICODE_STRING CommandLine;
	PVOID          EnvironmentBlock;
	ULONG          Unknown[9];
	UNICODE_STRING Unknown3;
	UNICODE_STRING Unknown4;
	UNICODE_STRING Unknown5;
	UNICODE_STRING Unknown6;
} PROCESS_PARAMETERS, *PPROCESS_PARAMETERS;

typedef struct
{
	ULONG               AllocationSize;
	ULONG               Unknown1;
	HINSTANCE           ProcessHinstance;
	PVOID               ListDlls;
	PPROCESS_PARAMETERS ProcessParameters;
	ULONG               Unknown2;
	HANDLE              Heap;
} PEB, *PPEB;

typedef struct
{
	DWORD ExitStatus;
	PPEB  PebBaseAddress;
	DWORD AffinityMask;
	DWORD BasePriority;
	ULONG UniqueProcessId;
	ULONG InheritedFromUniqueProcessId;
}   PROCESS_BASIC_INFORMATION;


typedef LONG (WINAPI *PROCNTQSIP)(HANDLE,UINT,PVOID,ULONG,PULONG);

PROCNTQSIP NtQueryInformationProcess;

BOOL GetProcessCmdLine(DWORD dwPId,__out LPTSTR lpString)
{
	HANDLE                    hProcess;
	PROCESS_BASIC_INFORMATION pbi;
	PEB                       Peb;
	PROCESS_PARAMETERS        ProcParam;
	DWORD                     dwDummy;
	DWORD                     dwSize;
	LPVOID                    lpAddress;

	BOOL RetValue = FALSE;

	//得到进程句柄
	hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,dwPId);
	if (!hProcess)
		goto Ret;
	//获取信息
	if (0!=NtQueryInformationProcess(hProcess,0,(PVOID)&pbi,sizeof(PROCESS_BASIC_INFORMATION),NULL))
		goto Ret;
	if (!ReadProcessMemory(hProcess,pbi.PebBaseAddress,&Peb,sizeof(PEB),&dwDummy))
		goto Ret;
	if (!ReadProcessMemory(hProcess,Peb.ProcessParameters,&ProcParam,sizeof(PROCESS_PARAMETERS),&dwDummy))
		goto Ret;

	lpAddress = ProcParam.CommandLine.Buffer;
	dwSize = ProcParam.CommandLine.Length;

	RetValue = ReadProcessMemory( hProcess,lpAddress,(LPVOID)lpString,dwSize,&dwDummy );
Ret:
	if(hProcess)
		CloseHandle (hProcess);
	return RetValue;
}
int _tmain(int argc, _TCHAR* argv[])
{
	NtQueryInformationProcess = (PROCNTQSIP)GetProcAddress(GetModuleHandle(_T("ntdll")),
		"NtQueryInformationProcess");
	if (!NtQueryInformationProcess)
	{
		//MessageBox(0,"无法定位NtQueryInformationProcess,程序退出","启动错误",MB_ICONERROR);
		return -1;
	}
	TCHAR str[255] = {0};
	GetProcessCmdLine(2816, str);

	return 0;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ts1011/article/details/8968723

智能推荐

EfficientNet图示_efficient的模型_阿芒Aris的博客-程序员秘密

EfficientNet的基本结构和B0至B7的整体结构图示

Java练手项目1:基于RFID的图书仓储管理系统(可做毕设)_基于rfid的图书管理系统毕业设计_JavaToShare的博客-程序员秘密

**一、系统概述**基于RFID的图书仓储管理系统的设计以物联网的三层架构思想为理念,实现了图书仓储的入库、盘点、出库、查询等功能,从图书信息采集到数据传输处理再到数据应用,有效的提高了图书仓储的管理效率,为现代化图书仓储提供了便捷化的管理平台。本系统的设计包括应用层Web端管理软件、传输层C#数据采集中间软件以及感知层RFID硬件阅读器,通过这三个主要的部分,系统完成了数据从感知到应用的有...

ipa代码签名探析_嘎嘎嘎498451的博客-程序员秘密

http://www.objccn.io/issue-17-2/"用户会感激代码签名带来的好处" – Apple Developer Library: Code Signing Guide在 iOS 或 OS X 平台上进行应用开发时,你所需要使用的 API 大多设计得简洁明了。你可以轻易地实现酷炫的动画效果,便捷地进行应用发布前测试,或是用Core Data 将数

Bash Shell初学者 —— 学习笔记_imnujf的博客-程序员秘密

 Tips1:【别坑同事】每个重要、循环、需要人管的脚本开头必写: set -euo pipefail如果不去 set -euo pipefail,脚本中可能有指令失败了,然而脚本运行完毕之后仍然显示成功。调试bash脚本用set -x,这样每个指令开跑之前都会print出来再跑。 Tips2:【相对路径】cd &quot;$(dirname &quot;$0&quot;)&quot;这个命令写在脚本文件...

单、双精度浮点型转换为十六进制方法_浮点数转16进制数计算规则_求上进的小怪兽的博客-程序员秘密

在透传测试时,遇到了数据转换的问题,在此处总结:一、对于字节:一字节(byte)为8bit,数据范围:2^7~-2^7;单精度浮点型为4个字节,双精度浮点型为8个字节;二、单精度浮点型计算4字节(32位)浮点型数据在计算机中表示为:符数(1位表示正负)+阶码(8位)+尾数(23位)1、 符数:0正1负;2.、阶码:8位以2为底,阶码=127+阶码真值(实际的二进制科学计数法指数);3、尾数:23位,隐含1为最高位的后续数值表示,如1.1101,其尾数为1101;(可以直接

RecyclerView 配合 DiffUtil,RecyclerView局部刷新_recyclerview diffresult snake_Android格调小窝的博客-程序员秘密

一个问题:每次从服务器取到数据后,都是调用adapter.notifyDataSetChanged();进行刷新。那局部刷新(adapter.notifyItemChanged();)的这些东西不是白瞎了吗?对性能也不好,还没有动画。怎么办:用DiffUtil吧!号称可以进行局部刷新神器,让你的item 该刷新的地方就刷新,数据没有改变的地方不刷新(DiffUtil 内部调用了的局部刷...

随便推点

Android进阶知识:事件分发与滑动冲突(二)_weixin_33971130的博客-程序员秘密

接着看代码块3,在这段很长的代码里,首先一个if中判断了该事件是否满足没有被拦截和被取消,之后第二个if判断了事件类型是否为DOWN,满足了没有被拦截和取消的DOWN事件,接下来ViewGroup才会循环其子View找到点击事件在其内部并且能够接受该事件的子View,再通过调用dispatchTransformedTouchEvent方法将事件分发给该子View处理,返回tr...

TinyMatrix | HUB75接口LED点阵控制器的设计_槿良的博客-程序员秘密

0. 前言工具箱里有块闲置的Led点阵板,于是便想折腾起来让其绽放色彩。HUB75是全彩LED显示屏最常见的接口,但很难找到标准通信协议。经历一番探索调试,将其记录于此文。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CgkO15WY-1638079861032)(如何制作一个HUB75接口的Led Matrix点阵控制器.assets/Tiny Matrix.png)]1. 硬件篇1.1. HUB75接口定义Led点阵板的HUB75接口,一般以DC3-16P牛

C语言中的移位运算_c语言移位运算_奋斗的☞小鸟的博客-程序员秘密

移位运算移位运算包括左移和右移左移运算:x&amp;amp;lt;&amp;amp;lt;k:x左移k位,并在右端补零。右移运算:逻辑右移:x&amp;amp;gt;&amp;amp;gt;k:x右移k位,并在左端补零。算术右移:x&amp;amp;gt;&amp;amp;gt;k:x右移k位,并在左端补最高有效位的值。下表为对一个8位参数x的两个不同的值做不同的一位操作得到的结果:操作值参数x[01100011] [10010101]x&amp;amp;l

Android面试超详细知识点!音视频学习指南来咯,大厂内部资料_A小小开发者的博客-程序员秘密

导语本部分内容是关于Android进阶的一些知识总结,涉及到的知识点比较杂,不过都是面试中几乎常问的知识点,也是加分的点。关于这部分内容,可能需要有一些具体的项目实践。在面试的过程中,结合具体自身实践经历,才能更加深入透彻的描绘出来。面试官思路:绝大多数的面试官都经历过你现在的这个阶段,所以他们对于应聘者的心理和准备都有所了解。“知己知彼,百战百胜”。这也是为什么会被面试官虐的体无完肤的原因。每个面试官都有自己的面试思路,但大体的面试思路大部分分为以下三点:**1、区分度高:**通过回答,可以很

推荐文章

热门文章

相关标签