如果我创建了一个进程,是否意味着我总是能够终止它
If I created a process, does it mean that I will always be able to terminate it?
说,如果我使用CreateProcess或CreateProcessAsUser api创建了一个进程,这是否意味着调用TerminateProcess (PROCESS_INFORMATION.hProcess)
将始终杀死该进程,无论我的主机进程运行在什么上下文(低特权用户,内置Guest等)?
我还没有测试过,但是根据文档,您应该总是能够使用PROCESS_INFORMATION中返回的句柄成功地终止进程。在Windows安全模型中,权限通常只针对正在使用的句柄进行检查,而不是其他。根据MSDN关于进程安全和访问权限的文档:
CreateProcess函数返回的句柄具有PROCESS_ALL_ACCESS对进程对象的访问权。
CreateProcessAsUser的文档支持:
此安全描述符可能不允许调用者访问,在这种情况下进程运行后可能不会再打开。进程句柄为有效,并将继续拥有完全访问权限。
文档中对TerminateProcess给出的唯一权限要求是:
句柄必须具有PROCESS_TERMINATE访问权限。
因此,CreateProcess和CreateProcessAsUser返回的任何句柄都应该具有必要和足够的访问权限,以允许使用TerminateProcess终止新进程。
相关文章:
- C++评估顺序优化是否意味着对不同的操作数使用不同的内核?
- 负指数是否必然意味着未定义的行为
- 聚合类型是否意味着它也是标准布局
- 是否有任何版本的C++(甚至是试行标准)是"throw()"并不意味着"cannot throw, ever"?
- "<"满足严格的弱排序是否意味着不需要"=="定义?
- 如果 std::numeric_limits<float>::is_iec559 为真,这是否意味着我可以以明确定义的方式提取指数和尾数?
- 由于 C++17 支持数组shared_ptr,这是否意味着在 ctor 和重置中不再需要 T[] 的显式删除器?
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 没有迭代器失效是否意味着推进迭代器的有效性?
- CLOCKS_PER_SEC是否意味着每台计算机都会有不同的时间概念
- 持续的时间访问是否在某个时候意味着连续内存
- c++ friend 关键字是否意味着比访问私有更重要?
- RandomAccessIterator是否意味着数据在内存中是连续的
- 如果 QList 实例是常量,是否意味着每个元素都是常量
- 如果 C# 指针被认为是"unsafe,"这是否意味着C++指针也是"unsafe"?
- final是否意味着覆盖
- 最终C++是否意味着各方面的最终
- 来自 vtable 的未定义符号是否意味着接口和实现之间存在错误
- 分配是否意味着毁灭
- C++ std::binary_search() 然后是 std::lower_bound() 组合是否意味着我正在执行