1

既存のセッションへのリモートデスクトップ接続は、ネットワークプロバイダーでNPLogonNotifyをトリガーします。しかし、ログインイベントなのか既存のセッションへの接続イベントなのかを判断する方法はありますか?

4

1 に答える 1

1

LsaGetLogonSessionDataは、ログオン セッション ID からターミナル サービス セッション ID を返します。したがって、 WTSConnectStateで WTSQuerySessionInformation を呼び出すことができます。運が良ければ、結果によって、関心のある 2 つのケースが区別されます。

そうでない場合、および NPLogonSession から戻る前に答えを知る必要がない場合は、おそらくWTSRegisterSessionNotificationを使用して、NPLogonSession への呼び出しに関連付けられたターミナル サービス セッションに何が起こるかを監視できます。

ユーザーが既存のセッションに接続している場合、NPLogonNotify からのターミナル サービス セッションはアイドル状態またはリッスン状態に戻ると思います。また、NPLogonNotify への呼び出しでログオン セッションが閉じられます。LsaEnumerateLogonSessionsを呼び出して、ログオン セッションを列挙できます。

ユーザーが新しいセッションを受信した場合、NPLogonNotify からの呼び出しで同じターミナル サービス セッションが使用されると思われるため、アクティブな状態に移行します。通常、NPLogonNotify への呼び出しからのログオン セッション ID に関連付けられた 1 つ以上のプロセスも開始されます。MSDN 用語集の「ログオン識別子」で説明されているように、TokenStatistics クエリ クラスで GetTokenInformation使用することにより、プロセスに関連付けられたログオン セッションを特定できます。

注意すべきもう 1 つの複雑な問題: ユーザーが管理者であり、UAC が有効になっている場合、NPLogonNotify への 2 つの呼び出しが発生します。これは、ローカル ログオンとリモート ログオンの両方に当てはまります。

于 2012-04-27T03:30:16.460 に答える