问题标签 [wtsapi32]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
15332 浏览

winapi - 如何获取物理会话的当前用户令牌?

我有一些代码,我正在尝试获取当前会话用户令牌:

err 的值为 1314。

更新 1

到目前为止没有运气,试图授予当前进程 SE_TCB_NAME - 但仍然从 WTSQueryUserToken (1314) 得到相同的错误。

更新 2:

添加了更多调试信息,但 prevState.PrivilegeCount 为 0...

解决方案:

看起来 WTSQueryUserToken 只能在作为 LocalSystem 运行时使用,这意味着我必须作为服务运行并从那里进行调试……Doh!

0 投票
1 回答
1450 浏览

wtsapi32 - 如何在与服务不同的会话中枚举打开的窗口?

我见过这个问题,但我希望避免使用CreateProcessAsUser. 我可以通过调用枚举窗口EnumDesktopWindows,我可以通过调用获取桌面EnumDesktops。不幸的是,EnumDesktops需要一个窗口站名,并且WTSQuerySessionInformationwithWTSWinStationName 明确地不返回窗口站名。

所以,我想我的问题是:我如何获得 WTS 会话的 Window Station?

0 投票
4 回答
12287 浏览

c++ - WTSQuerySessionInformation 返回空字符串

我编写了一个程序,它应该查询终端服务 API 并打印出一些关于在终端服务框中运行的会话的状态信息。我正在使用 WTSQuerySessionInformation 函数来执行此操作,它正在返回一些数据,但大部分数据似乎都丢失了......有谁知道为什么?

这是我的程序:

这是输出:

如您所见,一些数据看起来是有效的,但不是全部......

0 投票
3 回答
2108 浏览

windows - 是什么让 SwitchDesktop 在用户解锁会话后无法正常工作?

我有一个程序可以切换桌面并在其上启动一个新进程。当进程退出时,父进程恢复原始桌面。

出于测试目的,我在一个普通的 win32 应用程序中放置了一个按钮来触发开关。它工作,并关闭启动的进程(记事本),我回到原来的桌面。

在同一个程序中,我调用了 WTSRegisterSessionNotification 以在会话解锁时接收通知 (WTS_SESSION_UNLOCK)。我收到了。

但是当我尝试在 WTS_SESSION_UNLOCK 消息处理程序中切换桌面时,SwitchDesktop 失败并且 GetLastError 为 0。文档说最后一个错误通常不是由 SwitchDesktop 设置的。

有趣的是,如果我将切换桌面的调用放在 for 循环中,它会在第 5 次迭代中运行。

简而言之,这不起作用:

但是这个丑陋的黑客有效:

设置一个计时器(退出消息循环)也可以,但就这个问题而言,它只是一种更复杂的循环形式。SwitchDesktop 将在少量 WM_TIMER 消息后运行。它看起来像常数时间,虽然我没有测量它。

SwitchDesktop 的 MSDN 文档提到这将因我使用的自定义 Userinit 进程而失败。但是在切换之前获取当前桌面的名称:

一直给我default。由于GetLastError是 0,而不是 5(拒绝访问),我很确定在收到 WTS_SESSION_UNLOCK 通知之前安全桌面已经消失。

我知道在屏幕锁定时我无法切换桌面,但是在桌面解锁后是否有一个“宽限期”我无法调用 SwitchDesktop ?

0 投票
1 回答
1171 浏览

c++ - WTS连接会话

我正在尝试使用此功能连接到特定的用户会话。我已经尝试了所有方法,但该功能总是失败,因为ERROR_ACCESS_DENIED5 (0x5) Access is denied 或ERROR_CTX_WINSTATION_ACCESS_DENIED7045 (0x1B85) The requested session access is denied. 甚至像这样硬编码会话 ID 和密码

有没有比使用此功能更好的方法来启动用户会话。我正在尝试实现快速用户切换,这是难题中的最后一块是登录用户会话。谢谢你。

0 投票
1 回答
3347 浏览

c++ - 如何将登录用户的域\用户获取到当前会话

我正在寻找一种方法来获取登录到我的进程运行的会话的用户的用户名和域。我不能依赖我的进程令牌信息,因为它是从不同用户的令牌创建的,并且包含不正确的信息。

我更喜欢不依赖WTS服务的方式。

我尝试使用GetUserObjectInformation然后LookupAccountSid,但 LookupAccountSid 返回 ERROR_NONE_MAPPED 因为“它发生在没有相应帐户名称的 SID 上,例如标识登录会话的登录 SID。”

谢谢

0 投票
1 回答
461 浏览

windows - 程序检测我的机器是否远程访问

我有一个在一台 PC 上运行的 winservice,它连接到服务器,所以我们可以将命令推送到这个 winservcice。

其中一个命令应该是: isConnectedRemotly :如果有人从其他机器(远程)连接到这台机器,它应该返回 true,并且对于哪个用户名(它连接到的会话用户名)

我怎么能这样做?

0 投票
1 回答
415 浏览

c - WTSEnumerateServers ERROR_INVALID_DOMAINNAME

I'm trying to enumerate Terminal servers in our local domain, but WTSEnumerateServers() fails with ErrorCode 1212 ( The format of the specified domain name is invalid. ). I tried it with the subdomain name "sub", with the full domain name "sub.company.local" and with NULL which is a synonym for the computer's domain. Always the same.

The MSDN Article states: This function will not work if NetBT is disabled.
NetBT is NetBIOS over TCP/IP. Which, I checked, is on by default. I'm using Windows 8.1

Does anyone know why WTSEnumerateServers() is failing?

0 投票
0 回答
1734 浏览

powershell - 如何使用powershell检查站点是否被锁定

我知道可以使用 c# 使用 wtsapi32.dll 检查计算机的状态。但是可以使用powershell来做到这一点吗?

0 投票
1 回答
135 浏览

c# - 是否可以在 RDP 会话中捕获本地用户(而不是远程用户)

我正在尝试从 RDP 会话中捕获本地用户名。为了澄清,请参见下面的示例:

我的本地工作站调用WORKSTATION1,我以JOHN.DOE 身份登录到这个本地工作站。

我使用JANE.DOE建立 RDP 连接以工作。是否可以从 RDP 会话中捕获JOHN.DOE ?我认为您无法使用 WTSQuerySessionInformation API 捕获它。

任何建议将不胜感激。