《Windows核心編程》筆記1 –核心對象

來源:互聯網
上載者:User
    由於.net Framework中很多地方需要用到以前Win32中的一些知識點,不瞭解其中的來朧去脈學習起來會比較吃力,於是準備用點時間補一下Windows 核心方面的知識點,參考書本是經典的<Windows核心編程>.學完後,可以有這個基礎去研究.Net中的<.Net 架構程式設計>這本經典. 

    從第三章核心對象開始....

    什麼是核心對象,有何特性?
    在windows編程中,建立一個比如 HPen pen=new HPen()就相當於建立一個對象,Windows API內建了許許多多的類,比如畫筆類,字型類,矩形類等. 根據類來建立的對象並不全是核心對象,那麼,什麼才算是核心對象呢?核心對象有什麼基本的特徵呢?
    核心對象是核心分配的一個記憶體塊,這種記憶體塊是一個資料結構,表示核心對象的各種特徵。並且只能由核心來訪問。應用程式若需要訪問核心對象,需要通過作業系統提供的函數來進行,不能直接存取核心對象(Windows從安全性方面來考慮的)。    
    注意幾點,其一,核心對象是由核心來分配的,並不是客戶執行個體化出來的對象,所以new 出來的對象並不是核心對象,必須用系統的函數Create*()來建立核心對象(比如CreateFileMapping就是建立一個檔案對應核心對象等).
    其二,對象者,資料結構上所承載的資料也。不同於其它對象,資料結構可以自由更改,核心對象的資料結構必須有幾點是符合規範的,且都是固定的。應用程式只能建立,使用,修改核心對象內的資料,而無法更改其記憶體的結構狀態。
    其三,建立核心對象是返回該對象的一個控制代碼(可以理解為一種特殊的指標),這些控制代碼可在建立該核心的進程內使用,而不可在外部進程中使用,我們通過操縱控制代碼來操縱核心對象。(註:是控制代碼不可在外部進程中使用,而非核心對象,核心對象可以在多個進程間共用。)
    其四,即然我們無法更改核心對象的資料結構,我們如何來操縱這些核心對象,答:Microsoft定義了一組函數,以便用很好的方法來對這些資料結構進行操作。我們將建立得到的控制代碼傳給這些函數,系統就知道你要操作哪個核心對象, 然後會按系統定義的方法來進行操作。
    其五,核心對象由系統來分配建立,它的擁有者是屬於核心的,而不是屬於進程的。所以,如果該進程調用了一個建立核心對象的函數,然後進程終止運行,但是核心對象不一定會被撤銷。(在大多數情況下,核心對象是會被撤銷的,如果有另一進程擁有這個核心對象的控制代碼,則不會被撤銷。)記住:核心對象存在的時間可能會比建立該對象的進程壽命要長。
    其六,正是由於多個進程可以共用一個核心對象,所以,核心對象的資料結構中必須有一項計數器的資料成員,以表示有多少個進程擁有該核心對象。

    核心對象的安全性:
    核心對象能夠得到安全性描述元的保護,安全性描述元描述了誰建立了該對象,誰可以使用該對象,誰無權使用該對象。那麼,如何使用該安全特性呢?
    舉一例:

HANDLE CreateFileMapping(
   HANDLE hFile.
   PSECURITY_ATTRIBUTES psa,
   DWORD flProtect,
   DWORD dwMaximumSizeHigh,
   DWORD dwMaximuniSizeLow,
   PCTSTR pszNarne);

其中,第二個參數PSECURITY_ATTRIBUTES就是關於安全性的參數,一般傳入NULL即可,表示預設安全。

     關於Windows中的其它對象。應用程式可以建立諸如菜單,視窗,游標,刷子等對象,這些屬於使用者物件或圖形裝置介面對象,而並不是核心對象,一定要區分開來。若要確定建立的對象是否屬於核心對象,則要查看建立對象的函數,是否有安全性描述元參數。 

    關閉核心對象,調用系統的函數BOOL CloseHandle(HANDLE Hobj)來關閉核心。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.