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

Clo*_*der 6 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(再次以普通用户身份登录),并使用模拟管理员用户的句柄来启动该进程.始终返回错误,表明没有特权.

ano*_*joe 1

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

在 Vista 中, UAC默认启用。这使得即使作为管理员,您也可以使用有限的用户令牌,除非您明确提升。当您执行此操作时,系统会向用户显示一个允许或拒绝该请求的对话框。

有关这方面的详细信息,请参阅Windows Vista 用户帐户控制兼容性的应用程序开发要求

您可能需要尝试使用CheckTokenMembership来验证您以管理员身份登录后是否已正确提升。我怀疑您正在获取有限的用户令牌,从而导致对特权资源的请求失败。

祝你好运。