[英]EvtExportLog API is saving eventlog of remote machine in remote PC itself. How can I save it to host PC?
我使用EvtOpenSession
API 创建到远程机器EvtExportLog
的会话,然后使用会话句柄调用EvtExportLog
API。 我需要主机 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
不能用于将远程机器的EvtExportLog
保存到主机 PC。 但是对于这个问题,您可以使用解决方法。
因为此行为是设计的,因为所有操作都基于 RPC 服务器。 要将事件日志保存在本地 PC 上,我们可以在远程 PC 上创建一个共享文件夹,用于保存远程事件日志。
参考: 如何在远程系统上创建文件共享?
日志保存在远程PC上后,我们可以使用CopyFile将日志从远程PC上的共享文件夹复制到本地PC。
注意:Windows 7、Windows Server 2008 R2、Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:在 Windows 8 和 Windows Server 2012 之前,不会将现有文件的安全资源属性复制到新文件中。
现有文件的文件属性被复制到新文件中。 例如,如果现有文件具有 FILE_ATTRIBUTE_READONLY 文件属性,则通过调用 CopyFile 创建的副本也将具有 FILE_ATTRIBUTE_READONLY 文件属性。 有关更多信息,请参阅检索和更改文件属性。
如果目标文件已经存在并且设置了 FILE_ATTRIBUTE_HIDDEN 或 FILE_ATTRIBUTE_READONLY 属性,则此函数将失败并显示 ERROR_ACCESS_DENIED。
当 CopyFile 用于复制加密文件时,它会尝试使用加密源文件时使用的密钥来加密目标文件。 如果无法做到这一点,该函数将尝试使用默认密钥加密目标文件。 如果这两种方法都无法完成,则 CopyFile 将失败并显示 ERROR_ENCRYPTION_FAILED 错误代码。
参考: https : //docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-copyfile#remarks
希望能帮到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.