WINDOWS核心編程–第二章核心對象

來源:互聯網
上載者:User
什麼是核心對象
作為一個Wi n d o w s軟體開發人員,你經常需要建立、開啟和操作各種核心對象。系統要創
建和操作若干類型的核心對象,比如存取符號對象、事件對象、檔案對象、檔案對應物件、
I / O完成連接埠對象、工作物件、信箱對象、互斥對象、管道對象、進程對象、信標對象、線程
對象和等待計時器對象等。這些對象都是通過調用函數來建立的。例如, C r e a t e F i l e M a p p i n g函
數可使系統能夠建立一個檔案對應物件。每個核心對象只是核心分配的一個記憶體塊,並且只能
由該核心訪問。該記憶體塊是一種資料結構,它的成員負責維護該對象的各種資訊。有些資料成
員(如安全性描述符、使用計數等)在所有物件類型中是相同的,但大多數資料成員屬於特定
的物件類型。例如,進程對象有一個進程I D、一個基本優先順序和一個結束代碼,而檔案對象則
擁有一個位元組位移、一個共用模式和一個開啟模式。
由於核心對象的資料結構只能被核心訪問,因此應用程式無法在記憶體中找到這些資料結構
並直接改變它們的內容。M i c r o s o f t規定了這個限制條件,目的是為了確保核心對象結構保持狀
態的一致。這個限制也使M i c r o s o f t能夠在不破壞任何應用程式的情況下在這些結構中添加、刪
除和修改資料成員。
如果我們不能直接改變這些資料結構,那麼我們的應用程式如何才能操作這些核心對象
呢?解決辦法是,Wi n d o w s提供了一組函數,以便用定義得很好的方法來對這些結構進行操作。
這些核心對象始終都可以通過這些函數進行訪問。當調用一個用於建立核心對象的函數時,該
函數就返回一個用於標識該對象的控制代碼。該控制代碼可以被視為一個不透明值,你的進程中的任何
線程都可以使用這個值。將這個控制代碼傳遞給Wi n d o w s的各個函數,這樣,系統就能知道你想操
作哪個核心對象。本章後面還要詳細講述這些控制代碼的特性。
為了使作業系統變得更加健壯,這些控制代碼值是與進程密切相關的。因此,如果將該控制代碼值
傳遞給另一個進程中的一個線程(使用某種形式的進程間的通訊)那麼這另一個進程使用你的
進程的控制代碼值所作的調用就會失敗。在3 . 3節“跨越進程邊界共用核心對象”中,將要介紹3種
機制,使多個進程能夠成功地共用單個核心對象。

除了核心對象外,你的應用程式也可以使用其他類型的對象,如菜單、視窗、滑鼠游標、
刷子和字型等。這些對象屬於使用者物件或圖形裝置介面( G D I)對象,而不是核心對象。當初
次著手為Wi n d o w s編程時,如果想要將使用者物件或G D I對象與核心對象區分開來,你一定會感
到不知所措。比如,表徵圖究竟是使用者物件還是核心對象呢?若要確定一個對象是否屬於核心對
象,最容易的方法是觀察建立該對象所用的函數。建立核心對象的所有函數幾乎都有一個參數,
你可以用來設定安全屬性的資訊,這與前面講到的C r e a t e F i l e M a p p i n g函數是相同的。
用於建立使用者物件或G D I對象的函數都沒有P S E C U R I T Y _ AT T R I B U T E S參數。

進程的核心物件控點表
當一個進程被初始化時,系統要為它分配一個控制代碼表。該控制代碼表只用於核心對象,不用於使用者對
象或G D I對象。控制代碼表的詳細結構和管理方法並沒有具體的資料說明。通常我並不介紹作業系統中
沒有文檔資料的那些部分。不過,在這種情況下,我會進行例外處理,因為,作為一個稱職的
Wi n d o w s程式員,必須懂得如何管理進程的控制代碼表。由於這些資訊沒有文檔資料,因此不能保證所
有的詳細資料都正確無誤,同時,在Windows 2000、Windows 98和Windows CE中,它們的實現方
法是不同的。為此,請認真閱讀下面介紹的內容以加深理解,在此不學習系統是如何進行操作的。
表3 - 1顯示了進程的控制代碼表的樣子。可以看到,它只是個資料結構的數組。每個結構都包
含一個指向核心對象的指標、一個訪問屏蔽和一些標誌。

如果調用一個函數以便建立核心對象,但是調用失敗了,那麼返回的控制代碼值通常是0
(N U L L)。發生這種情況是因為系統的記憶體非常短缺,或者遇到了安全方面的問題。不過有少
數函數在運行失敗時返回的控制代碼值是-1(I N VA L I D _ H A N D L E _ VA L U E)。例如,如果C r e a t e F i l e
未能開啟指定的檔案,那麼它將返回I N VA L I D _ H A N D L E _ VA L U E,而不是返回N U L L。當查看
建立核心對象的函數傳回值時,必須格外小心。特別要注意的是,只有當調用C r e a t e F i l e函數時,
才能將該值與I N VA L I D _ H A N D L E _ VA L U E進行比較。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.