下記の続き
Windows Event Log の ACL を簡単に取得する方法が判明しました。
Windows Event Log は Windows Vista 以降で追加されたものですが、Windows Vista 以降では Windows Event Log を管理する command utility “Wevtutil.exe” が追加されています。これを利用することで、下記のようにして簡単に ACL を取得することができます。
>wevtutil.exe gl "Application"
name: application
enabled: true
type: Admin
owningPublisher:
isolation: Application
channelAccess: O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x7;;;SO)(A;;0x3;;;IU
)(A;;0x3;;;SU)(A;;0x3;;;S-1-5-3)(A;;0x3;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)
logging:
logFileName: %SystemRoot%\System32\Winevt\Logs\application.evtx
retention: false
autoBackup: false
maxSize: 20971520
publishing:
"channelAccess" に表示されている SDDL が ACL ですね。
設定は下記のようにして行います。
>wevtutil.exe sl "Application" /ca:"%SDDL%"
"%SDDL%" には設定する ACL を SDDL 形式にて指定してください。
さて、この設定はどこに施されるのでしょう?
確認したところ、application log の場合旧来と同じく下記に設定されることが確認できました。
HKLM\System\CurrentControlSet\Services\Eventlog\Application\CustomSD
Vista 以降で追加された channel に関しては下記ですね。
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\%ChannelName%\ChannelAccess
ということで、旧来から存在する event log に関しては設定個所は同じであることがわかりました。
なお、command line utility は紹介しましたが、API はどうなのかというと存在するようです。
EvtOpenChannelConfig Function で EVT_HANDLE 取得して、EvtGetChannelConfigProperty Function に EVT_CHANNEL_CONFIG_PROPERTY_ID Enumeration の EvtChannelConfigAccess を指定して呼び出せばよさげですね。
設定は EVT_HANDLE 取得した後に EvtSetChannelConfigProperty Function で設定して EvtSaveChannelConfig Function で保存。
最後に忘れちゃいけない後始末ってことで、EvtClose Function 呼んどきましょ。
多分これでいけると思います。時間あるときに検証してみます。
<追記>Sample ありました。
Getting and Setting a Channel's Configuration Properties