鱼C论坛

 找回密码
 立即注册
查看: 2904|回复: 1

《Windows内核安全与驱动开发》书-学习笔记2

[复制链接]
发表于 2015-11-30 16:06:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 codecook 于 2015-11-30 16:18 编辑

今天就没那么多废话了,今天学习第四章文件、注册表、线程。
先上一个例子来补充一下书中的ZwCreateFile,为什么要补充,是因为书中的例子省略了一句代码,出现了编译错误:
//打开或创建一个文件
        HANDLE file_handle=NULL;
        NTSTATUS status;
        IO_STATUS_BLOCK io_status_block;    //这里,书中的实例缺少了这个定义,造成代码不完整。
        OBJECT_ATTRIBUTES object_attributes;
        UNICODE_STRING ufile_name=RTL_CONSTANT_STRING(L"\\??\\C:\\a.txt");  // C:是一个符号链接,符号链接一般都在\\??\\下
        //OBJ_CASE_INSENSITIVE目标文件不区分大小写  OBJ_KERNEL_HANDLE文件需用内核句柄
        InitializeObjectAttributes(&object_attributes,&ufile_name,OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,NULL,NULL);
        status=ZwCreateFile(
                &file_handle,                                        
                GENERIC_READ|GENERIC_WRITE,
                &object_attributes,
                &io_status_block,
                NULL,
                FILE_ATTRIBUTE_NORMAL,
                FILE_SHARE_READ,
                FILE_OPEN_IF,
                FILE_NON_DIRECTORY_FILE|FILE_RANDOM_ACCESS|FILE_SYNCHRONOUS_IO_NONALERT,
                NULL,
                0
                );
        ZwClose(file_handle);

接着同样的问题。ZwReadFile与ZwWriteFile书中并没有给出单独用法,而是用了一个函数MyCopyFile,但是这个例子也是不齐全,需要读者自行完善,我简单处理,实现了这个例子的效果:
//复制一个已存在的文件到另一个新文件
        HANDLE aa_file_handle=NULL;
        NTSTATUS status;
        IO_STATUS_BLOCK io_status_block;
        OBJECT_ATTRIBUTES object_attributes;
        UNICODE_STRING ufile_name=RTL_CONSTANT_STRING(L"\\??\\C:\\aa.txt");
        //OBJ_CASE_INSENSITIVE目标文件不区分大小写  OBJ_KERNEL_HANDLE文件需用内核句柄
        InitializeObjectAttributes(&object_attributes,&ufile_name,OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,NULL,NULL);
        status=ZwCreateFile(
                &aa_file_handle,
                GENERIC_READ|GENERIC_WRITE,
                &object_attributes,
                &io_status_block,
                NULL,
                FILE_ATTRIBUTE_NORMAL,
                FILE_SHARE_READ,
                FILE_OPEN_IF,
                FILE_NON_DIRECTORY_FILE|FILE_RANDOM_ACCESS|FILE_SYNCHRONOUS_IO_NONALERT,
                NULL,
                0
                );

        HANDLE bb_file_handle=NULL;        
        RtlInitUnicodeString(&ufile_name,L"\\??\\C:\\bb.txt");
        //OBJ_CASE_INSENSITIVE目标文件不区分大小写  OBJ_KERNEL_HANDLE文件需用内核句柄
        InitializeObjectAttributes(&object_attributes,&ufile_name,OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,NULL,NULL);
        status=ZwCreateFile(
                &bb_file_handle,
                GENERIC_READ|GENERIC_WRITE,
                &object_attributes,
                &io_status_block,
                NULL,
                FILE_ATTRIBUTE_NORMAL,
                FILE_SHARE_READ,
                FILE_OPEN_IF,
                FILE_NON_DIRECTORY_FILE|FILE_RANDOM_ACCESS|FILE_SYNCHRONOUS_IO_NONALERT,
                NULL,
                0
                );

        PVOID buffe =NULL;
        LARGE_INTEGER offset={0};
        ULONG length = 1;
    buffe = ExAllocatePool(NonPagedPool, 1);  //书中缺少了这句,不分配内存实例做不下去。
        while(1)
        {
                status = ZwReadFile(aa_file_handle,NULL,NULL,NULL,&io_status_block,buffe,length,&offset,NULL);

                if (!NT_SUCCESS(status))
                {
                        if(status==STATUS_END_OF_FILE)
                                status =STATUS_SUCCESS;
                        break;
                }
                ZwWriteFile(bb_file_handle,NULL,NULL,NULL,&io_status_block,buffe,length,&offset,NULL);                
                offset.QuadPart++;
        }
        ZwClose(aa_file_handle);
        ZwClose(bb_file_handle);
        if(buffe!=NULL)
                ExFreePool(buffe);
今天的收获还不错,温故了内存、字符串等,学习了一个创建文件,和复制文件。
今天的问题是不知道如何剪切一个文件。

评分

参与人数 1鱼币 +5 收起 理由
康小泡 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-1 18:15:55 | 显示全部楼层
都学内核了啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表