我正在编写一个 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/