2011-03-09 62 views
1

我使用the following API call確定在終端服務器會話的遠程客戶端的名稱:WTSQuerySessionInformation有時與「拒絕訪問」未能

ret = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, 
           WTS_INFO_CLASS.WTSClientName, buffer, bufferLen) 

通常,當應用程序是在終端運行服務器會話,調用成功(ret!= 0),buffer只返回一個空指針。所以我認爲這是預期的行爲。

然而,在一個客戶的機器上,該功能開始失敗(ret == 0)並且GetLastError返回5:拒絕訪問。 (像往常一樣,顧客聲稱,他的系統配置並沒有以任何方式更改。)

所以,我的問題有以下幾種:

  • 什麼上查詢WTSClientName時的預期行爲非終端服務機器(例如,「常規」Windows 7 PC)?
  • 什麼可能是此錯誤代碼返回的原因?請注意,在我們的測試機器上,即使用戶沒有管理權限,函數調用也會按預期行事(成功和空緩衝區)。

我不知道這是否相關,但我們可以通過從Web應用程序內調用該函數來重現此問題(錯誤5)。但是,這種情況並非如此(這是一個常規的Windows應用程序)。

回答

1

我同意你的看法,並且假設客戶端的一些系統配置發生了變化。要找出文件系統中的更改或註冊表中的哪一個對於WTSQuerySessionInformation很重要,您可以嘗試使用Process Monitor

您也可以讓您的客戶下載該工具,啓動過程監控器,然後啓動您使用的測試程序WTSQuerySessionInformation,保存日誌併發布給您。我想,你會在日誌中看到一些「訪問被拒絕」錯誤。我希望它能幫助您在客戶端計算機的配置中找到問題。

0

我不知道預期的行爲,但在Win7上調用WTSEnumerateSessions時遇到了錯誤代碼5,訪問被拒絕。設置DWORDHKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\AllowRemoteRPC1並立即解決問題。