Функция NtOpenFile (ntifs.h)
Подпрограмма NtOpenFile открывает существующий файл, каталог, устройство или том.
Синтаксис
__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenFile(
[out] PHANDLE FileHandle,
[in] ACCESS_MASK DesiredAccess,
[in] POBJECT_ATTRIBUTES ObjectAttributes,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in] ULONG ShareAccess,
[in] ULONG OpenOptions
);
Параметры
[out] FileHandle
Указатель на переменную HANDLE, которая получает дескриптор файла.
[in] DesiredAccess
Задает значение ACCESS_MASK , определяющее запрошенный доступ к объекту. Дополнительные сведения см. в разделе Параметр DesiredAccessобъекта NtCreateFile.
[in] ObjectAttributes
Указатель на структуру OBJECT_ATTRIBUTES , указывающую имя объекта и другие атрибуты. Используйте InitializeObjectAttributes для инициализации этой структуры. Если вызывающий объект не выполняется в контексте системного потока, он должен задать атрибут OBJ_KERNEL_HANDLE при вызове InitializeObjectAttributes.
[out] IoStatusBlock
Указатель на структуру IO_STATUS_BLOCK , которая получает окончательное состояние завершения и сведения о запрошенной операции.
[in] ShareAccess
Указывает тип доступа к общей папке для файла. Дополнительные сведения см. в разделе Параметр ShareAccessntCreateFile.
[in] OpenOptions
Указывает параметры, применяемые при открытии файла. Дополнительные сведения см. в разделе Параметр CreateOptionsобъекта NtCreateFile.
Возвращаемое значение
NtOpenFile возвращает STATUS_SUCCESS или соответствующий код ошибки NTSTATUS. В последнем случае вызывающий объект может найти дополнительные сведения о причине сбоя, проверив параметр IoStatusBlock .
Комментарии
NtOpenFile предоставляет дескриптор, который вызывающий объект может использовать для управления данными файла или состоянием и атрибутами файлового объекта. NtOpenFile предоставляет подмножество функций, предоставляемых NtCreateFile. Дополнительные сведения см. в разделе Использование файлов в драйвере.
Когда дескриптор, на который указывает FileHandle , больше не используется, драйвер должен вызвать NtClose , чтобы закрыть его.
Если вызывающий объект не выполняется в контексте системного потока, он должен убедиться, что все создаваемые дескрипторы являются частными. В противном случае дескриптор может получить доступ к процессу, в контексте которого выполняется драйвер. Дополнительные сведения см. в разделе Дескрипторы объектов.
Вызывающие функции NtOpenFile должны выполняться в IRQL = PASSIVE_LEVEL и с включенными специальными api ядрами.
Если вызов этой функции выполняется в пользовательском режиме, следует использовать имя "NtOpenFile" вместо "ZwOpenFile".
Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы Собственные системные службы Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями подпрограмм NtXxx и ZwXxx см. в разделе Использование версий NT и Zw подпрограмм собственных системных служб.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 |
Целевая платформа | Универсальное |
Верхняя часть | ntifs.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (см. раздел "Примечания") |
Правила соответствия DDI | HwStorPortProhibitedDIs, PowerIrpDDis |