繁体   English   中英

EvtExportLog API 将远程机器的事件日志保存在远程 PC 本身中。 如何将其保存到主机 PC?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM