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 相同。 此值可以是零,或下列任何組合:

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 不是不可部分完成的作業。 因此,呼叫此常式的驅動程式必須透過某種鎖定來保護傳遞至 IoCheckShareAccess 的共用檔案物件,例如 mutex 或資源鎖定,以防止共用存取計數損毀。

規格需求

   
最低支援的用戶端 從 Windows 2000 開始提供。
目標平臺 環球
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDDIs (storport) IrqlIoPassive2 (wdm) PowerIrpDDis (wdm)

另請參閱

ACCESS_MASK

IoCreateFile

IoCreateFileEx

IoGetRelatedDeviceObject

IoRemoveShareAccess

IoSetShareAccess

IoUpdateShareAccess