0

システムレベルで実行されるサービスがあります。今、ログオンしているユーザーを追跡したいと思います。以前、GetUserName api からログインしているユーザー名を取得しようとしていましたが、私の場合は毎回「SYSTEM」を返します。

私の場合、ユーザー名にログオンする方法はありますか? または、ログオンしているユーザーを取得できるようにインストールできるフックはありますか?

PS: 私は主に Delphi 2007 で作業していますが、これらの質問は Win32 API に固有のものです。

4

3 に答える 3

3

私は Windows サービスの Delphi の実装に慣れていませんが、サービスが受け入れるコントロールを設定する場合はどこでも、SERVICE_ACCEPT_SESSIONCHANGE を追加する必要があります。次に、HandlerEx コールバック関数で、dwEventType パラメータは WM_WTSSESSION_CHANGE 値の 1 つになり、lpEventData は、イベントのセッション ID を含む WTSSESSION_NOTIFICATION 構造体へのポインタになります。

この情報をターミナル サービス API と共に使用して、誰が何をしたかを判断できます。

于 2009-01-14T15:15:52.060 に答える
1

SENSを使用して、ログイン通知をリッスンしてサブスクライブできます。

于 2009-01-14T15:00:11.110 に答える
0

要件をより具体的にする必要があります。ローカルまたはリモートで、常に複数のユーザーがログオンしている可能性があります。インタラクティブなユーザーだけを気にしますか?

最も一般的な要求は、ローカルでログオンしている対話型ユーザー (物理的にキーボードと画面の前に座っているユーザー) を取得する方法です。続行する方法を決定する前に、考慮しなければならないさまざまな問題があります。MSDN にはWindow Stationsに関する優れたエントリがあり、私よりも状況を説明しています。

于 2009-01-14T15:07:58.613 に答える