2014-08-28 88 views
0

我正在編寫一個程序,它需要能夠將單個文件上傳到SMB共享文件夾。雖然程序將使用用戶指定的憑據運行,但程序可能需要使用不同的憑證訪問SMB文件夾,這些憑證已內置到程序中。我可以使用WNetAddConnection2,但這允許用戶在文件夾上傳時訪問共享。我不能只使用標準I/O訪問共享,因爲我需要使用指定的憑據訪問它,而不是通過登錄用戶的特權訪問。將文件上傳到SMB共享而不允許用戶訪問

有沒有一種簡單的方法可以讓我通過WNetAddConnection2net use將單個文件上傳到具有指定憑據的SMB共享,​​而不會創建半永久連接。

+0

您可以忽略本地名稱,是不是足夠? – MSalters 2014-08-29 08:04:03

+0

忽略本地名稱會阻止連接在資源管理器中顯示,但它仍會顯示在「net use」的輸出中,並且任何其他進程都以相同用戶在同一會話中運行的方式運行。對於OP來說,這可能會或可能不夠。 – 2014-08-29 16:15:37

+0

@AndrewMedico是的,事實並非如此。我可以讓用戶絕對不能訪問共享上的文件。如果分享保證只寫,這不會是一個問題,但由於這個程序將部署在各種環境中,我不能做出這樣的假設。 – 2014-08-29 16:18:06

回答

-1

WNetAddConnection2()旨在將本地名稱映射到遠程位置,如將UNC路徑映射到本地驅動器盤符。您可以簡單地忘記該映射並直接訪問UNC路徑,然後讓上傳線程通過LogonUser()ImpersonateLoggedOnUser()使用模擬來處理憑證。

否則,您可以將上傳邏輯移動到後臺服務中,後臺服務在自己的帳戶中運行,與登錄用戶分開。

+3

使用'LogonUser'要求備用憑證是運行該軟件的主機的有效登錄名。 *可能是這種情況,但決不是保證。 – 2014-08-29 00:40:28

+0

@AndrewMedico是對的。在這種情況下,登錄不一定在主機上有效。 – 2014-08-29 16:08:45

相關問題