2016-10-03 6 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에 경로를 표시하려고 시도합니다.

관리자 권한없이 해당 .evtx 로그 파일을 복사하려고합니다. 그렇게 할 방법이 있습니다.

답변

0

별도의 권한은 우리가 eventvwr를 열 때마다 이벤트 로그 API를 사용하여 우리가 eventlogs.So를 얻을 수 있도록 자사의 이벤트 로그 권한을 통해 열리지의 EventLog에게 주어집니다 .

인증 된 사용자가 이벤트 로그를 가져 오려면 이벤트 로그 API를 사용해야합니다. EvtExportLog의 네 번째 매개 변수는 이벤트가 채널 또는 로그 파일에서 온 것인지 여부를 나타내는 값을 정의하는 EVT_EXPORTLOG_FLAGS 입니다.

그래서 위의 코드에서 인증 된 사용자는 우리가 EvtExportLogFilePath에서 EvtExportLogChannelPathEvtExportLog에서 플래그를 변경해야 할 일, 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 로그를 제공 할 것입니다.