如何发现DLL是否在windows服务的上下文中运行
How discover if a DLL runs in the context of a windows service?
我正在编写一个DLL,它可以在服务的上下文中运行,并可以加载到标准的win32进程中。如何检测它是在服务上下文中运行还是在标准win32进程上下文中运行?
根据Vista中引入的会话0隔离,Windows服务在会话0中运行。要确定进程是否在会话0中执行,可以使用ProcessIdToSessionId函数:
DWORD session_id;
if (ProcessIdToSessionId(GetCurrentProcessId(), &session_id))
{
std::cout << "session_id=" << session_id << "n";
}
else
{
std::cout << "Failed : " << GetLastError() << "n";
}
关于您对GUI的评论,请直接从链接文档中引用:
由于会话0不再是用户会话,因此在会话0中运行的服务无法访问视频驱动程序。这意味着服务渲染图形的任何尝试都会失败。
相关文章:
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- Windows 后台服务(系统配置文件)无法使用 C++ 访问 win 10 上的用户 appData 文件夹?
- 在 Windows 服务中使用命名管道时出现问题
- Windows 服务在启动时不进入_tmain
- 名为DLL的C++windows服务程序工作不正常
- ImpersonateLoggedOnUser在windows服务中不工作
- 如何读取windows服务启动的控制台应用程序的输出
- 将 Visual C++ 6 控制台应用程序作为 Windows 服务运行
- 无法从C++ Windows 服务执行批处理文件
- 使用 Windows 防火墙 API 限制服务,找不到服务短名称
- 从C++ Windows 服务中获取当前登录的用户名
- LG电视通过串行使用Windows服务在PC开机后运行约30秒 - 如何更快地启动服务
- 从Windows服务打印
- 如何使用Visual Studio检测和获取Windows服务的代码覆盖率?
- 如何从 Windows 上的服务在未登录用户的桌面上启动应用程序
- QCoreApplication事件循环和Windows服务控制处理程序功能
- Windows 服务启动的超时值是多少
- Windows 生物识别服务在调用 WinBioCaptureSample 时循环运行 SensorAdapterSta
- 使用 NamedPipe 访问 Windows 服务之间的安全性
- 从Windows上的系统工作的服务中获取用户文档文件夹.C++