Я пытаюсь собрать журналы событий, и я хочу сделать это без прав администратора.
Это мой код ..
#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();
}
Когда я пытаюсь сделать это, я получаю ошибку Access Denied. Я могу просматривать журналы событий, используя eventvwr
и я могу получить путь к файлу журнала, который %SystemRoot%\System32\Winevt\Logs\System.evtx
, но опять же, когда я пытаюсь просмотреть его, поставив путь на run
мне отказано в доступе.
Я хочу скопировать это .evtx
файл журнала без каких-либо прав администратора, поэтому есть ли способ сделать это.
Сбор файлов журнала событий может быть невозможен, если у вас нет соответствующих повышенных привилегий.
Но вы можете использовать все события, используя запросы XPATH.
Вы используете какой-то XML-парсер, чтобы разобрать их позже.
Вот как это сделать:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx
Отдельные разрешения предоставляются EventLog
Таким образом, используя API журнала событий, мы можем получить журнал событий. Поэтому, когда мы открываем eventvwr
его открыть через разрешения журнала событий.
Поэтому, если аутентифицированный пользователь хочет получить журналы событий, он должен пройти через API журнала событий. Четвертый параметр в EvtExportLog
является EVT_EXPORTLOG_FLAGS
который определяет значения, которые указывают, поступают ли события из канала или файла журнала.
Таким образом, в приведенном выше коде аутентифицированный пользователь не может получить доступ к файлу журнала событий без API журнала событий, который eventvwr
Чтобы сделать это, мы должны изменить флаг в EvtExportLog
как EvtExportLogChannelPath
от EvtExportLogFilePath
,
Таким образом, приведенный выше код может быть изменен как …
#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
журналы в нужном месте.