存取遮罩
存取遮罩的功能是以精簡形式描述訪問許可權。 為了簡化存取管理,存取遮罩包含一組四個位的 一般許可權,這些許可權會使用 RtlMapGenericMask 函式轉譯成一組更詳細的許可權。
下圖說明存取遮罩。
一般許可權包括:
GENERIC_READ— 讀取 物件所維護信息的權利。
GENERIC_WRITE—撰寫 物件所維護信息的權利。
GENERIC_EXECUTE— 執行或查看對象的權利。
GENERIC_ALL—讀取、寫入和執行對象的權利。
這些許可權可以合併。 例如,可以要求GENERIC_READ和GENERIC_WRITE。 結果對應需要每個泛型許可權所需的許可權聯集。 此範例會模擬用來控制 UNIX 資源的存取權的 UNIX “rwx” 存取位。 存取掩碼中的一般許可權可簡化 Windows 上的應用程式開發,因為這些許可權會遮罩各種物件類型的不同安全性許可權。
下列一 組標準權限 適用於所有物件類型:
DELETE- 刪除特定對象的權利。
READ_CONTROL—讀取物件控件(安全性)信息的權利。
WRITE_DAC— 修改物件的控件 (安全性) 資訊的權利。
WRITE_OWNER—修改對象擁有者 SID 的權利。 回想一下,擁有者一律有權修改物件。
SYNCHRONIZE - 等候指定對象的權利(假設等候是物件的有效概念)。
存取掩碼的下層 16 位代表特定許可權。 這些特定許可權的意義對有問題的 物件而言是唯一的。 對於文件系統,主要利益是檔案物件的特定許可權。 對於檔案物件,特定許可權通常會以不同的方式解譯,視檔案物件是否代表檔案或目錄而定。 對於檔案,一般解譯為:
FILE_READ_DATA—從指定檔案讀取數據的權利。
FILE_WRITE_DATA—將數據寫入指定檔案的權利(在檔案的現有範圍內)。
FILE_APPEND_DATA— 擴充指定檔案的權利。
FILE_READ_EA— 讀取檔案擴充屬性的許可權。
FILE_WRITE_EA—修改檔案擴充屬性的許可權。
FILE_EXECUTE— 在本機執行指定檔案的權利。 執行儲存在遠端共用上的檔案需要讀取許可權,因為檔案是從伺服器讀取,但在用戶端上執行。
FILE_READ_ATTRIBUTES—讀取檔案屬性信息的許可權。
FILE_WRITE_ATTRIBUTES—修改檔案屬性信息的許可權。
針對目錄,會使用相同的位值,但在下列某些情況下,其解譯會有所不同:
FILE_LIST_DIRECTORY—列出目錄內容的權利。
FILE_ADD_FILE— 在目錄中建立新檔案的權利。
FILE_ADD_SUBDIRECTORY— 在目錄中建立新目錄 (子目錄) 的權利。
FILE_READ_EA—讀取指定目錄擴充屬性的許可權。
FILE_WRITE_EA—寫入指定目錄之擴充屬性的許可權。
FILE_TRAVERSE— 存取目錄內物件的許可權。 FILE_TRAVERSE訪問許可權與FILE_LIST_DIRECTORY訪問許可權不同。 持有FILE_LIST_DIRECTORY存取權可讓實體取得目錄內容的清單,而FILE_TRAVERSE訪問許可權可讓實體存取物件。 沒有FILE_LIST_DIRECTORY訪問許可權的呼叫端可以開啟已知道的檔案,但無法取得目錄的內容清單。
FILE_DELETE_CHILD— 刪除目前目錄中檔案或目錄的權利。
FILE_READ_ATTRIBUTES—讀取目錄屬性信息的許可權。
FILE_WRITE_ATTRIBUTES—修改目錄屬性信息的許可權。
I/O 管理員會定義一般許可權與檔案物件之標準和特定許可權的實際對應。 文件系統可以使用IoGetFileObjectGenericMapping擷取此對應。 一般而言,I/O 管理員會在呼叫文件系統之前,在IRP_MJ_CREATE處理期間執行此對應。 但是文件系統檢查特定作業的安全性(例如特製化的 FSCTL 作業)可能需要自行執行此對應。