您可以從本地系統帳戶訪問網絡共享的方式(這是「NT AUTHORITY \ SYSTEM」):
- 您需要登錄使用具有訪問一些本地帳戶網絡計,即使在非 - 域網。這足以用「NT AUTHORITY \ NETWORK SERVICE」帳戶來此
- 添加網絡共享連接與指定它的訪問憑據:
,這裏的要點是LogonUser的過程中使用LOGON32_LOGON_NEW_CREDENTIALS登錄類型()呼叫(請參閱MSDN瞭解詳細信息/限制)。否則,即使LogonUser和模擬成功,您在執行WNetAddConnection2()時也會得到ERROR_NO_SUCH_LOGON_SESSION。
LogonUser("NETWORK SERVICE", "NT AUTHORITY", NULL, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &hToken);
ImpersonateLoggedOnUser(hToken);
NETRESOURCE nr;
nr.dwScope = RESOURCE_GLOBALNET;
nr.dwType = RESOURCETYPE_DISK;
nr.dwUsage = RESOURCEUSAGE_CONNECTABLE;
nr.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE;
nr.lpRemoteName = "\\\\SomeCopmuter\\C$";
nr.lpLocalName = "Z:";
WNetAddConnection2(&nr, "password", "Administrator", 0);
注意
- 模擬鑊只對當前線程。
- 與當地的資源,將工作作爲本地系統中,隨加份額它將作爲用戶工作在WNetAddConenction2指定的遠程計算機上(在這種情況下 - 上SomeComputer管理員)。
- 您可以省略使用NETRESOURCE和訪問文件的驅動器盤符通過「\服務器\共享\文件名。EXT」符號
- 這可能不是在某些老的系統工作(NT/2000,不知道確切的名單)
到目前爲止,我發現從LocalSystem服務調用WNetAddConnection2()可在Windows 7上工作,但在XP上失敗。 到目前爲止,我總是嘗試與交互式登錄到機器的用戶。如果其他用戶登錄到遠程機器,我認爲這對服務無關緊要,但我可能是錯的。 – Flavio 2010-06-08 09:56:17