2013-09-24 53 views
2

我在互聯網上的某個地方發現了這個問題,現在面臨同樣的問題。幾乎沒有變化,我已經在下面修改了問題。:: createFile winApi失敗,出現錯誤5(access_denied)。是殼牌編程或其他解決方案或任何提示。

問:

我想訪問遠程計算機(10.10.20.30)上的一個文件,但我不能瞭解如何登錄該機器在我的計劃。是否有任何簡單的獲取網絡路徑,憑證和返回文件句柄的API?我只想訪問\ 10.10.20.30 \共享文件夾\ test.txt。 任何建議都會有所幫助。

抱歉在編碼意義上不太清楚。 詳細信息: 我想訪問在共享文件夾中共享的文件,但未授予我權限。我正在使用:: CreateFile來獲取文件的漢德爾。但在這種情況下,我正在收回錯誤代碼5(ACCESS_DENIED)。我需要使用用戶(我的客戶端)憑據(用戶名密碼)來訪問共享的文件。我只需要處理文件。告訴我,如果我錯了::在這種情況下,CreateFile無法使用或修改安全屬性,如MSDN所說。 CreateFile在打開現有文件時忽略lpSecurityDescriptor成員。我也想過使用Window shell,但無法解決問題。

問題詳細內容 *那麼需求是這樣的在遠程機器上我沒有EveryOne權限。讓我通過一個例子來解釋。假設有至少3臺計算機的某個域有網絡可以說5個。現在有名稱爲C1(客戶端),C2(目的地),C3,C4,C5。現在在這種情況下,我將在C2機器上創建一個文件(任何類型),並將它放在一個文件夾MyFolder中。現在讓它共享,然後從中刪除EveryOne。之後,添加C5作爲用戶訪問它。現在你可以看到只用:: CreateFile實現來編寫一些代碼,並在機器C1(客戶機)和C5(它有權限)上運行它。你會看到客戶端(C1)會得到錯誤5,這意味着ACCESS_DENIED,但C5會執行它,並將獲得文件句柄......現在我再次重複我的問題,我需要通過我的任何方式獲得文件句柄用戶名和密碼,我的程序將獲得來自C1機.. *手柄

請諮詢我提前 感謝

::的CreateFile失敗,拒絕訪問是shell編程或其他溶液或暗示

+0

也許你需要首先使用[NetUseAdd](http://msdn.microsoft.com/en-us/library/windows/desktop/aa370645(v = vs.85).aspx)函數。如果您可以在Windows資源管理器中打開「\\ 10.10.20.30 \ share folder \」,這應該工作。 –

+0

@MichaelWalz我不允許通過瀏覽器打開它。看到上面的問題細節。 – user2809792

+0

你解決了嗎?是否有任何簡單的獲取網絡路徑,憑證和返回文件句柄的API? – AcidBurn

回答

1

CreateFile失敗ERROR_ACCESS_DENIED這意味着調用CreateFile的過程是在沒有足夠權限執行該操作的用戶帳戶下運行。

您解決了這個問題:

  1. 授予該用戶足夠的權限。
  2. 在具有足夠權限的其他用戶帳戶下運行該過程。或者使用模擬呼叫CreateFile與不同的用戶令牌。
  3. 保護有問題的文件,以便原始低權限用戶有權執行該操作。

這裏的底線是沒有多少編碼可以幫助你。此問題全是關於所討論的文件系統對象的安全性。這是一個管理問題,而不是編程問題。

+0

1.給予用戶足夠的權利。如果你說要手動做,那麼對我來說這是不允許的。如果您要通過遠程機器的代碼變更權限。 (我也在尋找代碼)2.我必須通過我的手段客戶端憑證登錄而不是其他用戶。我不明白這是什麼意思。 ....好像你說的是通過編碼不可能的。但我不能說不可能,除非我100%肯定.....並且感謝您的快速回復...... :) – user2809792

+0

如果您可以繞過安全與客戶端代碼,這將導致安全性破壞。您的下一步是瞭解Windows安全模型。 –

+0

我試過但無法找到任何鏈接。我不是要你爲我搜索它。但如果你有任何想法,請分享。 – user2809792

2

如果您的應用沒有在具有足夠權限訪問該文件的用戶帳戶下運行,那麼您將不得不臨時模擬具有訪問權限的用戶。使用LogonUser()登錄到所需的用戶帳戶並獲取它的標記,然後將該標記傳遞給ImpersonateLoggedOnUser()以模擬該用戶,然後調用CreateFile()(它將使用模擬的權限)並根據需要使用該文件,然後關閉文件並致電RevertToSelf()停止冒充。

相關問題