windows核心編程第三章–核心對象

來源:互聯網
上載者:User

    每個核心對象只是核心分配的一個記憶體塊,並且只能由該核心訪問。該記憶體塊是一種資料結構。

  對核心對象的操作,Wi n d o w s提供了一組函數來對這些結構進行操作。這些核心對象始終都可以通過這些函數進行訪問。

  當調用一個用於建立核心對象的函數時,該函數就返回一個用於標識該對象的控制代碼。該控制代碼可以被視為一個不透明值,你的進程中的任何線程都可以使用這個值。將這個控制代碼傳遞給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,核心就為該對象分配一個記憶體塊,並對它初始化。這時,核心對進程的控制代碼表進行掃描,找出一個空項。由於控制代碼表是空的,核心便找到索引1位置上的結構並對它進行初始化。該指標成員將被設定為核心對象的資料結構的記憶體位址,訪問屏蔽設定為全部訪問權,同時,各個標誌也作了設定. 最後,無論怎樣建立核心對象,都要向系統指明將通過調用C l o s e H a n d l e來結束對該對象的操作。

  跨越進程邊界共用核心對象

第一個方法:物件控點的繼承性

只有當進程具有父子關係時,才能使用物件控點的繼承性。

請記住,雖然核心物件控點具有繼承性,但是核心對象本身不具備繼承性。

第二個方法:對象命名

共用跨越進程邊界的核心對象的第二種方法是給對象命名。許多(雖然不是全部)核心對象都是可以命名的。

第三個方法:複製控制代碼

共用跨越進程邊界的核心對象的最後一個方法是使用D u p l i c a t e H a n d l 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.