【发布时间】:2023-03-27 03:00:01
【问题描述】:
我目前正在编写一个 Windows 服务,当用户登录时它也会做一些事情。如果登录来自远程计算机(例如远程桌面),则有什么都不做的想法,并试图找到一种方法来解决这个问题。但以下不起作用 - 它总是返回 true(Windows 10 64 位 V1809) - 我在这里做错了吗?
DWORD SvcHandlerEx(DWORD controlCode, DWORD eventType, ... )
{
...
switch(controlCode)
{
case SERVICE_CONTROL_SESSIONCHANGE:
{
WTSSESSION_NOTIFICATION *pSessInfo = (WTSSESSION_NOTIFICATION *)pEvtData;
// invoke SessionChangeHandler(eventId, pSessInfo->dwSessionId)
}
...
}
...
}
...
VOID SessionChangeHandler(DWORD reason, DWORD sessionId)
{
LPWSTR *pSessionInfo = nullptr;
DWORD dataLen = 0;
BOOL isRDP = false;
if (!WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, sessionId,
WTSIsRemoteSession, &pSessionInfo, &dataLen))
{
// Do some error handling...
return;
}
if (dataLen)
{
if (dataLen)
{
isRDP = (bool)pSessionInfo; // Always 1 (TRUE) !!!
}
WTSFreeMemory(pSessionInfo);
}
...
}
【问题讨论】:
-
我也尝试使用 WTSClientProtocolType,如 stackoverflow.com/questions/33001915/… 中所述 - 但在这种情况下,从远程计算机连接时我没有得到“2”(RDP 协议)......奇怪。