进程创建
Posted dailycode
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程创建相关的知识,希望对你有一定的参考价值。
启动进程
int __cdecl system(_In_opt_z_ char const* _Command);
UINT WINAPI WinExec(__in LPCSTR lpCmdLine, __in UINT uCmdShow);
HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd);
BOOL WINAPI CreateProcess(
__in_opt LPCTSTR lpApplicationName,
__inout_opt LPTSTR lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes, //通常置NULL。如果用于服务端则需要设置正确值。
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCTSTR lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
typedef struct _SECURITY_ATTRIBUTES {
DWORD nLength;
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
SECURITY_DESCRIPTOR Structure
Remarks
A security descriptor includes information that specifies the following components of an object‘s security:
An owner (SID)
A primary group (SID)
A discretionary ACL
A system ACL
Qualifiers for the preceding items
#include <windows.h> #include <tchar.h> int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { DWORD dw = 0; TCHAR szFilePath[] = "notepad.exe"; switch (dw) { case 0: system(szFilePath); // (1)、他不会立即返回,直到你启动的程序执行完成。 // (2)、如果你启动是windows程序,它仍然会启动一个控制台。 // (3)、它的返回值代表是否执行成功以及程序的退出码。 break; case 1: WinExec(szFilePath, SW_SHOW); // (1)、它将启动了一个新进程,并且立即返回。 // (2)、它多了一个参数:uCmdShow,可以一定程度上控件窗体的显示,比如让它后台运行而不显示出来。 // (3)、它无论启动控制台程序还是windows程序都只做你想要做的事,不会有上面启动windows程序时先启动控制台窗口的动作。 // 它的不足之处: // (1)、它完全与本进程脱离,无法做些必要的控制 // (2)、无法得知启动的程序是否退出。 // (3)、得不到启动的程序的退出码。 break; case 2: //ShellExecute(NULL, "open", strFilePath.GetBuffer(0), NULL, NULL, SW_SHOWNORMAL); ShellExecute(NULL, "open", "www.baidu.com", NULL, NULL, SW_SHOWNORMAL); // 1、2中如果传入“XX.txt”,它们将不能成功执行,ShellExecute却能很好地执行。 // 1、2中如果传入“www.vczx.com”,将不能成功执行,而ShellExecute却能很好地执行。 break; case 3: { STARTUPINFO si; PROCESS_INFORMATION pi; memset(&pi, 0, sizeof(pi)); memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO);//设定结构的大小 // CreateProcess(NULL, // "notepad.exe", // NULL, // NULL, // FALSE, // NORMAL_PRIORITY_CLASS, // NULL, //进程的环境变量。即要创建的进程名称的路径。如果置NULL,参数1需要设置为全路径。 // NULL, // &si, // &pi); CreateProcess("winmine.exe", "", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); } break; } return 0; }
以上是关于进程创建的主要内容,如果未能解决你的问题,请参考以下文章
LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段
Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段