windows 服务中以用户管理员权限或普通权限启动进程
管理员权限启动进程
windows服务中以用户管理员权限或普通权限启动进程
1 | // 管理员权限启动进程 |
普通用户权限启动进程
1 | // 普通用户权限启动进程 |
根据名字查找进程句柄
1 |
|
CreateToolhelp32Snapshot
获取指定进程的快照,以及这些进程使用的堆、模块和线程。1
2
3
4HANDLE CreateToolhelp32Snapshot(
[in] DWORD dwFlags,
[in] DWORD th32ProcessID
)
[in] dwFlags
要包含在快照中的系统部分。此参数可以是以下一个或多个值。
TH32CS_INHERIT
0x80000000
指示快照句柄是可继承的。TH32CS_SNAPALL
包括系统中的所有进程和线程,以及 th32ProcessID 中指定的进程的堆和模块。等效于指定使用 OR 运算 (’|’) 组合的TH32CS_SNAPHEAPLIST、TH32CS_SNAPMODULE、TH32CS_SNAPPROCESS和TH32CS_SNAPTHREAD值。TH32CS_SNAPHEAPLIST
0x00000001
在快照中包括 th32ProcessID 中指定的进程的所有堆。若要枚举堆,请参阅 Heap32ListFirst。TH32CS_SNAPMODULE
0x00000008
包括在快照中 th32ProcessID 中指定的进程的所有模块。要枚举模块,请参见模块 32First。如果函数失败并ERROR_BAD_LENGTH,请重试该函数,直到成功。
64 位视窗: 在 32 位进程中使用此标志包括 th32ProcessID 中指定的进程的 32 位模块,而在 64 位进程中使用它包括 64 位模块。若要从 64 位进程中包括 th32ProcessID 中指定的进程的 32 位模块,请使用 TH32CS_SNAPMODULE32 标志。TH32CS_SNAPMODULE32
0x00000010
从 64 位进程调用时,在快照中包括 th32ProcessID 中指定的进程的所有 32 位模块。此标志可以与TH32CS_SNAPMODULE或TH32CS_SNAPALL组合使用。如果函数失败并ERROR_BAD_LENGTH,请重试该函数,直到成功。TH32CS_SNAPPROCESS
0x00000002
在快照中包括系统中的所有进程。若要枚举进程,请参阅 Process32First。TH32CS_SNAPTHREAD
0x00000004
在快照中包括系统中的所有线程。若要枚举线程,请参阅 Thread32First。
若要标识属于特定进程的线程,请在枚举线程时将其进程标识符与 THREADENTRY32 结构的 th32OwnerProcessID 成员进行比较。
- [in] th32ProcessID
要包含在快照中的进程的进程标识符。此参数可以为零以指示当前进程。当指定TH32CS_SNAPHEAPLIST、TH32CS_SNAPMODULE、TH32CS_SNAPMODULE32或TH32CS_SNAPALL值时,
将使用此参数。否则,它将被忽略,并且所有进程都包含在快照中。
如果指定的进程是空闲进程或 CSRSS 进程之一,则此功能将失败,并且最后一个错误代码ERROR_ACCESS_DENIED,
因为它们的访问限制会阻止用户级代码打开它们。
如果指定的进程是 64 位进程,而调用方是 32 位进程,则此函数将失败,最后一个错误代码ERROR_PARTIAL_COPY (299)。
- [in] th32ProcessID
参考:
https://docs.microsoft.com/en-us/windows/win32/toolhelp/taking-a-snapshot-and-viewing-processes