Windows 7的媒體櫃(3)--前傳之CSIDL篇
從Windows發展的角度來看,媒體櫃的濫觴應該是跟著Windows 95出現的『我的文件』資料夾。此後,不止『我的文件』,還有『我的音樂』、『我的視訊』,甚至其他應用程式還會自建例如『我的電子書』、『我的專案』。
目前的Windows 7都繼續支援這些特定的資料夾,畢竟媒體櫃只是使用者和檔案存取之間的介面,最終存取檔案的媒體,仍是這些實體的資料夾(或說檔案系統)。
但若論及Windows特定資料夾,其實還不止上述『我的xx』資料夾,更多的是用在系統儲存特定檔案的資料夾,例如安裝Windows的資料夾、安裝應用程式的資料夾、安裝x86應用程式的資料夾等等。
這些特定資料夾通常有預設值,但不論約定成俗或官方指定,硬是規定C:\Windows是安裝Windows的資料夾(舉例來說),不僅欠靈活、也容易出錯。因此系統需要維護一份對映特定資料夾和實體位置的清單,也就是能對映Windows資料夾和C:\Windows之間的關係(舉例來說),讓程式實際存取檔案前查詢。
目前依然支援的環境變數就具有這樣的功能,例如%windir%就是安裝Windows的資料夾。不過環境變數的層級不夠高。從Windows 95/Windows NT 4開始,Windows Shell利用CSIDL(constant special item ID list)的常數與常數值來維護這份清單。例如CSIDL_WINDOWS就是代表安裝Windows資料夾的常數,藉此常數向系統查詢所得的常數值,即為安裝Windows的資料夾位置。
利用SHGetFolderLocation、SHGetFolderPath、SHGetSpecialFolderLocation、SHGetSpecialFolderPath等Windows Shell函式,可以取得特定資料夾的路徑或指向item identifier list的指標,也就是PIDL。
CSIDL是Vista之前的產物(為了回溯相容,新系統依然支援CSIDL),從Vista開始引進了Known Folders,並以一組稱為KNOWNFOLDERID的新的GUID取代CSIDL。


0 意見:
張貼意見