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


Функция NtOpenFile (winternl.h)

Открывает существующий файл, устройство, каталог или том и возвращает дескриптор для объекта файла.

Эта функция эквивалентна функции ZwOpenFile , описанной в комплекте драйверов Windows (WDK).

Синтаксис

__kernel_entry 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

Указатель на дескриптор для открытого файла. Драйвер должен закрыть дескриптор с помощью ZwClose , когда дескриптор больше не будет использоваться.

[in] DesiredAccess

Значение ACCESS_MASK , которое выражает типы доступа к файлам, требуемые вызывающей стороны. Сведения о типах доступа, которые можно указать, см. в разделе ZwCreateFile в WDK.

[in] ObjectAttributes

Указатель на структуру, которую вызывающий объект инициализирует с помощью InitializeObjectAttributes. Если вызывающий объект не выполняется в контексте системного процесса, он должен задать атрибут OBJ_KERNEL_HANDLE для ObjectAttributes. Дополнительные сведения об указании атрибутов объекта см. в параметре CreateOptionsобъекта ZwCreateFile в WDK.

[out] IoStatusBlock

Указатель на структуру, содержащую сведения о запрошенной операции и состоянии окончательного завершения.

[in] ShareAccess

Тип общего доступа к файлу. Дополнительные сведения см. в разделе ZwCreateFile в WDK.

[in] OpenOptions

Параметры, применяемые при открытии файла. Дополнительные сведения см. в разделе ZwCreateFile в WDK.

Возвращаемое значение

NtOpenFile возвращает STATUS_SUCCESS или соответствующее состояние ошибки. Если возвращается состояние ошибки, вызывающий объект может найти дополнительные сведения о причине сбоя, проверив IoStatusBlock.

Комментарии

Подпрограммы драйвера, которые выполняются в контексте процесса, отличном от контекста системного процесса, должны задавать атрибут OBJ_KERNEL_HANDLE для параметра ObjectAttributesобъекта ZwOpenFile. Это ограничивает использование дескриптора, возвращаемого ZwOpenFile , процессами, выполняемыми только в режиме ядра. В противном случае дескриптор может получить доступ к процессу, в контексте которого выполняется драйвер. Драйверы могут вызывать InitializeObjectAttributes , чтобы задать атрибут OBJ_KERNEL_HANDLE следующим образом.

InitializeObjectAttributes(&ObjectAddributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);

Вызывающие файлы ZwCreateFile должны выполняться по адресу IRQL = PASSIVE_LEVEL.

Обратите внимание, что файл заголовка WDK Ntdef.h необходим для многих определений констант, а также макроса InitializeObjectAttributes . Вы также можете использовать функции LoadLibrary и GetProcAddress , чтобы динамически связываться с Ntdll.dll.

Требования

Требование Значение
Целевая платформа Windows
Header winternl.h
Библиотека ntdll.lib
DLL ntdll.dll