1. GetVersionEx
函数介绍
GetVersionEx
是一个用于获取操作系统版本信息的函数。它填充一个结构体,其中包含有关当前操作系统版本的信息。
函数原型
BOOL GetVersionEx(
LPOSVERSIONINFO lpVersionInfo
);
参数介绍
lpVersionInfo
类型:
LPOSVERSIONINFO
指向一个
OSVERSIONINFO
或OSVERSIONINFOEX
结构的指针,用于接收操作系统版本信息。
返回值
成功:返回值为非零值。
失败:返回值为零。可以通过调用
GetLastError
获取错误代码。
示例代码
#include <windows.h>
#include <stdio.h>
int main() {
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (GetVersionEx(&osvi)) {
printf("Major Version: %d\n", osvi.dwMajorVersion);
printf("Minor Version: %d\n", osvi.dwMinorVersion);
printf("Build Number: %d\n", osvi.dwBuildNumber);
printf("Platform ID: %d\n", osvi.dwPlatformId);
printf("Service Pack: %s\n", osvi.szCSDVersion);
} else {
printf("Failed to get version information. Error: %d\n", GetLastError());
}
return 0;
}
2. CreateProcess
函数介绍
CreateProcess
用于创建一个新的进程及其主线程。它可以启动一个程序或命令,并指定程序的运行方式。
函数原型
BOOL CreateProcess(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
参数介绍
lpApplicationName
:指向要运行的模块的名称。lpCommandLine
:指向命令行字符串。lpProcessAttributes
:指向进程安全属性。lpThreadAttributes
:指向线程安全属性。bInheritHandles
:是否继承句柄。dwCreationFlags
:创建标志。lpEnvironment
:指向新环境块。lpCurrentDirectory
:指向当前目录。lpStartupInfo
:指向启动信息。lpProcessInformation
:指向返回的进程和线程信息。
返回值
成功:返回值为非零值。
失败:返回值为零。可以通过调用
GetLastError
获取错误代码。
示例代码
#include <windows.h>
#include <stdio.h>
int main() {
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
if (!CreateProcess(
NULL, // 指向可执行文件的名称
"notepad.exe", // 指向命令行字符串
NULL, // 指向进程安全属性
NULL, // 指向线程安全属性
FALSE, // 是否继承句柄
0, // 创建标志
NULL, // 指向新环境块
NULL, // 指向当前目录
&si, // 指向启动信息
&pi // 指向返回的进程和线程信息
)) {
printf("CreateProcess failed. Error: %d\n", GetLastError());
return 1;
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
3. ShellExecuteEx
函数介绍
ShellExecuteEx
是一个功能强大的函数,用于执行各种与文件或文件夹相关的操作,例如启动程序、打开文件、打印文件、浏览文件夹等。
函数原型
BOOL ShellExecuteEx(
LPSHELLEXECUTEINFO lpExecInfo
);
参数介绍
lpExecInfo
:指向一个SHELLEXECUTEINFO
结构的指针,包含执行操作所需的所有信息。
返回值
成功:返回值为非零值。
失败:返回值为零。可以通过调用
GetLastError
获取错误代码。
示例代码
#include <windows.h>
#include <shellapi.h>
#include <stdio.h>
int main() {
SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = "open";
sei.lpFile = "notepad.exe";
sei.lpParameters = NULL;
sei.lpDirectory = NULL;
sei.nShow = SW_SHOWNORMAL;
if (!ShellExecuteEx(&sei)) {
printf("ShellExecuteEx failed. Error: %d\n", GetLastError());
return 1;
}
WaitForSingleObject(sei.hProcess, INFINITE);
CloseHandle(sei.hProcess);
return 0;
}
4. GetProcessElevation
函数介绍
GetProcessElevation
用于检测当前进程的权限提升状态,判断进程是否以管理员权限运行以及其令牌的提升类型。
函数原型
BOOL GetProcessElevation(TOKEN_ELEVATION_TYPE* pElevationType, BOOL* pIsAdmin);
参数介绍
pElevationType
:指向TOKEN_ELEVATION_TYPE
枚举类型的指针,用于接收当前进程的令牌提升类型。pIsAdmin
:指向布尔值的指针,用于接收当前进程是否以管理员身份运行。
返回值
成功:返回值为非零值。
失败:返回值为零。
示例代码
#include <windows.h>
#include <stdio.h>
BOOL GetProcessElevation(TOKEN_ELEVATION_TYPE* pElevationType, BOOL* pIsAdmin) {
HANDLE hToken = NULL;
DWORD dwSize;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) {
return FALSE;
}
BOOL bResult = FALSE;
if (GetTokenInformation(hToken, TokenElevationType, pElevationType, sizeof(TOKEN_ELEVATION_TYPE), &dwSize)) {
*pIsAdmin = IsUserAnAdmin();
bResult = TRUE;
}
CloseHandle(hToken);
return bResult;
}
int main() {
TOKEN_ELEVATION_TYPE Type;
BOOL IsAdmin;
if (GetProcessElevation(&Type, &IsAdmin)) {
printf("Elevation Type: %d\n", Type);
if (IsAdmin) {
printf("Running as Admin\n");
} else {
printf("Running as Normal User\n");
}
} else {
printf("Failed to get elevation information\n");
}
return 0;
}
5. CreateThread
函数介绍
CreateThread
用于创建一个新线程。它可以启动一个线程来执行指定的函数,通常用于多线程编程。
函数原型
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
参数介绍
lpThreadAttributes
:指向线程安全属性。dwStackSize
:初始堆栈大小。lpStartAddress
:指向线程函数的指针。lpParameter
:传递给线程函数的参数。dwCreationFlags
:创建标志。lpThreadId
:指向线程标识符的指针。
返回值
成功:返回新线程的句柄。
失败:返回
NULL
。可以通过调用GetLastError
获取错误代码。
示例代码
#include <windows.h>
#include <stdio.h>
DWORD WINAPI ThreadFunc(LPVOID lpParam) {
int count = (int)lpParam;
for (int i = 0; i < count; i++) {
printf("Thread: %d\n", i);
}
return 0;
}
int main() {
HANDLE hThread;
DWORD dwThreadId;
int threadCount = 5;
hThread = CreateThread(
NULL, // 安全属性
0, // 堆栈大小
ThreadFunc, // 线程函数
(LPVOID)threadCount, // 传递给线程函数的参数
0, // 创建标志
&dwThreadId // 线程标识符
);
if (hThread == NULL) {
printf("CreateThread failed. Error: %d\n", GetLastError());
return 1;
}
printf("Thread created with ID: %d\n", dwThreadId);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
return 0;
}