none
リモート接続をやめた後の、ワークステーションのロックの解除に関する質問 RRS feed

  • 質問

  • リモート接続のPCを、ローカル上でログインしたときの、ワークステーションのロック状態について質問があります。
    試しに一定間隔で、対象PCのログインユーザーと、そのときのワークステーションのロック状況をコンソールに出力したところ、リモートから戻った場合は、「ワークステーションがロックされました。」で終わりました。
    PC自体はログイン済で、画面表示中も、ワークステーション解除のアナウンスはありません。
    ここで質問になりますが、以下の点について教えて頂けないでしょうか。
    ①ロックの解除されない理由
    ②リモート接続から戻ったとき、解除のアナウンスを受けるための方法。(プログラム等で改善しますか?)
    ③ワークステーション解除を条件に何か処理をするアプリを作りたいです。EventLogが無理そうなら、代わりになる監視方法があったら教えて下さい。


    【捕捉 コード内容】
    以下は実際に書いたコードです。

    public partial class Form1 : Form
    {
        string LockState = string.Empty;
        ProcessStartInfo info;
        public Form1()
        {
            InitializeComponent();
            string s = Environment.GetEnvironmentVariable("WINDIR");
            if (Environment.Is64BitOperatingSystem && IntPtr.Size == 4)
            {
                s = Path.Combine(s, @"SysNative\query.exe");
            }
            else
            {
                s = Path.Combine(s, @"System32\query.exe");
            }
      
            info = new ProcessStartInfo()
            {
                FileName = Environment.GetEnvironmentVariable("ComSpec"),
                CreateNoWindow = true,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardInput = false,
                Arguments = "/c " + s + " session ",
                Verb = "RunAs"
            };
            timer1.Start();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            using (var p = Process.Start(info))
            {
                foreach (var item in p.StandardOutput.ReadToEnd().Split('\n').ToArray())
                {
                    if (item.StartsWith(">")) Console.WriteLine($"{DateTime.Now}: {item}\n{LockState}\n");
                }
                 p.WaitForExit();
            }
        }
       
        private void eventLog1_EntryWritten(object sender, System.Diagnostics.EntryWrittenEventArgs e)
        {
            if (e.Entry.InstanceId == 4800 || e.Entry.InstanceId == 4801) LockState = e.Entry.Message;
        }
    }


    以上、情報不足で申し訳ありませんが、ご協力のほど、よろしくお願いいたします。

    2020年10月28日 6:13

回答

  • mexicanafroさん、こんにちは。フォーラムオペレーターのKumoです。
    ご返信いただきありがとうございます。

    以下は、頂いた質問の回答です。
    >リモート接続から戻ったとき、解除のアナウンスを受けるための方法。(プログラム等で改善しますか?)
    下記のコードを使って、リモート接続はロックされているかどうかを確認してください。
    SystemEvents.SessionSwitch += new SessionSwitchEventHandle SystemEvents_SessionSwitch);
    void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
    {
        if (e.Reason == SessionSwitchReason.SessionLock || e.Reason == SessionSwitchReason.RemoteDisconnect || e.Reason == SessionSwitchReason.SessionLogoff)
        {
    
        }
        else if (e.Reason == SessionSwitchReason.SessionUnlock || e.Reason == SessionSwitchReason.RemoteConnect || e.Reason == SessionSwitchReason.SessionLogon)
        {
    
        }
    }

    >ワークステーション解除を条件に何か処理をするアプリを作りたいです。EventLogが無理そうなら、代わりになる監視方法があったら教えて下さい。
    PCがロックされているときに、アプリで監視したり、何か変更したりすることをお薦めしません。
    あなたや他人のPCの機密情報が漏れる可能性があると思います。


    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク mexicanafro 2020年11月11日 8:16
    2020年11月6日 9:17
    モデレータ

すべての返信

  • mexicanafroさん、こんにちは。フォーラムオペレーターのKumoです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    私側でテストしてみて、コードはリモートデスクトップでユーザーとワークステーションを正しく表示され、うまくいきました。
    そのため、どのように対象PCに接続するのか教えていただけませんか。
    もしくは、対象PCに接続するために使用しているツールを教えてください。

    どうぞよろしくお願いいたします。 

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2020年11月2日 7:43
    モデレータ
  • お世話になります。

    接続の方法については、社内のデスクトップPCを監視対象にしており、社内ネットワーク環境で利用します。

    このPCを自宅や社内の別PCからリモート接続、又はリモート接続中に、直接PCを操作してログインしたときのワークステーションのロック状態を監視していました。

    ログイン等に利用したアカウントはテストなので自分のアカウントだけです。

    ①サインイン中の対象PCにリモート接続

    →何度かワークステーションのロック、ロック解除がなされ、最終的にロック解除で落ち着きました。

    ②リモート接続中の対象PC→直接PCへサインイン

    →何度かワークステーションのロック、ロック解除がなされ、最終的にロックで落ち着きました。

    ②の場合、PCを使い続けている間は、ずっとロック解除のアナウンスはありませんでした。

    試しに、手動でロックし、パスワードを入れて画面復帰すると、ロック解除のアナウンスが出ました。

    この位の情報でしかありませんが、何かのきっかけになれば幸いです。

    以上、よろしくお願いいたします。


    2020年11月4日 23:05
  • mexicanafroさん、こんにちは。フォーラムオペレーターのKumoです。
    ご返信いただきありがとうございます。

    以下は、頂いた質問の回答です。
    >リモート接続から戻ったとき、解除のアナウンスを受けるための方法。(プログラム等で改善しますか?)
    下記のコードを使って、リモート接続はロックされているかどうかを確認してください。
    SystemEvents.SessionSwitch += new SessionSwitchEventHandle SystemEvents_SessionSwitch);
    void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
    {
        if (e.Reason == SessionSwitchReason.SessionLock || e.Reason == SessionSwitchReason.RemoteDisconnect || e.Reason == SessionSwitchReason.SessionLogoff)
        {
    
        }
        else if (e.Reason == SessionSwitchReason.SessionUnlock || e.Reason == SessionSwitchReason.RemoteConnect || e.Reason == SessionSwitchReason.SessionLogon)
        {
    
        }
    }

    >ワークステーション解除を条件に何か処理をするアプリを作りたいです。EventLogが無理そうなら、代わりになる監視方法があったら教えて下さい。
    PCがロックされているときに、アプリで監視したり、何か変更したりすることをお薦めしません。
    あなたや他人のPCの機密情報が漏れる可能性があると思います。


    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク mexicanafro 2020年11月11日 8:16
    2020年11月6日 9:17
    モデレータ
  • サンプルコードのご提供ありがとうございます。

    テストしたところ、欲しい情報が取得できました。助かりました。

    >PCがロックされているときに、アプリで監視したり、何か変更したりすることをお薦めしません。
    >あなたや他人のPCの機密情報が漏れる可能性があると思います。

    了解です。気を付けます。

    今回は、本当にありがとうございました。


    • 編集済み mexicanafro 2020年11月11日 4:06
    • 回答としてマーク mexicanafro 2020年11月11日 8:18
    • 回答としてマークされていない mexicanafro 2020年11月11日 8:18
    2020年11月11日 1:56