Функция 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 проверяет запрос на открытие файлового объекта, чтобы определить, совместимы ли указанные типы требуемых и общих обращений с способом доступа к объекту файла с помощью других открытых объектов.

Файловые системы поддерживают состояние файлов с помощью структур, называемых блоками управления файлами (FBS). SHARE_ACCESS представляет собой структуру, описывающую, как в настоящее время осуществляется доступ к файлу всеми открывающимися окнами. Это состояние содержится в FCB как часть открытого состояния для каждого объекта файла. Каждый файловый объект должен иметь только одну структуру доступа к общей папке. Другие высокоуровневые драйверы могут вызывать эту подпрограмму для проверка запрошенного доступа при открытии объекта файла, представляющего объект устройства такого драйвера.

IoCheckShareAccess не является атомарной операцией. Поэтому драйверы, вызывающие эту подпрограмму, должны защищать объект общего файла, передаваемый в 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)

См. также раздел

ACCESS_MASK

IoCreateFile

IoCreateFileEx

IoGetRelatedDeviceObject

IoRemoveShareAccess

IoSetShareAccess

IoUpdateShareAccess