2012-10-19 103 views
2

我想在Windows XP SP2 +上使用命名管道。管道服務器將作爲某種管理員/系統級帳戶運行的服務。管道客戶端可以是任何用戶,可能是客人,可能是管理員。在我的情況下,我有一個訪客帳戶與以管理員身份運行的服務成功通信。如何判斷命名管道的服務器端是否爲管理員?

在我開始在客戶端代碼中使用管道之前,我想驗證管道的另一端是否真的屬於管理員/系統。

我發現了GetSecurityInfo函數,我認爲我應該能夠使用它作爲解決方案的一部分。但是,我不知道如何從SID轉到「是管理員」檢查。

回答

1

由管理帳戶(包括系統帳戶)創建的所有對象的默認所有者是衆所周知的管理員組,您無法將創建的對象的所有權分配給他人而無需管理權限。

所以,你可以檢查如下:

確保當您打開管道(使用CreateFile)您通過SECURITY_IDENTIFICATION標誌,以確保潛在的惡意服務器無法冒充你。

+0

這個說法聽起來很有用,你知道它有記載的地方嗎? 「由管理帳戶(包括系統帳戶)創建的所有對象的默認所有者都是衆所周知的管理員組」。另外,感謝模擬提示。 – user13251

+0

我只能找到這篇相當古老的文章,http://support.microsoft.com/kb/126629;但是,如果您擔心,則始終可以使用SetSecurityInfo將Administrators組明確分配爲所有者。 –

+0

我想我也可以在通過lpSecurityAttributes參數初始調用CreateNamedPipe中設置它。這看起來像將管理員組擴展到超出管理員組的方式......將所有者和/或主組設置爲特定的SID,並在客戶端檢查該SID。標記爲答案,但將在未來幾天內進行測試。 – user13251

相關問題