找回密码
 加入
搜索
查看: 2620|回复: 9

[系统综合] [已解决]如何判断当前桌面是远程桌面?

[复制链接]
发表于 2018-8-30 10:16:36 | 显示全部楼层 |阅读模式
本帖最后由 pchome2000 于 2018-9-3 09:28 编辑

如何判断当前桌面是远程桌面
发表于 2018-8-30 11:01:06 | 显示全部楼层
首先,获得当前进程所在的 session id,具体步骤是
1.打开进程自身的 token,
HANDLE hToken = NULL;
HANDLE hProcess = GetCurrentProcess();
OpenProcessToken(hProcess, TOKEN_QUERY, &hToken);

2. DWORD dwTokenSessionId;
                        DWORD dwTsSize = 0;
    GetTokenInformation(hToken, TokenSessionId, &dwTokenSessionId, sizeof(dwTokenSessionId), &dwTsSize));//TokenSessionId 是一个系统常量,可能需要最新的 SDK,

3. 现在已经得到token结构中的 session id, 也就是你的进程所在的 session



如果系统是 2000, 由于不支持用户切换所以 console session 始终是 0, 如果当前 session 不是0 那么就是 RDP session.

如果系统是 xp 以上, 你可以使用 WTSGetActiveConsoleSessionId 检查 console session id 如果和当前 session id 不一致那么就是运行在 RDP session

WTSGetActiveConsoleSessionId  API 需要最新的 sdk ,如果没有安装的话可以自己从 kernel32.dll load.

转别人的帖子,没看明白
发表于 2018-8-30 11:02:26 | 显示全部楼层
判断当前进程的用户,如果是"System"则假定他为远程桌面上运行。
发表于 2018-8-30 11:09:39 | 显示全部楼层
Windows驱动中判断Session是否是远程Session
   
    用户态调用GetSystemMetrics(SM_REMOTESESSION)就可以知道当前是否处于远程桌面环境。
    内核态没有类似的函数,就需要通过其它的方法判断了。
   
    首先使用PsGetThreadSessionId,或者PsGetProcessSessionId,或者SeQuerySessionIdToken
    可以很容易的得到进程的Session。
    SharedUserData(类型KUSER_SHARED_DATA)有一个成员ActiveConsoleId,就是当前控制台Session的ID。
    进程Session的ID与ActiveConsoleId比较一下即可知道进程Session是否是远程桌面的Session。
   
    Windows有一个名字为Remote Interactive Logon的组,SID为S-1-5-14,
    一般情况下远程桌面的进程令牌中会保护这个组。当时如果当前Session是
    一个被Shadow的Session,则进程令牌中不会保护这个组。因为Windows不会
    在Session在Shadow后更改已存在进程的令牌。
 楼主| 发表于 2018-8-30 11:19:23 | 显示全部楼层
不知道如何判断当前用户的会话ID, 如当前用户的会话ID=1, 即为远程桌面
发表于 2018-8-30 11:22:13 | 显示全部楼层
用这个试试了。 _WinAPI_GetSystemMetrics($SM_REMOTESESSION)
发表于 2018-8-30 11:24:08 | 显示全部楼层
Global Const $SM_REMOTECONTROL = 0x2001
Global Const $SM_REMOTESESSION = 0x1000
定义一下,这个我也没明白。不过我测试没问题
 楼主| 发表于 2018-8-30 11:35:00 | 显示全部楼层
谢谢,我测试一下。           
 楼主| 发表于 2018-8-30 11:42:23 | 显示全部楼层
redapple2008 发表于 2018-8-30 11:24
Global Const $SM_REMOTECONTROL = 0x2001
Global Const $SM_REMOTESESSION = 0x1000
定义一下,这个我也 ...

判断当前会话ID是否等于1,会话ID=1即为远程桌面
发表于 2018-8-30 11:50:00 | 显示全部楼层
pchome2000 发表于 2018-8-30 11:42
判断当前会话ID是否等于1,会话ID=1即为远程桌面

难道不是吗?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 23:58 , Processed in 0.073644 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表