c++ - 如何发现 DLL 是否在 Windows 服务上下文中运行?

标签 c++ windows dll service process

我正在编写一个 DLL,它可以在服务上下文中运行,并且可以加载到标准 win32 进程中。如何检测它是在服务上下文中运行还是在标准 win32 进程上下文中运行?

最佳答案

根据Session 0 Isolation ,在 Vista 中引入,Windows 服务在 session 0 中运行。要确定进程是否在 session 0 中执行,您可以使用 ProcessIdToSessionId功能:

DWORD session_id;
if (ProcessIdToSessionId(GetCurrentProcessId(), &session_id))
{
    std::cout << "session_id=" << session_id << "\n";
}
else
{
    std::cout << "Failed : " << GetLastError() << "\n";
}

关于您对 GUI 的评论,直接引用链接文档:

Because Session 0 is no longer a user session, services that are running in Session 0 do not have access to the video driver. This means that any attempt that a service makes to render graphics fails.

关于c++ - 如何发现 DLL 是否在 Windows 服务上下文中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9977094/

相关文章:

c++ - 如何以最快的方式检查给定的数字是否可以被 15 整除?

c++ - OpenGL 渲染不同的对象

c++ - 使用 NDK 将 C++ 应用程序移植到 Android

java - 如何在windows上使用java执行linux命令?

windows - 通过 cifs 进行的颠覆不起作用

c# - 错误: “Unable to find the DLL xyz.dll!” Visual Studio 2010

c++ - 我可以将可执行文件构建为 dll 吗?

c++ - 模板、循环依赖、方法,天哪!

c - 在 ShellExecute 函数中将 stderr 和 stdout 获取为字符串

c++ - Visual Studio 中的动态链接