Сбор журналов событий с использованием API-интерфейсов Windows без прав администратора

Я пытаюсь собрать журналы событий, и я хочу сделать это без прав администратора.

Это мой код ..

#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 файл журнала без каких-либо прав администратора, поэтому есть ли способ сделать это.

0

Решение

Сбор файлов журнала событий может быть невозможен, если у вас нет соответствующих повышенных привилегий.

Но вы можете использовать все события, используя запросы XPATH.
Вы используете какой-то XML-парсер, чтобы разобрать их позже.

Вот как это сделать:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx

0

Другие решения

Отдельные разрешения предоставляются 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 журналы в нужном месте.

0

По вопросам рекламы [email protected]