我在Windows 2003 Server上需要訪問webdav資源作爲UNC路徑的服務。此服務的目的是驗證(並採取糾正措施)webdav功能,以共享點。這個想法是寫一個文件到共享點,並驗證它的內容。如果出現問題並且超出閾值,則mrxdav和webclient服務將重新啓動。從服務訪問WebDav資源時訪問被拒絕
我在2003服務器上的本地管理員的服務帳戶下運行該服務,並且可以訪問sharepoint「文件夾」。 (我通過使用服務帳戶登錄並將文件寫入同一文件夾進行驗證)。
當服務嘗試將文件寫入到這個文件夾失敗並訪問被拒絕,過程監控顯示,該服務在LocalSystem下運行,並冒充我的服務帳戶
我也嘗試使用LogonUser和LogonUserEx(具有登錄交互式,網絡,網絡明文和提供程序的各種選項)模仿我的代碼中的服務帳戶,然後使用ImpersonateUser,但都導致相同的ACCESS DENIED。
我認爲這是特定於使用WebClient服務的服務的內容。 我的代碼是用Delphi編寫的,但我也添加了c標籤以吸引更多的讀者,因爲我不認爲我的問題是Delphi相關的。
編輯:也許相關,我正在運行一個單獨的線程,實際上訪問WebDav共享。
編輯:作爲一種變通方法,我創建使用顯式憑據使用下面的代碼的網絡連接:
function TGuardThread.Map(const Username: String; var Password: String;
const Domain: String): Boolean;
var
nr: NETRESOURCE;
dwRes: DWORD;
begin
try
ZeroMemory(@nr, SizeOf(nr));
nr.dwType := RESOURCETYPE_ANY;
nr.lpRemoteName := PChar('\\mywebdavroot\myfolder');
dwRes := WNetAddConnection2(nr, PChar(Password),
PChar(Format('%s\%s', [Domain, Username])), CONNECT_UPDATE_PROFILE);
Result := dwRes = NO_ERROR;
finally
if Length(Password) > 0 then
SecureZeroMemory(@Password[1], Length(Password) * SizeOf(Char));
end;
end;
是不是Windows本地系統通過設計剝離的任何網絡訪問? –
@ Arioch'All LocalSystem是(系統不是)但這就是爲什麼我使用服務(用戶)帳戶運行服務。 – Remko