在模拟管理员用户时使用AddIPAddress时出现问题

时间:2009-05-20 13:54:26

标签: c++ c winapi network-programming

我尝试以非管理员用户身份登录时使用AddIPAddress向NIC添加临时IP地址。 AddIPAddress的MSDN文档指出,如果非管理员用户调用该函数,则返回错误ERROR_INVALID_HANDLE。

鉴于我已经在使用对LogonUser()和ImpersonateLoggedOnUser()的API调用的AddIPAddress调用之前。现在我的应用程序认为它以管理员身份登录,但AddIPAddress仍然失败,并且ERROR_INVALID_HANDLE。

MSDN还声明......

“注意组策略,企业策略和网络上的其他限制可能会阻止这些功能成功完成。在尝试使用这些功能之前,请确保应用程序具有必要的网络权限。”

是否可以使用模拟调用AddIPAddress?如果是这样的话?我猜我需要更改上面提到的权限,但我不知道在这方面要做什么。

任何帮助将不胜感激!

Additonal:我还尝试使用CreateProcessAsUser调用netsh(再次以普通用户身份登录),并使用模拟管理员用户的句柄启动该进程。始终返回错误,表明没有特权。

1 个答案:

答案 0 :(得分:1)

如果您使用的是Windows Vista,则可能需要提升权限。

默认情况下,在Vista中启用UAC。这使得即使作为管理员,您也使用有限的用户令牌,除非您明确提升。执行此操作时,将向用户显示允许或拒绝请求的对话框。

有关详细信息,请参阅Windows Vista Application Development Requirements for User Account Control Compatibility

您可能需要尝试使用CheckTokenMembership来验证您以管理员身份登录后是否已正确升级。我怀疑你获得了有限的用户令牌,从而没有获得特权资源的请求。

祝你好运。