对于我的项目,我有一个 GUI 可执行文件启动了许多后台进程,这些进程都相互通信以划分数据处理。最近,我将 GUI 复制到另一台机器上,并重新编译后台可执行文件以进行测试。
令我惊讶的是,当我尝试在 Visual Studio 中附加到启动的进程时,我在进程列表或任务管理器中找不到它们。最终,在搜索任何用户正在运行的可执行文件后,我发现进程在“会话 0”(Windows 10 的隔离模式)下运行,随后需要管理员权限才能调试它们!
我想在我的用户会话中运行这些可执行文件,为此,我需要首先了解是什么原因导致它们在会话 0 中运行。什么可以促使可执行文件在该级别运行?
答案1
以下应用程序将在会话 0 中运行:
- 创建 UI 的系统服务。
SendMessage
尝试使用和等API消息函数PostMessage
与用户进行通信的系统服务。- 创建全局命名对象的应用程序。
如果您的应用程序没有作为系统服务运行,或者创建这样的服务,那么它必须创建全局命名对象。
全局命名对象具有以“Global\”为前缀的对象名称。这些通常是共享内存段或各种信号量。您可以使用以下方式查看它们 程序运行对象 在“GLOBAL??”部分。