AccessCheck函數獲取GenericMapping參數。這個參數用於什麼?它不用於DesiredAccess參數,因爲之前必須將MapGenericMask應用於DesiredAccess。AccessCheck爲什麼不將GenericMapping應用於DACL?
包含在SecurityDescriptor因爲我發現用一個C程序這樣它也並不適用於DACL:
- 打開當前線程標記
- 創建所有者和默認組安全描述符從令牌和一個DACL授予GENERIC_ALL給所有者「D:(A ;; GA ;;; ownerSID)」
- 設置GENERIC_MAPPING,它將(除其他之外)GenericAll映射到我的OWN_READ | OWN_WRITE(定義爲0×0001 0×0002和)
- AccessCheck的呼叫用上面創建的安全描述符,線程令牌,OWN_READ作爲DesiredAccess,所描述的GENERIC_MAPPING
然而,這種失敗,拒絕訪問錯誤。當我將安全描述符更改爲「D:(A ;; 0x0001 ;;; ownerSID)」時,授予訪問權限。這表明AccessCheck不使用GenericMapping參數將DACL中的通用訪問標誌(GA/GW/GR/GX)轉換爲特定的訪問權限。爲什麼?難道我做錯了什麼?
https://msdn.microsoft.com/de-de/library/windows/desktop/aa374815(v=vs.85).aspx沒有給出如何設置安全描述符的提示。
這並不能解釋爲什麼'GenericMapping'參數存在,如果AccessCheck()函數不使用它。也許早期版本的Windows的行爲有所不同? –
@HarryJohnston - 我如何寫在最後 - 它用於'MAXIMUM_ALLOWED'請求的情況下,對象沒有DACL(或以前的模式是內核)。是非常弱的用法。但是 – RbMm
沒有DACL和'MAXIMUM_ALLOWED'這是罕見的情況,但是在這種情況下系統如何計算具體訪問需要授權給調用者?他不問具體的訪問權限(如讀/寫/刪除) - 但是「全部」。所以系統並給他'GenericMapping-> GenericAll'。另一種用法我沒有找到 – RbMm