最佳答案NTCreateFile函数详解 介绍 NTCreateFile函数是Windows操作系统中用来创建或打开文件对象的重要函数,其功能十分强大且应用场景广泛,因此我们有必要对其进行深入了解。 函数原...
NTCreateFile函数详解
介绍
NTCreateFile函数是Windows操作系统中用来创建或打开文件对象的重要函数,其功能十分强大且应用场景广泛,因此我们有必要对其进行深入了解。
函数原型
NTCreateFile函数的原型如下:
NTSTATUS NTAPI NtCreateFile(
PHANDLE FileHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
PIO_STATUS_BLOCK IoStatusBlock,
PLARGE_INTEGER AllocationSize,
ULONG FileAttributes,
ULONG ShareAccess,
ULONG CreateDisposition,
ULONG CreateOptions,
PVOID EaBuffer,
ULONG EaLength
);
参数说明
NTCreateFile函数的各个参数含义如下:
- FileHandle:指向要创建或打开的文件的句柄指针。
- DesiredAccess:请求的访问权限。可以是下列值之一或它们的组合:
- FILE_READ_DATA(读取数据)
- FILE_WRITE_DATA(写入数据)
- FILE_APPEND_DATA(在文件末尾添加数据)
- FILE_READ_EA(读取EA(扩展属性))
- FILE_WRITE_EA(写入EA(扩展属性))
- FILE_EXECUTE(执行文件)
- FILE_DELETE_CHILD(删除子项)
- FILE_READ_ATTRIBUTES(读取属性)
- FILE_WRITE_ATTRIBUTES(写入属性)
- SYNCHRONIZE(同步)
- ObjectAttributes:指向要创建或打开的对象的OBJECT_ATTRIBUTES结构体。其中包含了对象名,安全描述符等信息。
- IoStatusBlock:指向IO_STATUS_BLOCK结构体的指针。
- AllocationSize:指向一个64位的整数,表示将要为文件创建的空间大小。
- FileAttributes:指定将用于创建新文件的文件属性。可以是下列值之一或它们的组合:
- FILE_ATTRIBUTE_NORMAL(普通文件)
- FILE_FLAG_WRITE_THROUGH(立即将所有写入操作写入磁盘)
- FILE_FLAG_OVERLAPPED(使用异步IO方式)
- FILE_FLAG_NO_BUFFERING(禁止系统缓存)
- FILE_FLAG_RANDOM_ACCESS(随机访问)
- FILE_FLAG_SEQUENTIAL_SCAN(顺序访问)
- FILE_FLAG_DELETE_ON_CLOSE(关闭文件时删除)
- ShareAccess:共享模式。可以是下列值之一或它们的组合:
- FILE_SHARE_READ(允许其他进程读取这个文件)
- FILE_SHARE_WRITE(允许其他进程写入这个文件)
- FILE_SHARE_DELETE(允许其他进程删除这个文件)
- CreateDisposition:指定如何处理当前请求。可以是下列值之一:
- FILE_SUPERSEDE(覆盖已有文件)
- FILE_OPEN(打开文件)
- FILE_CREATE(创建新文件)
- FILE_OPEN_IF(打开现有文件,如果不存在则创建)
- FILE_OVERWRITE(覆盖现有文件,如果不存在则创建)
- FILE_OVERWRITE_IF(覆盖现有文件,如果不存在则创建)
- CreateOptions:指定如何创建打开文件的行为。可以是下列值之一或它们的组合:
- FILE_DIRECTORY_FILE(将该文件作为目录打开)
- FILE_NON_DIRECTORY_FILE(将该文件作为普通文件打开)
- FILE_OPEN_FOR_BACKUP_INTENT(为备份目的而打开文件)
- FILE_DELETE_ON_CLOSE(将文件打开为删除)
- FILE_NO_COMPRESSION(对于支持压缩的文件系统,不要压缩文件)
- FILE_OPEN_BY_FILE_ID(使用ID号打开一个已有的文件)
- EaBuffer:包含要写入EA的数据的指针。如果未使用EA,则应为NULL。
- EaLength:指定要写入EA的数据的大小。如果未使用EA,则应为0。
示例代码
下面的示例代码展示了如何使用NTCreateFile函数创建一个文件:
#include
#include
int main() {
OBJECT_ATTRIBUTES ObjectAttributes = {0};
IO_STATUS_BLOCK IoStatusBlock = {0};
UNICODE_STRING FileName;
HANDLE FileHandle = NULL;
NTSTATUS Status;
RtlInitUnicodeString(&FileName, L\"test.txt\");
InitializeObjectAttributes(
&ObjectAttributes,
&FileName,
OBJ_CASE_INSENSITIVE,
NULL,
NULL
);
Status = NtCreateFile(
&FileHandle,
GENERIC_WRITE | GENERIC_READ,
&ObjectAttributes,
&IoStatusBlock,
0,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ | FILE_SHARE_WRITE,
FILE_CREATE,
FILE_NON_DIRECTORY_FILE,
NULL,
0
);
if (NT_SUCCESS(Status)) {
printf(\"File created successfully!\
\");
} else {
printf(\"Failed to create File! ErrorCode: %d\
\", Status);
}
return 0;
}
结语
NTCreateFile函数是Windows操作系统中用来创建或打开文件对象的重要函数。本文简要介绍了NTCreateFile函数的函数原型,参数说明以及示例代码。开发人员可以根据需求,选用不同的CreateDisposition、DesiredAccess、CreateOptions、FileAttributes等函数参数,达到不同的创建或打开文件对象的目的。
版权声明:本文内容/及图片/由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭/侵权/违法违规的内容, 请发送邮件至 3237157959@qq.com 举报,一经查实,本站将立刻删除。