文章目录
进程
GetModuleFileNameA 获取一个可执行文件或DLL文件的位置
DWORD GetModuleFileNameA(HMDULE hModule,LPSTR lpFilename,DWORD nSize);
// hModule所需路径的模块的句柄。如果该参数为NULL,函数会获取当前进程的运行文件(.exe文件)的全路径。
//lpFilename 缓冲区,nSize 缓冲区大小
char module_filename[MAX_PATH];
GetModuleFileNameA(NULL, module_filename, MAX_PATH);
cout << module_filename << endl;
GetCommandLine 获取指向当前进程命令行的指针
LPSTR GetCommandLineA();
若要将命令行转换为 argv 样式的字符串数组,请将结果从 GetCommandLineA 传递到 CommandLineToArgW。
GetEnvironmentStrings 获取完整环境块
LPCH GetEnvironmentStrings();
将此内存视为只读;不要直接修改它。若要添加或更改环境变量,请使用 GetEnvironmentVariable 和 SetEnvironmentVariable 函数。
当不再需要 GetEnvironmentStrings 返回的块时,应通过调用 FreeEnvironmentStrings 函数来释放它。
GetCurrentDirectory 获取当前进程所在的目录
DWORD GetCurrentDirectory(
[in] DWORD nBufferLength,
[out] LPTSTR lpBuffer
);
CreateProcess 创建一个进程
BOOL CreateProcess(
LPCWSTR lpszImageName,
LPCWSTR lpszCmdLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPWSTR lpszCurDir,
LPSTARTUPINFOW lpsiStartInfo,
LPPROCESS_INFORMATION lppiProcInfo);
GetCurrentProcessId 获取当前进程ID
DWORD GetCurrentProcessId(void);
线程
CreateThread 创建线程
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId);
//线程入口函数固定格式(函数名ThreadProc可以改变)
DWORD WINAPI ThreadProc(LPVOID lpParameter){}
•lpThreadAttributes,描述线程安全的结构体,默认传NULL.
• dwStackSize,堆栈大小,默认为0(1MB).
• lpStartAddress,线程函数入口地址。
• lpParameter,线程函数参数。
• dwCreationFlags,线程创建时的状态,0表示线程创建之后立即运行。CREATE_SUSPENDED表示线程创建完挂起,直到调用ResumeThread才运行。
• lpThreadId,指向1个变量接受线程ID,可为NULL。
创建线程 _beginthreadex
unsigned long _beginthreadex(
void *security,
unsigned stack_size,
unsigned(_stdcall *start_address)(void *),
void *argilist,
unsigned initflag,
unsigned *threaddr);
#include <process.h>
unsigned int __stdcall first(void*) {
std::cout << "this is first thread!" << std::endl;
return 0;
}
int main() {
unsigned int d1;
HANDLE handle = (HANDLE)_beginthreadex(nullptr,0, first,nullptr,0,&d1);
CloseHandle(handle);
Sleep(1000);
std::cout << "handle = " << handle << std::endl;
std::cout << "threadid = " << d1 << std::endl;
return 0;
}
- security 安全属性, 为NULL时表示默认安全性
- stack_size 线程的堆栈大小, 一般默认为0
- start_address 线程入口函数
- argilist 线程函数的参数,是一个void*类型, 传递多个参数时用结构体
- initflag 新线程的初始状态,0表示立即执行,CREATE_SUSPENDED 表示创建之后挂起
- threaddr 用来接收线程ID