1

ユーザー セッションがどのような状態にあるかを判断する必要があります。つまり、ユーザーがログオンしてアクティブになっているか、またはユーザーがログオンしていないかを判断する必要があります。関数を使用してこれを行うには、状態メンバーを持つこの関数から返されるものをWTSEnumerateSessionsチェックしています。WTS_SESSION_INFO

オンラインドキュメントによると。

WTSActive ユーザーが WinStation にログオンしています

WTSDisconnected WinStation はアクティブですが、クライアントは切断されています。

問題は、現在自分のシステムにログオンしているが、現在のセッションで返された状態がWTSDisconnected状態であると期待しているWTSActiveということです。なぜこれが起こっているのか理由はありますか?

以下のコード

PWTS_SESSION_INFO pSessionInfo(nullptr);
    DWORD countOfSessions(0);
    DWORD sessionIndex(0);

    if (WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE,     // local machine
        0,                              // reserved, must be zero
        1,                              // Version, must be one
        &pSessionInfo,
        &countOfSessions) == FALSE)
    {

        return false;
    }

    if (countOfSessions == 0 || !pSessionInfo)
    {
        return false;
    }

    const DWORD currentSession = GetRealSessionID(CurrentSession); //This case we are in session 0
    for (; sessionIndex < countOfSessions; ++sessionIndex)
    {
        WTS_SESSION_INFO& sessionInfo = pSessionInfo[sessionIndex];
        if (currentSession == sessionInfo.SessionId)
        {
            if (sessionInfo.State == WTSActive)
            {
                return true;
            }
        }
    }


    return false;

ありがとう

4

1 に答える 1

0

これはあまり意味がありません。これは、サービスが実行さcurrentSessionれる0非対話型の分離セッションのセッション ID です。

于 2015-11-25T13:02:14.327 に答える