2016-10-03 16 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(); 
} 

私はこれをしようとすると、私がアクセス拒否エラーが発生します。私はを使ってイベントログを見ることができます。そして、%SystemRoot%\System32\Winevt\Logs\System.evtxのログファイルのパスを取得できますが、再度パスを入れてみるとrunにアクセスが拒否されます。

管理者権限なしでその.evtxログファイルをコピーしたいので、そうする方法があります。

答えて

0

洗面所独立の権限は我々がeventvwrを開くたびにイベントログAPIを使用することによって、我々はeventlogs.Soを得ることができるので、そのイベントログの権限によって開かれます、EventLogに与えられています。

したがって、認証されたユーザーがイベントログを取得したい場合、彼はthruogh eventlog APIに進む必要があります。 EvtExportLogの4番目のパラメータは、イベントがチャネルまたはログファイルかどうかを示す値を定義するEVT_EXPORTLOG_FLAGS です。

したがって、上記のコードで認証されたユーザーは、当社がEvtExportLogFilePathからEvtExportLogChannelPathとしてEvtExportLogのフラグを変更する必要があることを行うために、eventvwrでイベントログ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"System", 
        L"*", 
        L"D:\\SomePath\\Des.evtx", 
        EvtExportLogChannelPath 
      ); 
    int i = GetLastError(); 
} 

このコードは、所望の位置にSYSTEMログを与えます。

関連する問題