用服务启动界面程序.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
【知识点详解】 本文档《用服务启动界面程序.pdf》主要涉及如何在Windows服务中以活动会话用户权限启动带有界面的程序。以下是其中的核心概念和技术: 1. **_WIN32_WINNT 和 WINVER 宏定义**: 这两个宏定义了Windows API的最低版本。在这里设置为0x0501,表示至少支持Windows XP或更高版本。这确保了代码使用的API函数在指定的Windows版本上可用。 2. **Windows服务**: Windows服务是在后台运行的程序,不依赖于用户交互。默认情况下,服务无法创建具有用户界面的进程,因为它们运行在不同的上下文中。 3. **WTSApi32库**: WTSApi32.lib是一个Windows Terminal Services API的库,它提供了与远程桌面会话相关的功能。在这个例子中,用于获取当前活动的用户会话信息。 4. **LaunchWithActiceSession() 函数**: 这个函数是核心功能,它允许服务以当前活动会话用户的权限启动一个程序。函数接受几个参数,如可执行文件路径、命令行参数、当前工作目录、是否显示窗口以及是否等待程序退出,并返回进程的句柄。 5. **GetLogonSID() 函数**: 这个函数从提供的访问令牌(通常由服务获取)中获取登录会话标识符(SID)。这是为了确定哪个用户的会话正在被服务使用,以便在该用户的上下文中启动程序。函数通过`GetTokenInformation()` API来获取TokenGroups信息,然后遍历这些组以找到登录会话ID的SID。 6. **GetTokenInformation() API**: 这是Windows API的一部分,用于获取关于进程访问令牌的各种信息,如TokenGroups,TokenUser等。在这里,它用于获取用户的安全标识符(SID)。 7. **安全标识符(SID)**: SID是Windows中唯一标识用户、组和其他安全主体的标识。在GetLogonSID()函数中,我们查找具有SE_GROUP_LOGON_ID属性的SID,这是登录会话ID的标志。 8. **HeapAlloc() 和 HeapFree()**: 这些函数是Windows内存管理API的一部分,用于动态分配和释放内存。在处理SID时,它们用于分配和释放内存空间。 9. **CopySid() API**: 这个函数用于复制SID对象,确保我们有一个新的SID实例,而不是只对原始SID的引用。 总结起来,这个文档介绍了如何在Windows服务环境中,通过获取当前活动用户的SID并利用这个信息,来启动一个具有用户界面的程序。这样做的目的是确保服务启动的程序能够正确地显示界面并与用户交互,尽管服务本身是运行在非交互式上下文中的。这个技术在需要后台服务启动用户界面应用程序的场景中非常有用,例如监控或自动化工具。
剩余14页未读,继续阅读
- 粉丝: 0
- 资源: 6万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 1732537263117202.000000.jpg
- vb.net开发安卓软件的方法
- 江苏省普通高校“专转本”选拔考试专业综合科目考试大纲(试行)
- C语言实现基于华为LiteOS的智慧楼宇消防系统源码+电路图+全部资料
- 基于CMLM的语义一致性数据增强方法python实现源码(提高神经机器翻译的性能、IWSLT14 DE-EN数据集验证).zip
- 静态网站首页制作,纯手工,没有使用框架
- 机器学习大作业-Python实现基于线性回归的PM2.5预测项目源码(高分期末大作业)
- 基于java开发的绿色出行的个人碳排放积分系统+源码(毕业设计&课程设计&项目开发)
- 数据结构--实验报告2.docx
- 基于python的开源文本到语音转换项目+小白使用教程(支持批量英语、中文、多情感语音合成,web界面).zip