簡體   English   中英

驗證事件日志寫入權限

[英]Validate Eventlog Write Permission

如何在不使用try catch的情況下驗證事件日志寫入權限? 我已經閱讀了以下問題: 檢查事件日志是否寫入權限而不寫入條目 ,但是答案建議使用EventLogPermissionAttribute 據我所知,我不能使用它來驗證權限,當它沒有所請求的權限時,它只會拋出一個Exception

我的代碼現在看起來像這樣:

public void WriteMessage(string message)
{
    try {
        var trace = new TraceSource("MySource");
        trace.TraceEvent(TraceEventType.Information, 1000, message);
    } catch() {
        var log = LogManager.GetLogger<MyClass>();
        log.Info(message);
    }
} 

但是我想要這樣的事情:

public void WriteMessage(string message)
{
    if(EventLogPermission("MySource"))
    {
        var trace = new TraceSource("MySource");
        trace.TraceEvent(TraceEventType.Information, 1000, message);
    } else {
        var log = LogManager.GetLogger<MyClass>();
        log.Info(message);
    }
}

當然,最后並沒有多大區別,但是使用try catch進行邏輯只會讓人感到骯臟。

    [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
    public static extern int RegOpenKeyEx(
      UIntPtr hKey,
      string subKey,
      int ulOptions,
      int samDesired,
      out UIntPtr hkResult);

    public static UIntPtr HKEY_LOCAL_MACHINE = new UIntPtr(0x80000002u);
    public static int KEY_WRITE = 0x20006;

    /// <summary>
    /// This method checks write permissions to HKLM\SYSTEM\CurrentControlSet\Services\EventLog which is necessary to create event log source
    /// </summary>
    /// <returns>True if permission to create Event log source is granted, false if not</returns>
    public bool HasCurrentUserEventLogWritePermissions()
    {
        UIntPtr x;
        long err = RegOpenKeyEx(HKEY_LOCAL_MACHINE, @"SYSTEM\CurrentControlSet\Services\EventLog", 0, KEY_WRITE, out x);
        return err == 0;
    }

好。 我放棄,這只是告訴您失敗的嘗試。 我搜了一下,反省了一點,答案令人失望:您無法以自己喜歡的方式進行操作。

我試圖找到一種方法來檢查EventLogPermission (通常是安全權限)而不會出現異常:FAILED。

嘗試打開RegKey而沒有異常:FAILED。

實際上,那里有非托管的API可能有用,但是我認為如果您的應用程序甚至缺少EventLogPermission ,誰會給它提供SecurityUnmngdCodeAccess

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM