【发布时间】:2009-05-20 13:54:25
【问题描述】:
当我以非管理员用户身份登录时,我正在尝试使用 AddIPAddress 将临时 IP 地址添加到 NIC。 AddIPAddress 的 MSDN 文档指出,如果函数由非管理员用户调用,则 ERROR_INVALID_HANDLE 作为错误返回。
鉴于我已经在调用 AddIPAddress 之前使用了对 LogonUser() 和 ImpersonateLoggedOnUser() 的 API 调用。现在我的应用程序认为它以管理员身份登录,但 AddIPAddress 仍然失败并显示 ERROR_INVALID_HANDLE。
MSDN 还声明..
“注意网络上的组策略、企业策略和其他限制可能会阻止这些功能成功完成。在尝试使用这些功能之前,请确保应用程序具有必要的网络权限。”
是否可以使用模拟调用 AddIPAddress?如果是这样怎么办?我猜我需要更改上面提到的权限,但我不知道在这方面要更改什么。
任何帮助将不胜感激!
附加:在尝试调用 netsh(再次以普通用户身份登录)时,我还画了一个空白,使用 CreateProcessAsUser 使用模拟管理员用户的句柄来启动进程。总是返回指示权限不足的错误。
【问题讨论】:
-
确实,试图让它工作但没有成功。 LogonUser/ImpersonateLoggedOnUser 和 CoInitializeSecurity 都没有帮助。似乎需要深入研究 GpEdit.msc。
-
感谢您花时间研究此问题。我还是不敢相信它会这么难实现!
-
相关配置好像在GpEdit.msc,用户配置,网络,网络连接。 (我是从 Windows 的德语副本翻译过来的,所以名称可能会略有不同。)如果您实际上以管理员身份运行代码,它是否有效?
-
是的,如果您以管理员身份运行,它确实有效。事实上,这就是我最终不得不做的。不必这样做就好了!
-
您使用的是哪个版本的 Windows?
标签: c++ c winapi network-programming