EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机

EvtExportLog API is saving eventlog of remote machine in remote PC itself. How can I save it to host PC?

本文关键字:保存 PC 主机 本身 事件 API 计算机 EvtExportLogneneneba 日志      更新时间:2023-10-16

我使用EvtOpenSessionAPI创建了一个到远程机器事件日志的会话,然后使用会话句柄调用EvtExportLogAPI。我需要主机PC中的事件日志文件(我运行这个应用程序的地方(,但这个API正在将事件日志转储到远程机器本身。我应该怎么做才能在主机PC中获取事件日志?

我也尝试过在主机PC中使用共享路径(而不是_T("C:\Test\EventLogApplication.evt"(,我使用了_T("\\ComputerName\Events\EventLogApplication.evt"(。在这种情况下,我遇到了访问冲突错误。

这是我使用的代码片段

......
hRemote = EvtOpenSession(EvtRpcLogin, &Credentials, 0, 0);
if (hRemote)    
{
if (!EvtExportLog(hRemote, _T("Application"), NULL,_T("C:\Test\EventLogApplication.evt"), EvtExportLogChannelPath))    
{
std::cout << "Error-Code : " << GetLastError() << std::endl;
}
}
......

据我所知,EvtExportLog不能用于将远程机器的事件日志保存到主机上。但对于这个问题,您可以使用解决方法。

因为这种行为是由设计的,因为所有的操作都是基于RPC服务器的。要将事件日志保存在本地电脑上,我们可以在远程电脑上创建一个共享文件夹来保存远程事件日志。

参考:如何在远程系统上创建文件共享?

在远程电脑上保存日志后,我们可以使用CopyFile将日志从远程电脑上的共享文件夹复制到本地电脑。

注意:Windows 7、Windows Server 2008 R2、Windows Server 08、WindowsVista、Windows Server 2003和Windows XP:安全资源现有文件的属性直到Windows 8和Windows Server 2012。

现有文件的文件属性将复制到新文件中。对于例如,如果现有文件具有file_ATTRIBUTE_READONLY文件属性,通过调用CopyFile创建的副本也将具有FILE_ATTRIBUTE_READONLY文件属性。有关详细信息,请参阅检索和更改文件属性。

如果目标文件已存在并且具有FILE_ATTRIBUTE_HIDDEN或FILE_ATTRIBUTE_READONLY属性集。

当CopyFile用于复制加密文件时,它会尝试使用加密中使用的密钥加密目标文件源文件。如果无法做到这一点,此函数将尝试使用默认密钥加密目标文件。如果这两者都没有方法,则CopyFile失败并返回ERROR_ENCRYPTION_FAILED错误代码。

请参阅:https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-copyfile#remarks

希望能帮助你。