2016-10-03 55 views
0

我正在嘗試收集事件日誌,並且希望在沒有管理員權限的情況下執行此操作。使用沒有管理員權限的Windows API收集事件日誌

這是我的代碼..

#include "stdafx.h" 
#pragma comment(lib, "wevtapi.lib") 
#include <Windows.h> 
#include <winevt.h> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    BOOL flag=EvtExportLog(
        NULL, 
        L"%SystemRoot%\\System32\\Winevt\\Logs\\System.evtx", 
        L"*", 
        L"D:\\SomePath\\Des.evtx", 
        EvtExportLogFilePath 
      ); 
    int i = GetLastError(); 
} 

當我嘗試這樣做,我得到拒絕訪問錯誤。我能夠查看使用eventvwr事件日誌,我可以得到這%SystemRoot%\System32\Winevt\Logs\System.evtx日誌文件的路徑,但是當我再次嘗試穿上run路徑我得到Access denied進行查看。

我想複製.evtx日誌文件,而無需任何管理權限,那麼,有沒有辦法做下去。

回答

0

單獨的權限給予EventLog,所以通過使用事件日誌的API,我們可以得到eventlogs.So每當我們打開eventvwr其通過事件日誌的權限得到開。

因此,如果通過身份驗證的用戶想要得到他去thruogh事件日誌的API的事件日誌時。 EvtExportLog中的第四個參數是EVT_EXPORTLOG_FLAGS ,它定義的值指示事件是來自頻道還是日誌文件。

所以在上面的代碼驗證的用戶不能沒有事件日誌的API是eventvwr訪問事件日誌文件,要做到這一點,我們必須爲EvtExportLogChannelPathEvtExportLogFilePath更改EvtExportLog的標誌。

所以上面的代碼可以被修改爲...

#include "stdafx.h" 
#pragma comment(lib, "wevtapi.lib") 
#include <Windows.h> 
#include <winevt.h> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    BOOL flag=EvtExportLog(
        NULL, 
        L"System", 
        L"*", 
        L"D:\\SomePath\\Des.evtx", 
        EvtExportLogChannelPath 
      ); 
    int i = GetLastError(); 
} 

此代碼將在所希望的位置得到SYSTEM日誌。

相關問題