天天看點

WINDOWS核心程式設計--讀書筆記:第三章 核心對象

     一、系統中的核心對象有:比如存取符号對象、 事件對象、檔案對象、檔案映射對象、I / O 完成端口對象、作業對象、信箱對象、互斥對象、管道對象、程序對象、信标對象、線程對象和等待計 時器對象等。

     二、對于核心的了解:

每個内 核對象隻是核心配置設定的一個記憶體塊,并且隻能由該核心通路。

該記憶體塊是一種資料結構,它的成員負責維護該對象的各種資訊。

有些資料成員(如安全性描述符、使用計數等)在所有對象類型中是相同的,但大多數資料成員屬于特定的對象類型。

例如,程序對象有一個程序I D 、一個基 本優先級和一個退出代碼,而檔案對象則擁有一個位元組位移、一個共享模式和一個打開模式。

    三、特别需要注意的一個事實:核心對象的存在時間可以比建立該對象的程序長。

實作的機理:1、核心對象由核心所擁有,而不是由程序所擁有。2核心對象的使用計數

    四、究竟是使用者對象還是核心對象呢?若要确定一個對象是否屬于核心對象,最容易的方法是觀察建立該對象所用的函數。建立核心對象的所有函數幾乎都有一個參數,你可以用來設定安全屬性的資訊。

    五、程序的核心對象句柄表

程序的句柄表,它隻是個資料結構的數組。每個結構都包含一個指向核心對象的指針、一個通路屏蔽和一些标志。

    六、跨越程序邊界共享核心對象

在不同程序中運作的線程需要共享核心對象。下面是為何需要共享的原因:

• 檔案映射對象使你能夠在同一台機器上運作的兩個程序之間共享資料塊。

• 郵箱和指定的管道使得應用程式能夠在連網的不同機器上運作的程序之間發送資料塊。

• 互斥對象、信标和事件使得不同程序中的線程能夠同步它們的連續運作,這與一個應用程式在完成某項任務時需要将情況通知另一個應用程式的情況相同。

    七、命名對象

共享跨越程序邊界的核心對象的第二種方法是給對象命名。

所有這些函數都有一個共同的最後參數p s z N a m e 。

當為該參數傳遞N U L L 時,就向系統指明了想建立一個未命名的(匿名)核心對象。

命名對象常常用來防止運作一個應用程式的多個執行個體。

建立一個命名對象後,怎麼判斷該命名對象是否已經建立過。

當C r e a t e *函數傳回時,調用G e t L a s t E r r o r 函數。

如果G e t L a s t E r r o r 函數傳回E R R O R _ A L R E A D Y _ E X I S T S ,那麼你的應用程式的另一個執行個體正在運作

為了保證對象的唯一性,建議建立一個G U I D ,并将G U I D 的字元串表達式用作對象名。

    八、 存在的幾個疑惑:句柄能夠在程序之間拷貝? 這樣做有意義嗎?

句柄,喔 用途上還沒有概念。。。