Функция 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) |