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