天天看點

核心程式設計随筆2

Note 1:

以前版本的Windows設計的一些應用程式之是以在Windows Vista上不能正常工作,就是因為在實作這些程式時,沒有充分考慮安全性.假定一個應用程式在啟動時要從一個系統資料庫子項中讀取一些資料.正确的做法是調用RegOpenKeyEx,向其傳入KEY_QUERY_VALUE,進而指定查詢子項資料的權限.然而許多應用程式對安全性沒有任何考慮.有的軟體開發人員還是按照老習慣,在調用RegOpenKeyEx函數的時候,傳入KEY_ALL_ACCESS作為期望的通路權限.這樣做的問題在于,對于一個不是管理者的标準使用者,系統資料庫項(比如HKLM)也許是隻讀的.是以,當這樣的應用程式在Windows Vista上面運作時,調用RegOpenKeyEx函數并傳遞KEY_ALL_ACCESS就會失敗.

Note 2:

不同程序中運作的線程需要共享核心對象.下面羅列了一些理由.

利用檔案映射對象,可以在同一台機器上運作的兩個不同程序之間共享資料塊.

借助mailslots和named pipes,在網絡中的不同計算機上運作的程序可以互相發送資料塊.

mutexes、semaphores和事件允許不同程序中的線程同步執行.例如,一個應用程式可能需要在完成某個任務之後,向另一個應用程式發出通知.

用三種不同的機制來允許程序共享核心對象:使用對象句柄繼承,為對象命名,以及複制對象句柄;

Note 3:

如果你寫的一個服務要同這些應用程式通信,就不能假定它和使用者應用程式在同一個會話中運作.要想更多地了解Session0隔離問題,及其對服務開發人員的影響,請閱讀"Impact of Session 0 Isolation on Services and Drivers in Windows Vista"一文,網址是http://www.microsoft.com/whdc/system/vista/services.mspx.

Note 4:

複制對象句柄的函數:

BOOL DuplicateHandle(

HANDLE hSourceProcessHandle,

HANDLE hSourceHandle,

HANDLE hTargetProcessHandle,

PHANDLE phTargetHandle,

DWORD dwDesiredAccess,

BOOL bInheritHandle,

DWORD dwOptions);

(hyp:這個一個可以用來做很多邪惡事情的函數,比如你可以打開一個檔案然後把句柄複制到系統程序裡面,這樣子檔案就删不掉了)

繼續閱讀