没有合适的资源?快使用搜索试试~ 我知道了~
windows内核驱动读写文件
需积分: 49 49 下载量 115 浏览量
2020-10-11
13:04:35
上传
评论 3
收藏 4KB TXT 举报
温馨提示
试读
6页
windows内核驱动条件下文件的创建、读、写等功能实现源码。适用于驱动调试和运行观察的日志打印输出,比Windbg和reaceview更方便。
资源推荐
资源详情
资源评论
VOID FileOption()
{
HANDLE SourceFileHandle = NULL; //源文件句柄
HANDLE TargetFileHandle = NULL; //目标文件句柄
NTSTATUS Status = STATUS_SUCCESS; //返回状态
OBJECT_ATTRIBUTES ObjectAttributes; //OBJECT_ATTRIBUTES结构
UNICODE_STRING SourceFilePath = RTL_CONSTANT_STRING(L"\\??\\c:\\source.txt"); //源文件
UNICODE_STRING TargetFilePath = RTL_CONSTANT_STRING(L"\\??\\c:\\target.txt"); //目标文件
UNICODE_STRING String = {0}; //指向Buffer
IO_STATUS_BLOCK IoStatusBlock; //返回结果状态结构体
PVOID Buffer = NULL; //buffer指针
USHORT Length = 0; //要读写的长度
LARGE_INTEGER Offset = {0}; //要读写的偏移
//初始化OBJECT_ATTRIBUTES结构体
InitializeObjectAttributes(
&ObjectAttributes,
&SourceFilePath,
OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,
NULL,
NULL);
//以FILE_OVERWRITE_IF方式打开
Status = ZwCreateFile(
&SourceFileHandle,
GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE,
&ObjectAttributes,
&IoStatusBlock,
NULL,
FILE_ATTRIBUTE_NORMAL,
{
HANDLE SourceFileHandle = NULL; //源文件句柄
HANDLE TargetFileHandle = NULL; //目标文件句柄
NTSTATUS Status = STATUS_SUCCESS; //返回状态
OBJECT_ATTRIBUTES ObjectAttributes; //OBJECT_ATTRIBUTES结构
UNICODE_STRING SourceFilePath = RTL_CONSTANT_STRING(L"\\??\\c:\\source.txt"); //源文件
UNICODE_STRING TargetFilePath = RTL_CONSTANT_STRING(L"\\??\\c:\\target.txt"); //目标文件
UNICODE_STRING String = {0}; //指向Buffer
IO_STATUS_BLOCK IoStatusBlock; //返回结果状态结构体
PVOID Buffer = NULL; //buffer指针
USHORT Length = 0; //要读写的长度
LARGE_INTEGER Offset = {0}; //要读写的偏移
//初始化OBJECT_ATTRIBUTES结构体
InitializeObjectAttributes(
&ObjectAttributes,
&SourceFilePath,
OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,
NULL,
NULL);
//以FILE_OVERWRITE_IF方式打开
Status = ZwCreateFile(
&SourceFileHandle,
GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE,
&ObjectAttributes,
&IoStatusBlock,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ,
FILE_OVERWRITE_IF,
FILE_NON_DIRECTORY_FILE|
FILE_RANDOM_ACCESS|
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0);
if (!NT_SUCCESS(Status))
{
DbgPrint("Open source file fault !! - %#x\n", Status);
return Status;
}
//字符串操作
//动态申请内存
Buffer = (PWCHAR)ExAllocatePoolWithTag(NonPagedPool, 1024, 'Tag1');
if (NULL == Buffer)
{
DbgPrint("申请Buffer失败!!\n");
ZwClose(SourceFileHandle);
Status = STATUS_INSUFFICIENT_RESOURCES;
return Status;
}
//初始化字符串指针
RtlInitEmptyUnicodeString(&String, Buffer, 512*sizeof(WCHAR));
//拷贝字符串
RtlCopyUnicodeString(&String, &SourceFilePath);
//追加Unicode变量
RtlAppendUnicodeStringToString(&String, &TargetFilePath);
//追加字符串
FILE_OVERWRITE_IF,
FILE_NON_DIRECTORY_FILE|
FILE_RANDOM_ACCESS|
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0);
if (!NT_SUCCESS(Status))
{
DbgPrint("Open source file fault !! - %#x\n", Status);
return Status;
}
//字符串操作
//动态申请内存
Buffer = (PWCHAR)ExAllocatePoolWithTag(NonPagedPool, 1024, 'Tag1');
if (NULL == Buffer)
{
DbgPrint("申请Buffer失败!!\n");
ZwClose(SourceFileHandle);
Status = STATUS_INSUFFICIENT_RESOURCES;
return Status;
}
//初始化字符串指针
RtlInitEmptyUnicodeString(&String, Buffer, 512*sizeof(WCHAR));
//拷贝字符串
RtlCopyUnicodeString(&String, &SourceFilePath);
//追加Unicode变量
RtlAppendUnicodeStringToString(&String, &TargetFilePath);
//追加字符串
剩余5页未读,继续阅读
资源评论
IwGhostpit
- 粉丝: 17
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功