1

次のようにします。グローバル名前空間に登録されたイベントを作成し、そのDACLを次のように変更します。

  • 通常のユーザーはイベントの状態を読み取ることができます(タイムアウト値が0のWaitForSingleObjectを使用)
  • 管理者はイベントステータスを変更できます(SetEventまたはResetEvent

さらに、イベントは、ほとんどの場合、アプリケーションの初期化中に管理者以外のユーザーによって最初に作成されます

ターミナルサービスサーバーのシステム管理者が、アプリケーションに属するすべてのプロセス(多数あります)に、できるだけ早く終了してロックしたままにする必要があるというシグナルを送信できるようにするという考え方です。これは、すべてのユーザーセッションで機能する必要がありますが、セキュリティの層も提供する必要があります。

作成中にイベントオブジェクトに適切なDACLを見つけるのに苦労しています。オブジェクトの状態を変更する機能を管理者のみに制限できないようです。

ConvertStringSecurityDescriptorToSecurityDescriptorSSDL文字列からDACLを作成するために使用しています。これが私が実際のサンプルに最も近いものです:

Format('D:(A;OICI;GA;;;BA)(A;OICI;0x%.8xF;;;WD)',[(SYNCHRONIZE)])

これはALL_ACCESS、組み込みAdministratorsグループのメンバーとSYNCHRONIZEに与える必要がありEVERYONEます。

残念ながら、結果のACLは希望どおりに機能しません。結果のオブジェクトの状態をProcessExplorerで確認すると、管理者には(必要に応じて)すべての権限がありますが、全員に「状態の変更」権限が設定されていることがわかります。

これが問題になる場合は、Delphi6を使用しています。結果のアプリケーションはWindows2003 Server/XP以降と互換性がある必要があります。

前もって感謝します

4

1 に答える 1

1

0x%.8xF2番目のACEでは、値がに設定されるように(末尾の「F」に注意)を含むフォーマット文字列を使用してアクセス権を設定し(SYNCHRONIZE<<4) | 0xFます。

EVENT_MODIFY_STATE0x0002そのため、この許可が含まれています。

末尾の「F」を失うと、機能するはずです。

于 2012-08-08T07:32:21.047 に答える