模拟管理员用户时使用 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 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 页面模拟失败:页面令牌与用户令牌相同

WCF 模拟不是模拟管理员

Kali Linux 秘籍 第七章 权限提升

UNLocationNotificationTrigger - 不在模拟器中工作

使用模拟时获取真实登录用户

杨老师课堂_Java核心技术下之控制台模拟文件管理器案例