内核文件基本操作

调用:

KernelCopyFile(L"\??\C:\888.exe", L"\??\C:\567.exe");

注意点:

1、文件过大怎么读写?
readoffset.QuadPart = 0 这个是读取文件位置,如果读取的文件很大,可以通过这个参数来分批读入
2、ZwClose(hfile2); 最后不关闭句柄的效果
在这里插入图片描述

文件的打开,读取,创建,写入 都包含在这个函数

///KernelCopyFile内核拷贝函数
///执行流程基于旧文件的打开,旧文件内容的读取,新文件的创建最后新文件的写入
/// 参数1是新文件路径,参数2是旧文件路径
NTSTATUS KernelCopyFile(PWCHAR defile_path, PWCH sourcefile_path)
{
   
	NTSTATUS status = STATUS_SUCCESS;// 定义一个返回值
	
	HANDLE hfile1 = NULL; //定义一个句柄

	UNICODE_STRING sourcefilepath = {
    0 }; //源文件路径

	OBJECT_ATTRIBUTES obja1 = {
    0 }; //源文件参数

	IO_STATUS_BLOCK iostack1 = {
    0 };//旧文件操作记录

	RtlInitUnicodeString(&sourcefilepath, sourcefile_path);//初始化一个文件路径

	//初始化
	InitializeObjectAttributes(&obja1, &sourcefilepath, OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE, NULL, NULL);

	//打开文件旧文件
	//参数1:文件句柄
	//参数2:访问权限
	//参数3:&iostack1 会记录这次操作的一些信息
	//参数4:FILE_SHARE_READ 共享读、FILE_SHARE_WRITE共享写
	status = ZwOpenFile(&hfile1, GENERIC_ALL, &obja1, &iostack1, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_SYNCHRONOUS_IO_NONALERT);

	// 判断打开文件是否成功
	if (!NT_SU
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值