• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大漠落日

            while(!dead) study++;
            posts - 46, comments - 126, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            windows station詳解

            Posted on 2009-11-19 09:52 亂78糟 閱讀(1067) 評論(0)  編輯 收藏 引用 所屬分類: 重要資料
            部分轉載自:http://blog.csdn.net/2608/archive/2007/12/04/1916773.aspx
            原文1(E文):http://alt.pluralsight.com/wiki/default.aspx/Keith.GuideBook/WhatIsAWindowStation.html
            原文2(E文): http://www.shnenglu.com/dawnbreak/articles/90278.html
            其他原文請參考我在文中添加的鏈接。
            自己修改添加了部分內容,如有錯誤之處,望指正。

            Window station 是一個不為人所熟知但是卻是非常重要的安全特性,它被設計成為一個限制操作系統(tǒng)中窗口環(huán)境的“沙箱”。為了避免將訪問控制列表(ACL)放置到每個窗口中 和對每個窗口消息進行權限檢查而導致的性能下降,我們簡單地讓窗口互相通知而不執(zhí)行任何安全檢查。然而,我們是在一個私有環(huán)境中這么做的,這就是 Window station。

            Window station 是一個安全核心對象,它包括了剪貼板,一個私有的原子表格,一套桌面以及一套窗口。每一個進程都依賴于一個window station,而且這個關聯通常平行于登錄會話的分配。也就是說,對于每一個登錄會話來說,都有一個相應的window station,就像下圖所描述的那樣。實際上,window station的名稱得自登錄會話標識符。例如,用于網絡服務的window station 名稱是Service-0x0-0x3e4$。偶爾一個internet后臺服務程序(例如IIS)會自己管理window station,但這只是一個例外。還有一個“交互式”的window station, 它會一直存在,甚至沒有交互式用戶存在時也如此。這個特殊的交互式window station 的名字硬編碼為WinSta0, 需要我們對它更對關注。


            WinSta0是唯一的一個實際綁定到硬件上的window station.也就是說,你可以在這里看到窗口,并且它們可以接收到鼠標和鍵盤的輸入。WinSta0也是高度安全的,它通過一個能夠限制登錄會話運行 權限的ACL來達到此目的,盡管在上圖中你也可以看到一些運行在SYSTEM登錄會話中的高度受信的服務程序可能運行在這里,比如說使 winlogon.exe。WinSta0上的ACL在一個非常詳細的等級上控制你的GUI可以做些什么,但是實際說來,這個一個要么全有,要么全無的授 權,并且只有在限制哪個進程允許關聯到window station時才真正需要。(也可以調用函數SetProcessWindowStation來改變進程所屬的window station,或通過在調用CreatProcess時設置STARTUPINFO參數將新啟動的程序附著到特定的window station).使用這種方法,windos station上的ACL就可以阻止其他登錄會話中的程序入侵到你的窗口中。

            擁有window station的一個實際用處就是避免來自交互式用戶的守護進程的隱藏攻擊。如果進程運行在一個低特權賬號中同時臺帳號可以發(fā)送窗 口消息到一個高特權級別的程序,那么它就控制了這個程序。例如隱藏攻擊(Luring Acctack)。因為window station邊界通常是與登錄會話邊界是平行的,這就有助于阻止這類的攻擊。

            所以,我們有分配給一個綁定硬件的window station的交互登錄,那守護進程(daemons)呢?每個守護進程登錄都擁有各自的windows station,但它們是非交互的(記住,僅有一個交互的window sstation,它就是WinSta0)。一個非交互的window station不綁定到硬件,所有如果你是守護進程你就能創(chuàng)建正常工作的窗口——但是其它人看不見。這對于一些管道例如COM是非常重要的。但是想象一下,如果作為守護進程,你給出了一個模式對話框然后坐在那等某人按OK按鈕嗎?你會等極其長的時間。唯一的辦法是用編程取消模式對話框中的非交互window station。例如你能夠通過給這個對話框發(fā)送一個WM_CLOSE或者WM_COMMAND消息模仿按鈕被按下。了解了這個,一個智力正常的人都不會再守護進程中放置模式對話框。但如何在編譯調試C++應用程序的時候使用ASSERT宏呢?或者如果你購買了一個第三方組件庫用于守護進程,并且已經編寫代碼之后發(fā)現它不時彈出模式對話框?處理這個并沒有樂趣,所有,作為一個庫(libary)開發(fā)者,在組件中放置對話框之前一定要仔細考慮。那就是說,如果你對放置用戶接口在守護進程中有合法的理由,請閱讀:HowToDisplayAUserInterfaceFromADaemon

            如果你來自Win9X技術背景,你可能會奇怪在機器上使用任何原有進程的窗口句柄竟然是錯誤的。如果你曾使用過用于進程間通信中window消息,那么是該學習其它技術的時候了,例如.NET Remoting 或者 COM

            當一個進程又創(chuàng)建了另外一個,那么新的進程就被放置到與舊進程相同的window station中,除非你指明不這么做(但這種情況很少)。所以,就像是令牌和登錄會話一樣,一個新的進程很自然的繼承了它的父進程的窗口環(huán)境。注意啟動一個服務不同于簡單的創(chuàng)建一個新的進程。當一個服務啟動時,它就會由操作系統(tǒng)分配一個合適的登錄會話和window station,就像我在WhatIsADaemon中討論的。
            久久久国产精华液| 欧美精品一区二区久久| 漂亮人妻被黑人久久精品| 久久综合噜噜激激的五月天| 久久99精品国产麻豆宅宅| 久久久人妻精品无码一区| 久久久久亚洲Av无码专| 91久久精品国产成人久久| 一本久久知道综合久久| 久久久久国产成人精品亚洲午夜| 久久精品国产99国产精品导航| 国产精品99久久久久久人| 久久一区二区三区99| 久久91精品国产91久久户| 久久WWW免费人成一看片| 久久人人爽人人精品视频| 精品精品国产自在久久高清| 精品久久久久久中文字幕大豆网| 久久精品国产只有精品66| AV无码久久久久不卡蜜桃 | 久久99热只有频精品8| 久久久久99精品成人片| 久久亚洲综合色一区二区三区| 久久综合九色综合网站| 亚洲色欲久久久久综合网| 久久久久久久综合日本| 日本精品久久久久中文字幕| 潮喷大喷水系列无码久久精品| 综合久久国产九一剧情麻豆 | 久久免费视频网站| 亚洲国产精品无码久久SM| 久久午夜免费视频| 久久久久久久91精品免费观看| 精品久久久久久国产三级| 97久久精品人人做人人爽| 国产精品一久久香蕉产线看| 99精品久久久久中文字幕| 99久久99这里只有免费的精品| 99国产欧美精品久久久蜜芽| 狠狠狠色丁香婷婷综合久久俺| 97精品伊人久久大香线蕉app|