win32相关(进程相关API)
进程相关API
ID与句柄
在任务管理器中,有一栏是PID,上面记录着windows中每个进程的唯一编号。除了每个进程都有一个句柄表以外,windows还有一个父唯一的全局句柄表
CreateProcess
BOOL CreateProcess(LPCSTR lpApplicationName, // 对象名称LPSTR lpCommandLine, // 命令行LPSECURITY_ATTRIBUTES lpProcessAttributes, // 不继承进程句柄LPSECURITY_ATTRIBUTES lpThreadAttributes, // 不继承线程句柄BOOL bInheritHandles, // 不继承句柄DWORD dwCreationFlags, // 没有创建标志LPVOID lpEnvironment, // 使用父进程环境变量LPCSTR lpCurrentDirectory, // 使用父进程目录作为当前目录LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation
);// LPSTARTUPINFOA 信息
typedef struct _STARTUPINFOA {DWORD cb;LPSTR lpReserved;LPSTR lpDesktop;LPSTR lpTitle;DWORD dwX;DWORD dwY;DWORD dwXSize;DWORD dwYSize;DWORD dwXCountChars;DWORD dwYCountChars;DWORD dwFillAttribute;DWORD dwFlags;WORD wShowWindow;WORD cbReserved2;LPBYTE lpReserved2;HANDLE hStdInput;HANDLE hStdOutput;HANDLE hStdError;
} STARTUPINFOA, *LPSTARTUPINFOA;// LPPROCESS_INFORMATION 信息
typedef struct _PROCESS_INFORMATION {HANDLE hProcess; // 进程句柄HANDLE hThread; // 线程句柄DWORD dwProcessId; // 进程idDWORD dwThreadId; // 线程id
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
TerminateProcess
BOOL TerminateProcess(HANDLE hProcess, // 要终止的进程句柄UINT uExitCode // 进程和线程将使用的退出代码
);
OpenProcess
HANDLE OpenProcess(DWORD dwDesiredAccess, // 进程访问权限BOOL bInheritHandle, // 是否继承DWORD dwProcessId // 要打开的本地标识符(pid)
);
我们来看一下CreateProcess中的 `dwCreationFlags` 属性
dwCreationFlags属性
说一下CREATE_SUSPENDED
这种方式创建的线程,如果是以挂起的方式来创建的进程,那么它的进程创建过程就会有一些变化
- 映射exe文件
- 创建内核对象EPROCESS
- 映射系统DLL
- 创建线程内核对象ETHREAD
- 如果是以挂起方式创建:
- 这里面就可以做一些其他的事情(提前注入,等)
- 恢复以后再继续执行
- 。。。
GetModuleFilename
// 检索包含指定模块的文件的完全限定路径
DWORD GetModuleFileNameA(HMODULE hModuleLPSTR lpFilename,DWORD nSize
);
GetCurrentDirectory
// 检索当前进程的当前目录
DWORD GetCurrentDirectory(DWORD nBufferLength,LPTSTR lpBuffer
);
其他进程相关api
- GetCurrentProcessId 获取进程PID
- GetCurrentProcess 获取进程句柄
- GetcommandLine 获取命令行
- GetStartupInfo 获取启动信息
- EnumProcesses 遍历进程ID
- CreateToolhelp32napshot 获取进程快照
- Exitprocess 退出本进程
- WinExec 启动一个程序
- ShellExecute 运行一个外部程序,或者打开一个文件目录,文件夹等
- system 控制台命令