我有一個將事件日誌以所需格式存檔到文件的功能。使用WMI備份應用程序事件日誌時需要seBackupPrivilige
我正在測試Windows事件日誌,Application
,Security
和System
。在所有測試中,代碼都以本地管理員權限運行。
在我的開發環境中,代碼將每個日誌文件備份到我們稱爲「* .evt」文件的所有文件中。
在目標參考系統上,Security
和System
日誌正常工作,但處理Application
日誌會拋出ManagementException
。
以下包括異常的一個interogation。我的問題是,我有權假定這是一個安全特權問題?哪些代碼更改會使此代碼適用於我所需的所有情況?如果沒有明確的答案,你的想法和想法是值得讚賞的。
錯誤碼:存取遭拒
ErrorInformation:說明:打開日誌文件,但未能對其進行備份,privilige錯誤
操作:ExecMethod
的ParameterInfo:Win32_NTEventlogFile.Name =「C:\ WINDOWS \ system32 \ config \ AppEvent.Evt「
特權不可用: - SeBackupPrivilege
PrivilegesRequired: - SeBackupPrivilege
的ProviderName:WINMGMT
的StatusCode:2147749891
using System.Management;
/* ... Omitted for brevity */
public static void WMIBackup(String logName, String targetFile)
{
ManagementScope scope = new ManagementScope("root\\CIMV2");
scope.Options.Impersonation = ImpersonationLevel.Impersonate;
scope.Options.EnablePrivileges = true;
ObjectQuery query = new ObjectQuery(
String.Format("SELECT * FROM Win32_NTEventLog WHERE LogFileName={0}",
logName)
);
using (ManagementObjectSearcher search =
new ManagementObjectSearcher(scope, query))
{
var logs = search.Get();
if (logs.Count != 1)
throw new ArgumentOutOfRangeException("logName not found");
foreach (ManagementObject log in logs)
{
ManagementClass eventLogClass =
new ManagementClass("Win32_NTEventLogFile");
ManangementBaseObject params =
eventLogClass.GetMethodParameters("BackupEventLog");
params["ArchiveFileName"] = targetFile;
log.InvokeMethod(
"BackupEventLog",
params,
new InvokeMethodOptions(
null,
InvokeMethodOptions.InfiniteTimeout)
);
}
}
}
所有數據被轉錄這樣的道歉勘誤表。
該死的,我複製這個代碼一對一,它開始失敗。我花了一段時間才明白爲什麼。事實證明,他搞砸了查詢。它應該是'選擇*從Win32_NTEventLogFile其中LogFileName = {0}'而不是。 – c00000fd 2018-02-25 11:30:21
@ c00000fd已更新。 – Jodrell 2018-02-26 15:03:31