0

誰かが私のサーバにログオンすると、自動的にいくつかのタスクを実行するプログラムを書いてみたいと思います。このに関するWindowsサーバー2003/2008のユーザーログインを監視する方法は?

私の質問は以下のとおりです。

  • 1) は私 目的のために/モニタを使用することができます 、ユーザーがログインした後、右に設定されていることを最後のログイン記録がありますか?そうでない場合は何かがあります 私は使用できますか?

  • 2)常にこのような値を監視するには、 が最適です。

+1

管理タスクでは、すべての管理者がこれを行う方法を知っている必要があります。頼む。 – leppie

答えて

5

SERVICE_CONTROL_SESSIONCHANGEコントロールを受け入れるサービスを作成するのが最も良い方法です。

これにより、サービスコントロールハンドラは、ユーザーがログオン、ログオフ、セッションのロック、およびその他のさまざまなオプションを実行するたびにコントロールを受け取ることができます。リンクブローでもっと情報を探してください。

これは、次のように、dwControlsAcceptedにSERVICE_ACCEPT_SESSIONCHANGEフラグを持ってサービスを作成することによって行われます:

続く
SERVICE_STATUS ss; 
... 
ss.dwControlsAccepted |= SERVICE_ACCEPT_SESSIONCHANGE; 

:これは窓があなたにSERVICE_CONTROL_SESSIONCHANGEコントロールを送信することができます

// This lets the service accept the session change ctrls 
// The service handle here is received by calling RegisterServiceCtrlHandler 
SetServiceStatus(hServiceHandle, 
       &ss); 

HandlerEx関数は次のようになります。

DWORD WINAPI HandlerEx(DWORD dwControl, 
         DWORD dwEventType, 
         LPVOID lpEventData, 
         LPVOID lpContext) 
{ 
    switch (dwControl) 
    { 
    ...// Regular control handling 
     case (SERVICE_CONTROL_SESSIONCHANGE): 
      switch(dwEventType) 
      { 
       case(WTS_SESSION_LOGON): 
        // Handle logon 
       break; 

       case(WTS_SESSION_LOCK): 
        // Handle lock 
       break; 
       ... 
      } 
     break; 

     ... 
    } 
} 

WM_WTSSESSION_CHANGEから受け取ることができるさまざまなセッション変更通知をすべて読むことができます。必要な通知は、説明のwParam部分にあります。

これは、とにかくその要点です。 handlerex関数の詳細は、HandlerEx、一般的なサービスの詳細についてはService Functionsを参照してください。 ServiceMain関数RegisterServiceCtrlHandler関数を読んだり、MSDNのページに載っている例を読むことをお勧めします。彼らはスーパーに役立ちます。

幸運を祈る!

0

なぜログインスクリプトを展開しないのですか?面倒を省くことができます。

+1

答えはありません(コメントだったはずです)。とにかく、明らかに答えられるのは、ログインスクリプトがログインしているユーザーの権限で実行されるためです。 – MSalters

+0

スクリプトは、サーバーに対して何かをトリガーできます。これにより、別のマシンでタスクをリモートで実行する簡単なオプションも提供されます。 – kichik

関連する問題