我正在尝试在 Windows XP SP2+ 上使用命名管道。管道服务器将是一项服务,以某种管理员/系统级帐户的身份运行。管道客户端可以是任何用户,可能是访客,也可能是管理员。就我而言,我可以让访客帐户成功地与以管理员身份运行的服务进行通信。
在我开始在我的客户端代码中使用管道之前,我想验证管道的另一端是否真正归管理员/系统所有。
我发现了 GetSecurityInfo 函数,我认为我应该能够将它用作解决方案的一部分。但是,我不知道如何从 SID 到“是管理员”检查。
我正在尝试在 Windows XP SP2+ 上使用命名管道。管道服务器将是一项服务,以某种管理员/系统级帐户的身份运行。管道客户端可以是任何用户,可能是访客,也可能是管理员。就我而言,我可以让访客帐户成功地与以管理员身份运行的服务进行通信。
在我开始在我的客户端代码中使用管道之前,我想验证管道的另一端是否真正归管理员/系统所有。
我发现了 GetSecurityInfo 函数,我认为我应该能够将它用作解决方案的一部分。但是,我不知道如何从 SID 到“是管理员”检查。
由管理帐户(包括系统帐户)创建的所有对象的默认所有者是众所周知的管理员组,您不能将您创建的对象的所有权分配给没有管理权限的其他人。
所以你可以检查如下:
使用GetSecurityInfo获取管道对象所有者的 SID。
使用带有 WinBuiltinAdministratorsSid 选项的CreateWellKnownSid为管理员组创建 SID。
使用EqualSid比较两个 SID。
确保在打开管道时(使用CreateFile)传递 SECURITY_IDENTIFICATION 标志以确保潜在的恶意服务器无法冒充您。