【问题标题】:EvtExportLog API is saving eventlog of remote machine in remote PC itself. How can I save it to host PC?EvtExportLog API 将远程计算机的事件日志保存在远程 PC 本身中。如何将其保存到主机 PC?
【发布时间】:2020-02-24 09:14:39
【问题描述】:

我使用EvtOpenSession API 来创建到远程机器的事件日志的会话,然后使用会话句柄调用EvtExportLog API。我需要主机 PC 中的事件日志文件(我在其中运行此应用程序),但此 API 将事件日志转储到远程机器本身。我应该怎么做才能在主机 PC 中获取事件日志?

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

这是我使用的代码sn-p

......

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;
   }

}

......

【问题讨论】:

    标签: c++ windows winapi event-log


    【解决方案1】:

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

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

    参考:How do you create a file share on a remote system?

    日志保存到远程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 文件属性。有关详细信息,请参阅 检索和更改文件属性。

    如果目标文件,此函数将失败并返回 ERROR_ACCESS_DENIED 已经存在并且具有 FILE_ATTRIBUTE_HIDDEN 或 FILE_ATTRIBUTE_READONLY 属性集。

    当 CopyFile 用于复制加密文件时,它会尝试 使用加密中使用的密钥加密目标文件 源文件。如果无法做到这一点,此函数将尝试 使用默认密钥加密目标文件。如果这些都不是 方法可以完成,CopyFile 失败并出现 ERROR_ENCRYPTION_FAILED 错误代码。

    参考:https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-copyfile#remarks

    希望能帮到你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      相关资源
      最近更新 更多