模拟管理员用户时使用 AddIPAddress 时出现问题
Posted
技术标签:
【中文标题】模拟管理员用户时使用 AddIPAddress 时出现问题【英文标题】:Problem using AddIPAddress when impersonating an Admin User 【发布时间】: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? 【参考方案1】:如果您使用的是 Windows Vista,您可能需要提升权限。
在 Vista 中默认启用 UAC。这使得即使作为管理员,您也使用有限的用户令牌,除非您明确提升。当您执行此操作时,用户会看到一个允许或拒绝请求的对话框。
有关更多信息,请参阅Windows Vista Application Development Requirements for User Account Control Compatibility。
您可能希望在以管理员身份登录后尝试使用CheckTokenMembership 来验证您是否已正确提升。我怀疑您获得了有限的用户令牌,因此对特权资源的请求失败。
祝你好运。
【讨论】:
谢谢,有机会我会调查的。我通过强制用户以管理员用户身份运行应用程序来解决这个问题。不是我真正想要的,但现在会做。该应用程序需要在所有类型的窗口中运行。以上是关于模拟管理员用户时使用 AddIPAddress 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章