簡體   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