您可以从本地系统帐户(即“NT AUTHORITY\SYSTEM”)访问网络共享的方式:
- 您需要使用即使在非域网络中也可以访问网络的本地帐户登录。使用“NT AUTHORITY\NETWORK SERVICE”帐户即可获得此功能
- 添加网络共享连接并指定其访问凭据:
这里的要点是在 LogonUser() 调用期间使用LOGON32_LOGON_NEW_CREDENTIALS登录类型(有关详细信息/限制,请参阅 MSDN)。否则在执行 WNetAddConnection2() 时你会得到 ERROR_NO_SUCH_LOGON_SESSION,即使 LogonUser 和模拟成功。
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);
笔记
- 模拟仅适用于当前线程。
- 使用本地资源,它将作为 LocalSystem 工作,添加共享后,它将作为 WNetAddConenction2 中指定的远程计算机上的用户(在本例中为 SomeComputer 上的管理员)。
- 您可以在 NETRESOURCE 中省略使用驱动器号,并通过“\server\share\filename.ext”表示法访问文件
- 这可能不适用于某些旧系统(NT/2000,不知道确切列表)