Window内核函数 - 文件的打开

        除了使用ZwCreateFile函数可以打开文件,DDK还提供了一个内核函数ZwOpenFile。ZwOpenFile 内核函数的参数比ZwCreateFile的参数简化,方便程序员打开文件。该函数的声明如下:

NTSTATUS    ZwOpenFile(
    OUT PHANDLE FileHandle,
    IN ACCESS_MASK DesiredAccess,
    IN POBJECT_ATTRIBUTES ObjectAttributes,
    OUT PIO_STATUS_BLOCK IoStatusBlock,
    IN ULONG ShareAccess,
    IN ULONG OpenOptions
    );

// FileHandle: 返回打开的句柄。
// DesiredAccess: 打开的权限,一般设为 GENERIC_ALL。
// ObjectAttributes: ObjectAttributes结构。
// IoStatusBlock: 指向一个结构体的指针。该结构体指明打开文件的状态。
// ShareAccess: 共享的权限。可以是FILE_SHARE_READ或者FILE_SHARE_WRITE。
// OpenOptions: 打开选项, 一般设为 FILE_SYNCHRONOUS_IO_NONALERT。
// 返回值: 指明文件是否被成功打开。

下面的代码演示了如何使用ZwOpenFile打开文件。

OBJECT_ATTRIBUTES objectAttributes;
IO_STATUS_BLOCK iostatus;
HANDLE hfile;
UNICODE_STRING logFileUnicodeStr1;

// 初始化UNICODE_STRING字符串
RtlInitUnicodeString(&logFileUnicodeStr1, L"\\?\\C:\\1.log");
// 或者写成 L"\\Device\\HarddiskVolume1\\1.log"

// 初始化objectAttributes
InitializeObjectAttributes(&objectAttributes,
                        &logFileUnicodeStr1,
                        OBJ_CASE_INSENSITIVE,
                        NULL,
                        NULL);
                        
// 打开文件
NTSTATUS ntStatus = ZwOpenFile(&hfile,
                            GENERIC_ALL,
                            &objectAttributes,
                            &iostatus,
                            FILE_SHARE_READ | FILE_SHARE_WRITE,
                            FILE_SYNCHARONOUS_IO_NONALERT);
if(NT_STATUS(ntStatus))
{
    KdPrint(("Open file successfully!\n"));
)
else
{
    KdPrint(("Open file unsuccessfully!\n"));
}

// 文件操作 
// ……

// 关闭文件句柄
ZwClose(hfile);

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WendyWJGu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值