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






