我尝试以非管理员用户身份登录时使用AddIPAddress向NIC添加临时IP地址。 AddIPAddress的MSDN文档指出,如果非管理员用户调用该函数,则返回错误ERROR_INVALID_HANDLE。
鉴于我已经在使用对LogonUser()和ImpersonateLoggedOnUser()的API调用的AddIPAddress调用之前。现在我的应用程序认为它以管理员身份登录,但AddIPAddress仍然失败,并且ERROR_INVALID_HANDLE。
MSDN还声明......
“注意组策略,企业策略和网络上的其他限制可能会阻止这些功能成功完成。在尝试使用这些功能之前,请确保应用程序具有必要的网络权限。”
是否可以使用模拟调用AddIPAddress?如果是这样的话?我猜我需要更改上面提到的权限,但我不知道在这方面要做什么。
任何帮助将不胜感激!
Additonal:我还尝试使用CreateProcessAsUser调用netsh(再次以普通用户身份登录),并使用模拟管理员用户的句柄启动该进程。始终返回错误,表明没有特权。
答案 0 :(得分:1)
如果您使用的是Windows Vista,则可能需要提升权限。
默认情况下,在Vista中启用UAC。这使得即使作为管理员,您也使用有限的用户令牌,除非您明确提升。执行此操作时,将向用户显示允许或拒绝请求的对话框。
有关详细信息,请参阅Windows Vista Application Development Requirements for User Account Control Compatibility。
您可能需要尝试使用CheckTokenMembership来验证您以管理员身份登录后是否已正确升级。我怀疑你获得了有限的用户令牌,从而没有获得特权资源的请求。
祝你好运。