在没有管理员权限的情况下使用 Windows API 收集事件日志
Collecting Event Logs using Windows APIs without Admin privileges
我正在尝试收集事件日志,但我想在没有管理员权限的情况下进行。
这是我的代码..
#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
日志文件,所以有什么办法可以做到这一点。
如果您没有适当的提升权限,可能无法收集事件日志文件。
但是,您可以使用 XPATH 查询使用所有事件。
您可以使用一些 XML 解析器稍后解析它们。
操作方法如下:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx
单独的权限被赋予 EventLog
,因此通过使用事件日志 API,我们可以在每次打开 eventvwr
时获取 eventlogs.So,它通过事件日志权限打开。
因此,如果经过身份验证的用户想要获取事件日志,他必须通过事件日志 API。 EvtExportLog
中的第四个参数是EVT_EXPORTLOG_FLAGS
它定义了指示事件是来自通道还是日志文件的值。
所以在上面的代码中,经过身份验证的用户无法在没有 eventvwr
事件日志 API 的情况下访问事件日志文件,为此我们必须将 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
日志。
我正在尝试收集事件日志,但我想在没有管理员权限的情况下进行。
这是我的代码..
#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
日志文件,所以有什么办法可以做到这一点。
如果您没有适当的提升权限,可能无法收集事件日志文件。
但是,您可以使用 XPATH 查询使用所有事件。 您可以使用一些 XML 解析器稍后解析它们。
操作方法如下: https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx
单独的权限被赋予 EventLog
,因此通过使用事件日志 API,我们可以在每次打开 eventvwr
时获取 eventlogs.So,它通过事件日志权限打开。
因此,如果经过身份验证的用户想要获取事件日志,他必须通过事件日志 API。 EvtExportLog
中的第四个参数是EVT_EXPORTLOG_FLAGS
它定义了指示事件是来自通道还是日志文件的值。
所以在上面的代码中,经过身份验证的用户无法在没有 eventvwr
事件日志 API 的情况下访问事件日志文件,为此我们必须将 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
日志。