Поделиться через


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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 2000.
целевая платформа Всеобщий
заголовка wdm.h (include 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