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
現在開いている 要求の指定 された FileObject へのアクセスの目的の種類を示すACCESS_MASK値を指定します。 ドライバーは、 IRP_MJ_CREATE 要求で要求されたアクセス権を取得し、各セキュリティ記述子に SeAccessCheck を適用して、付与された実際のアクセスを決定することで、このパラメーターの値を計算します。 許可されたアクセスが目的のアクセスよりも制限が厳しい場合、これはエラーであり、ドライバーは現在の IRP をSTATUS_ACCESS_DENIED状態で完了する必要があります。 ( SeAccessCheck は、付与されたアクセスのMAXIMUM_ALLOWED ビットをクリアすることに注意してください。必要なアクセスを許可されたアクセスと比較する場合は、そのビットを使用しないでください)。その後、ドライバーは、 許可されたアクセスを DesiredAccess の値として渡します。
[in] DesiredShareAccess
現在開いている要求に対する FileObject への共有アクセスの目的の種類を指定します。 通常、このパラメーターの値は、開いている要求が行われたときに I/O マネージャーによってファイル システムまたは最上位ドライバーに渡される ShareAccess と同じです。 この値には、0 または次の任意の組み合わせを指定できます。
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 に含まれます。 各ファイル オブジェクトは、共有アクセス構造を 1 つだけ持つ必要があります。 他の最上位レベルのドライバーは、このようなドライバーのデバイス オブジェクトを表すファイル オブジェクトが開かれたときに要求されたアクセスをチェックするには、このルーチンを呼び出す可能性があります。
IoCheckShareAccess はアトミック操作ではありません。 したがって、このルーチンを呼び出すドライバーは、共有アクセス数の破損を防ぐために、ミューテックスやリソース ロックなどの何らかの種類のロックによって IoCheckShareAccess に渡される共有ファイル オブジェクトを保護する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport), IrqlIoPassive2(wdm), PowerIrpDDis(wdm) |