CreateProcess函数介绍

BOOL CreateProcessA(
LPCSTR lpApplicationName, //可执行文件的名称完整的路径+程序名字)
LPSTR lpCommandLine, //指定了要传递给执行模块的参数
LPSECURITY_ATTRIBUTES lpProcessAttributes, //进程安全性
LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全性
BOOL bInheritHandles, //指定了当前进程中可继承句柄是否可被新进程继承
DWORD dwCreationFlags, //指定进程优先级和其它创建标志
LPVOID lpEnvironment, //指定新进程使用的环境变量
LPCSTR lpCurrentDirectory, //新进程使用的当前目录
LPSTARTUPINFOA lpStartupInfo, //指定新进程中主窗口的位置、大小和标准句柄等
LPPROCESS_INFORMATION lpProcessInformation //返回新建进程的标志信息,如ID号、句柄等
); typedef struct _STARTUPINFO {
DWORD cb; //本结构的长度
LPTSTR lpReserved; //保留字段
LPTSTR lpDesktop; //指定一个字符串,包括该进程的桌面名或窗口位置名
LPTSTR lpTitle; //指定控制台进程创建的新控制台窗口标题
DWORD dwX; //指定新窗口的左上角的 x 和 y 的偏移量(以像素为单位)
DWORD dwY;
DWORD dwXSize; //指定新窗口的宽度和高度
DWORD dwYSize;
DWORD dwXCountChars; //指定新窗口的屏幕缓冲区宽度和高度
DWORD dwYCountChars;
DWORD dwFillAttribute; //指定新窗口的初始文字和背景颜色
DWORD dwFlags; //创建窗口标志
WORD wShowWindow; //新窗口显示状态
WORD cbReserved2; //保留,必须为0
LPBYTE lpReserved2; //保留,必须为NULL
HANDLE hStdInput; //指定一个句柄,该句柄用作进程的标准输入句柄
HANDLE hStdOutput; //指定一个句柄,改句柄作为进程的标准输出句柄
HANDLE hStdError; //指定一个句柄,该句柄用作进程的标准错误句柄
} STARTUPINFO, *LPSTARTUPINFO; typedef struct _PROCESS_INFORMATION {
HANDLE hProcess; //进程句柄
HANDLE hThread; //线程句柄
DWORD dwProcessId; //进程id
DWORD dwThreadId; //线程id
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;

什么是命令行?

#include <stdio.h>

int main(int argc, char* argv[])
{
printf("%s - %s", argv[0], argv[1]);
return 0;
}

说明把参数传了进去,这就是命令行

创建新的控制台 :

CreateProcess(
NULL,
TEXT("cmd"),
NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi);

创建非控制台进程 :

CreateProcess(NULL,
"notepad.exe",
NULL,
NULL,
FALSE,
NULL,
NULL,
NULL,
&si,
&pi);

创建自定义程序的进程 :

CreateProcess(
NULL,
"child.exe",
NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE, ////指定进程优先级和其它创建标志
NULL,
NULL,
&si,
&pi);

创建进程

#include <stdio.h>
#include <windows.h> BOOL CreateChildProcess(PTCHAR szChildProcessName, PTCHAR szCommandLine)
{
STARTUPINFO si;
PROCESS_INFORMATION pi; ZeroMemory(&pi, sizeof(pi));
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si); //创建子进程 返回成功与失败
if (!CreateProcess(
szChildProcessName, //对象名称(完整的路径+exe)
szCommandLine, //命令行
NULL, //不继承进程句柄
NULL, //不继承线程句柄
FALSE, //不继承句柄
0, //没有创建标志
NULL, //使用父进程环境变量
NULL, //使用父进程目录作为当前目录,可以自己设置目录
&si, //STARTUPINFOW结构体详细信息
&pi) //PROCESS_INFOMATION结构体进程信息
)
{
printf("CreateChildProces Error: %d\n", GetLastError());
return FALSE;
}
//打印进程
printf("进程ID:%d\n", pi.dwProcessId);
printf("线程ID:%d\n", pi.dwThreadId);
printf("进程句柄:%d\n", pi.hProcess);
printf("线程句柄:%d\n", pi.hThread); //释放句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return TRUE;
} int main(int argc, char* argv[])
{
TCHAR szApplicationName[] = TEXT("C:/Users/86183/Desktop/shellcode.exe");
//TCHAR szCmdline[] = TEXT("ipconfig");
CreateChildProcess(szApplicationName, NULL); getchar();
return 0;
}

Win32之创建进程的更多相关文章

  1. Win32 OpenProcess打开进程失败,返回5无权限操作

    Win32 OpenProcess打开进程失败,返回5无权限操作,相信你会碰到这样的事,在IDE中可以,单独却不可以了,其实这时就需要提权了,否则是无法打开的,OpenProcess提权至Debug即 ...

  2. win32进程名查找进程PID

    1. #include <Psapi.h> #pragma comment(lib, "Psapi.lib") DWORD GetProcIDFromName(LPCT ...

  3. linux创建进程fork的方法步骤

    fork创建进程 函数原型如下 #include// 必须引入头文件,使用fork函数的时候,必须包含这个头文件,否则,系统找不到fork函数 pid_t fork(void); //void代表没有 ...

  4. CE创建进程和线程

    创建进程: HWND hWnd = NULL; PROCESS_INFORMATION pi = {}; if(NULL==hWnd) { hWnd=FindWindow(NULL,_T(" ...

  5. Delphi 使用CreateProcess创建进程并弹出进程PID值 (转)

    var  ExeName:PChar;  StartupInfo:TStartupInfo;  ProcessInfo:TProcessInformation;begin  FillChar(Proc ...

  6. 【转载】详解CreateProcess调用内核创建进程的过程

    原文:详解CreateProcess调用内核创建进程的过程 昨天同学接到了腾讯的电面,有一题问到了CreateProcess创建进程的具体实现过程,他答得不怎么好吧应该是, 为了以防万一,也为了深入学 ...

  7. 详解CreateProcess调用内核创建进程的过程

    昨天同学接到了腾讯的电面,有一题问到了CreateProcess创建进程的具体实现过程,他答得不怎么好吧应该是, 为了以防万一,也为了深入学习一下,今天我翻阅了好多资料,整理了一下,写篇博客,也算是加 ...

  8. android,JNI创建进程,使用fork()

    long add(long x,long y) { pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) ...

  9. Windows平台下的session0创建进程的问题与解决办法

    很多博客都有记载如何在session0下创建进程的办法,也就是使用CreateProcessAsUser.但是这个要求服务的进程有SE_INCREASE_QUOTA_NAME和SE_ASSIGNPRI ...

随机推荐

  1. minium-微信小程序自动化框架-python,官方文档

    minium文档 个人将其部署到了自己的服务器上,如有需要可以访问共同学习这个minium 用python来实现小程序自动化测试... 文档地址 http://49.232.203.244:3000/ ...

  2. Java8 新特性lambda表达式(一)初始

    本篇参考Richard Warburton的 java8 Lambdas :Functional Programming for the Masses 学习lambda表达式之前,需要知道什么是函数式 ...

  3. 基于gis的系统开发,程序运行出现问题 ArcGIS product not specified.You must first bind to an ArcGIS version prior to using any ArcGIS components.

    在之前初始化的时候添加下面的一行代码:ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);还需要添加一个引 ...

  4. macOS使用ABP.vNext Core开发CMS系统(一) 让程序跑起来

    macOS使用ABP.vNext Core开发CMS系统(一) 让程序跑起来--2020年10月5日 国庆假期,陪老婆的同时也不能忘记给自己充充电,这不想搞个CMS系统,考虑自己的时间并不多,所以想找 ...

  5. Webpack + VueJS 学习、跳坑和总结

    这篇随笔会陆续地更新下去,用于汇集一些关于Webpack的初学跳坑总结还有VueJS的基础知识. Webpack部分 ① 快速建立一个Webpack-Vue项目开发环境(4.39.1-2019/08/ ...

  6. 078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类

    078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类 本文知识点:创建类 说明:因为时间紧张,本人写博客过程中只是对知识点的关 ...

  7. matlab receive License Manager Error -103?

    参考:https://www.mathworks.com/matlabcentral/answers/91874-why-do-i-receive-license-manager-error-103 ...

  8. Cadence OrCAD如何查看整页原理图中的元件的属性

    转载: 1.选中DSN文件右键"Edit Object Properties ".在这里插入图片描述2.单击选择"Pivot"按钮. 3.找到Part refe ...

  9. JavaFX FileChooser文件选择器、DirectoryChooser目录选择器

    参考:https://www.yiibai.com/javafx/javafx_filechooser.html 参考:https://blog.csdn.net/dorma_bin/article/ ...

  10. Black-Lives-Matter-Resources

    下载 Black-Lives-Matter-ResourcesBlack-Lives-Matter-Resources 关于最近在美国发生的事件的资源列表 链接 描述 由于(可选) 插入链接 在这里插 ...