热门关键字: excel200 蓝光笔记 pps有图像 excel winrar使 添加水印 輸入法 actionsc
当前位置 : IT 知识库 > 网络安全 > 编程技术 > 正文

Windows驱动编程基础教程(连载6)

作者:楚狂人时间:08-05-24

Windows驱动编程基础教程(3.3-4.1)

3.3 文件的读写操作
    打开文件之后,最重要的操作是对文件的读写。读与写的方法是对称的。只是参数输入与输出的方向不同。读取文件内容一般用ZwReadFile,写文件一般使用ZwWriteFile。

    NTSTATUS
      ZwReadFile(
           IN HANDLE  FileHandle,
            IN HANDLE  Event  OPTIONAL,
            IN PIO_APC_ROUTINE  ApcRoutine  OPTIONAL,
            IN PVOID  ApcContext  OPTIONAL,
            OUT PIO_STATUS_BLOCK  IoStatusBlock,
            OUT PVOID  Buffer,
            IN ULONG  Length,
            IN PLARGE_INTEGER  ByteOffset  OPTIONAL,
            IN PULONG  Key  OPTIONAL);

    FileHandle:是前面ZwCreateFile成功后所得到的FileHandle。如果是内核句柄,ZwReadFile和ZwCreateFile并不需要在同一个进程中。句柄是各进程通用的。
    Event :一个事件。用于异步完成读时。下面的举例始终用同步读,所以忽略这个参数。请始终填写NULL。
    ApcRoutine Apc:回调例程。用于异步完成读时。下面的举例始终用同步读,所以忽略这个参数。请始终填写NULL。
    IoStatusBlock:返回结果状态。同ZwCreateFile中的同名参数。
    Buffer:缓冲区。如果读文件的内容成功,则内容被被读到这个缓冲里。
    Length:描述缓冲区的长度。这个长度也就是试图读取文件的长度。
    ByteOffset:要读取的文件的偏移量。也就是要读取的内容在文件中的位置。一般的说,不要设置为NULL。文件句柄不一定支持直接读取当前偏移。
    Key:读取文件时用的一种附加信息,一般不使用。设置NULL。
    返回值:成功的返回值是STATUS_SUCCESS。只要读取到任意多个字节(不管是否符合输入的Length的要求),返回值都是STATUS_SUCCESS。即使试图读取的长度范围超出了文件本来的大小。但是,如果仅读取文件长度之外的部分,则返回STATUS_END_OF_FILE。
    ZwWriteFile的参数与ZwReadFile完全相同。当然,除了读写文件外,有的读者可能会问是否提供一个ZwCopyFile用来拷贝一个文件。这个要求未能被满足。如果有这个需求,这个函数必须自己来编写。下面是一个例子,用来拷贝一个文件。利用到了ZwCreateFile,ZwReadFile和ZwWrite这三个函数。

最新文章
内核级HOOK的几种实现与应用
实现内核级HOOK对于拦截、分析、跟踪系统内核起着致关重要的作用。实现的方法不...
Windows平台内核级文件访问
1.背景 在windows平台下,应用程序通常使用API函数来进行文件访问,创建,打开,...
相关文章
Windows平台内核级文件访问
1.背景 在windows平台下,应用程序通常使用API函数来进行文件访问,创建,打开,...
Windows驱动编程基础教程(连载11)
Windows驱动编程基础教程(6.3) 6.3 使用事件通知 一些读者可能熟悉事件驱...