IoCheckShareAccess 函式 (wdm.h)
IoCheckShareAccess 例程是由文件系統驅動程式 (FSD) 或其他最高層級驅動程式呼叫,以檢查是否允許共用存取檔案物件。
語法
NTSTATUS IoCheckShareAccess(
[in] ACCESS_MASK DesiredAccess,
[in] ULONG DesiredShareAccess,
[in, out] PFILE_OBJECT FileObject,
[in, out] PSHARE_ACCESS ShareAccess,
[in] BOOLEAN Update
);
參數
[in] DesiredAccess
指定 ACCESS_MASK 值,指出目前開啟要求之指定 FileObject 所需的存取類型。 驅動程式會藉由在 IRP_MJ_CREATE 要求中取得要求的存取權,然後針對每個安全性描述元套用 SeAccessCheck,以判斷授與的實際存取權,以計算此參數的值。 如果授與的存取限制比所需的存取更嚴格,則這是錯誤的,而且驅動程序應該完成目前 IRP 且狀態為 STATUS_ACCESS_DENIED。 (請注意,SeAccessCheck 清除授與存取權中的MAXIMUM_ALLOWED位;請務必不要在比較所需的存取權與授與存取權時使用該位。然後,驅動程式會將授與的存取權當做 desiredAccess 的值傳遞。
[in] DesiredShareAccess
指定目前開啟要求 FileObject 所需的共用存取類型。 此參數的值通常與 ShareAccess 傳遞至文件系統或 I/O 管理員在提出開啟要求時的最高層級驅動程式相同。 此值可以是零,或下列任何組合:
FILE_SHARE_READ
FILE_SHARE_WRITE
FILE_SHARE_DELETE
[in, out] FileObject
要檢查目前開啟要求的存取權之檔案物件的指標。
[in, out] ShareAccess
與 FileObject 相關聯的通用共用存取資料結構的指標。 驅動程式應將此結構視為不透明。
[in] Update
指定是否要更新 FileObject的共用存取狀態。 TRUE 的布林值 表示,如果允許開啟的要求,此例程將會更新檔案對象的共用存取資訊。
傳回值
如果要求者對檔案物件的存取與目前開啟的方式相容,ioCheckShareAccess 會傳回STATUS_SUCCESS。 如果因為共用違規而拒絕要求,則會傳回STATUS_SHARING_VIOLATION。
言論
IoCheckShareAccess 檢查檔案對象開啟要求,以判斷指定的所需和共用存取類型是否與檔案物件目前由其他開啟存取的方式相容。
檔系統會透過稱為檔案控制區塊 (FCB) 的結構來維護檔案的狀態。 SHARE_ACCESS是一種結構,描述所有開啟檔案目前存取的方式。 此狀態包含在FCB中,作為每個檔案對象的開啟狀態的一部分。 每個檔案物件都應該只有一個共用存取結構。 其他最高層級驅動程式可能會呼叫此例程,以檢查在開啟代表這類驅動程式裝置對象的檔案物件時所要求的存取權。
IoCheckShareAccess 不是不可部分完成的作業。 因此,呼叫此例程的驅動程式必須透過某種鎖定,例如 Mutex 或資源鎖定,保護傳遞至 ioCheckShareAccess 的共用檔案物件,以防止共用存取計數損毀。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIs(storport)、IrqlIoPassive2(wdm)、PowerIrpDDis(wdm) |