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