Share via


Windows 機密文件

聯合 Dysfunction

Raymond Chen

與那些交界運作看上去不是什麼? 喔,它們執行啦-只是不您認為的方式。

W indows Vista 和 Windows 7 利用稱為交界藉由包含交界有舊版的名稱的系統目錄的檔案系統功能。 當想瀏覽至那些資料夾從 [檔案總管] 或 issuea dir 指令但是,您只得到一個 拒絕存取 錯誤。 清楚地,Microsoft 建立交界提供略過 MSDN 指引和相反的硬式編碼路徑知名的檔案系統的不同位置的應用程式與相容性。 為什麼,然後,不要那些交界運作當您試圖使用它們?

實際上,它們執行工作與其預定目的 — 但預定的目的 wasn’t 命令列的存取] 或 [從檔案總管導覽。 若要查看我們怎麼成這種情況下,讓我們倒帶關於一個十年時鐘。

在 Windows NT 早期如它所呼叫使用者設定檔將 C:\WINNT\Profiles 目錄中聯想。 而是,Windows 目錄之預設名稱是 WINNT 回然後。 在開發 Windows 2000 期間安全性考量和公司的客戶的意見反應提示您作業系統的開發人員移動超出 Windows 目錄,所以後者 ’s 安全性設定使用者設定檔的目錄可以再提高。

變更 Windows 目錄前 — 在系統中最重要的目錄 — 在中間有這個島 insecurity。 想要將新、 較嚴格的安全性套用到整個目錄的人必須 lest 它們最後會不小心鎖定系統中的所有使用者設定檔子目錄周圍 tiptoe。 移動超出 Windows 目錄設定檔解決了問題。

重新尋找資料夾提供重新命名以敘述其性質的絕佳機會。 早期的選項之一, 的文件 (& I) 設定 但連字號 (&) 造成大量的應用程式相容性問題。 例如,某些程式不小心解譯連字號 (&) 做為鍵盤快速鍵標記,而 wound 向上目錄顯示為 的文件 _Settings (遵循此慣例用於功能表和對話方塊] 方塊的底線加速鍵)。

Windows 2000 定居上 文件] 及 [設定 ,提供目錄的合理描述性名稱,但無法其他因素列入考量。 一個,內嵌的空格會進行因為的常數不必套用引號內鍵入更繁瑣路徑。 而且,十足名稱長度不一個障礙時尤其是因為它剪下到

MAX_PATH

Win32 路徑名稱的限制。 這些及其他因素提示您重新組織各種系統目錄還再次在 Vista,Windows 小組和排列方式執行向前到 Windows 7。

當目錄移動第二次時,Windows 留下交界協助應用程式時它們應該已經用函式如已硬式編碼這些目錄的路徑

SHGetFolderPath

以及

GetProfilesDirectory

(或者如果您是一種指令碼類型的人,

Shell.Application.NameSpace

方法我們所見回在 2005 年十一月問題)。

如果應用程式嘗試存取檔案

C:\Documents 和 Settings\username\Start Menu\Programs\Internet Explorer.lnk

在安裝交界

文件和設定

並於

「開始」功能表

將會引導到正確的新位置,這本機非漫遊設定檔現在是在呼叫

C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Internet Explorer.lnk

自然,不程式設計師應該硬式編碼此新的位置了比它們應該已經硬式編碼舊 — 它們應該使用適當的函式做為判斷已知資料夾的位置。

當然新的機會可以建立新的問題:isn’t 熟悉交界的應用程式可能會陷入無限迴圈中嘗試執行遞迴樹狀目錄查核行程時。 若要避免發生這種情況,相容性交界允許目錄巡行,但是明確拒絕 清單內容 的權限:如果想從檔案總管] 或 [命令提示字元巡覽至這些資料夾則獲得了 拒絕存取 錯誤。

相容性符號連結授與完成其目標 unwisely 選擇硬式編碼的目錄名稱的舊版應用程式提供相容性足夠權限。 但它們 don’t 提供足夠 rope,讓這些較舊的應用程式造成本身嚴重傷害。 封鎖 清單內容 也有移除吸引人討厭的新程式設計人員可能會想要繼續這些較舊的應用程式的傳統的愉快的 [側邊] 效果。 將這項技術運作正確的方向操縱人吗? 唯一的時間將會通知。

 

Raymond Chen Raymnond 的網站舊的新項目和相同其標題為的書籍 (Addison-Wesley,2007年) 處理 Windows 歷程記錄、 Win32 程式設計和 salty soymilk。

相關的內容

Windows 機密文件:編碼並非加密

Windows 機密文件:Windows 「美化」檔案名稱

Windows 機密文件:快取的認證