【驱动笔记3】在驱动中读写文件

上传人:wm****3 文档编号:45936685 上传时间:2018-06-20 格式:PDF 页数:5 大小:88.48KB
返回 下载 相关 举报
【驱动笔记3】在驱动中读写文件_第1页
第1页 / 共5页
【驱动笔记3】在驱动中读写文件_第2页
第2页 / 共5页
【驱动笔记3】在驱动中读写文件_第3页
第3页 / 共5页
【驱动笔记3】在驱动中读写文件_第4页
第4页 / 共5页
【驱动笔记3】在驱动中读写文件_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《【驱动笔记3】在驱动中读写文件》由会员分享,可在线阅读,更多相关《【驱动笔记3】在驱动中读写文件(5页珍藏版)》请在金锄头文库上搜索。

1、【驱动笔记 3】在驱动中读写文件学习各种高级外挂制作技术,马上去百度搜索“魔鬼作坊“,点击第一个站进入, 快速成为做挂达人。对文件的读写操作一直是我们需要熟练掌握的内容,在 ring3我们可以使用 CreateFile、ReadFile、WriteFile 等 API,在 ring0同样很相似,不过函数变成了 ZwCreateFile、ZwReadFile、ZwWriteFile 等函数。在“ 【驱动笔记1】第一个驱动程序”一文中我们曾经用到过 ZwCreateFile,并且成功使用它创建了一个新文件, 但那个文件里面什么内容也没有。 本节我们就对那个程序进行扩充,实现一个 MyCopyFil

2、e 函数,通过文件的读写来复制文件。下面的代码来自楚狂人的Windows 驱动编程基础教程 ,我把它前面省略的文件打开和缓冲区分配过程都补充完整了,下面是该函数的完整代码。BOOLEANMyCopyFile(IN PUNICODE_STRINGustrDestFile,IN PUNICODE_STRINGustrSrcFile)HANDLEhSrcFile, hDestFile;PVOIDbuffer = NULL;ULONGlength = 0;LARGE_INTEGERoffset = 0;IO_STATUS_BLOCK Io_Status_Block = 0;OBJECT_ATTRIBU

3、TES obj_attrib;NTSTATUS status;BOOLEANbRet = FALSE;do/ 打开源文件InitializeObjectAttributes(status = ZwCreateFile(if(!NT_SUCCESS(status)bRet = FALSE;goto END;/ 打开目标文件InitializeObjectAttributes(status = ZwCreateFile(if(!NT_SUCCESS(status)bRet = FALSE;goto END;/ 为 buffer 分配4KB 空间buffer = ExAllocatePool(Non

4、PagedPool, 1024 * 4);if(buffer = NULL)bRet = FALSE;goto END;/ 复制文件while (1)length = 4 * 1024;/ 读取源文件status = ZwReadFile(hSrcFile,NULL,NULL,NULL,if(!NT_SUCCESS(status)/ 如果状态为 STATUS_END_OF_FILE,说明文件已经读取到末尾if(status = STATUS_END_OF_FILE)bRet = TRUE;goto END;/ 获得实际读取的长度length = Io_Status_Block.Informat

5、ion;/ 写入到目标文件status = ZwWriteFile(hDestFile,NULL,NULL,NULL,if(!NT_SUCCESS(status)bRet = FALSE;goto END;/ 移动文件指针offset.QuadPart += length;while (0);END:if(hSrcFile)ZwClose(hSrcFile);if(hDestFile)ZwClose(hDestFile);if(buffer = NULL)ExFreePool(buffer);return bRet;在 DriverEntry 中调用该函数的测试代码如下所示:/ 测试函数RtlInitUnicodeString(RtlInitUnicodeString(if(MyCopyFile(elseKdPrint(“ReadFileTest CopyFile Error!“);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号