注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

内核程序复制文件源代码  

2012-03-12 17:09:04|  分类: window驱动学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
#include <ntddk.h>

VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject)
{
DbgPrint("DriverUnload Load...\n");

return ;
}

NTSTATUS MyCopyFile(IN PUNICODE_STRING DestFileName,IN PUNICODE_STRING SourceFileName)
{
/*源和目标文件句柄*/
HANDLE hDestFile,hSourceFile;
PUCHAR buffer = NULL;
IO_STATUS_BLOCK IoStatusBlock1,IoStatusBlock2;
OBJECT_ATTRIBUTES ObjectAttributes1,ObjectAttributes2;
NTSTATUS ntStatus;
ULONG length;
LARGE_INTEGER offset = {0};

InitializeObjectAttributes(&ObjectAttributes1,SourceFileName,OBJ_CASE_INSENSITIVE,NULL,NULL);
ntStatus = ZwCreateFile(&hSourceFile,
GENERIC_WRITE | GENERIC_READ,
&ObjectAttributes1,
&IoStatusBlock1,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ,
FILE_OPEN_IF,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0);

if (!NT_SUCCESS(ntStatus))
{
DbgPrint("打开源文件失败!");
return ntStatus;
}

InitializeObjectAttributes(&ObjectAttributes2,DestFileName,OBJ_CASE_INSENSITIVE,NULL,NULL);
ntStatus = ZwCreateFile(&hDestFile,
GENERIC_READ | GENERIC_WRITE,
&ObjectAttributes2,
&IoStatusBlock2,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_WRITE,
FILE_OPEN_IF,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0);

if (!NT_SUCCESS(ntStatus))
{
DbgPrint("打开目标文件失败!");
return ntStatus;
}


buffer = (PUCHAR)ExAllocatePool(PagedPool,4*1024);


do 
{
while(1)
{
length = 4*1024;
/*读取文件*/
ntStatus = ZwReadFile(hSourceFile,
NULL,
NULL,
NULL,
&IoStatusBlock1,
buffer,
length,
&offset,
NULL);
if (!NT_SUCCESS(ntStatus))
{
if (ntStatus == STATUS_END_OF_FILE)
ntStatus = STATUS_SUCCESS;
break;
}

//获取实际读取到的长度
length = IoStatusBlock1.Information;

ntStatus = ZwWriteFile(hDestFile,
NULL,
NULL,
NULL,
&IoStatusBlock2,
buffer,
length,
&offset,
NULL);

if (!NT_SUCCESS(ntStatus))
break;

offset.QuadPart += length;
}
} while (0);

/*在退出之前*/
if (hDestFile != NULL)
ZwClose(hDestFile);
if (hSourceFile != NULL)
ZwClose(hSourceFile);
if (buffer != NULL)
ExFreePool(buffer);

return STATUS_SUCCESS;
}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING pRegistryPath)
{
UNICODE_STRING SourceFileName;
UNICODE_STRING DestFileName;
NTSTATUS ntStatus;

DbgPrint("DriverEntry Load...\n");

RtlInitUnicodeString(&SourceFileName,L"\\??\\C:\\1.txt");
RtlInitUnicodeString(&DestFileName,L"\\??\\C:\\2.txt");

ntStatus = MyCopyFile(&DestFileName,&SourceFileName);
if (!NT_SUCCESS(ntStatus))
{
DbgPrint("CopyFile Failed...\n");
return ntStatus;
}
else
{
DbgPrint("CopyFile SuccessFully...\n");
}
pDriverObject->DriverUnload = DriverUnload;

return STATUS_SUCCESS;
}


  评论这张
 
阅读(115)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017