popwalking
驱动牛犊
驱动牛犊
  • 注册日期2004-06-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:919回复:1

wdm下如何复制文件

楼主#
更多 发布于:2004-06-03 17:36
已知一文件句柄,需要创建一个新文件,并复制文件内容。
我的做法如下,瞎想的过程,肯定不对:
#include <ntddk.h>

NTSTATUS copyfile(HANDLE hdIn, WCHAR pszFilePathName[PATHNAMEMAX]){
NTSTATUS ntstatus;
UNICODE_STRING filename;
HANDLE hf=0;
IO_STATUS_BLOCK IoOutStatusBlock;
IO_STATUS_BLOCK IoInStatusBlock;
OBJECT_ATTRIBUTES ObjectAttributes;
FILE_POSITION_INFORMATION FileOutInformation;
FILE_POSITION_INFORMATION FileInInformation;
LARGE_INTEGER nOffSet;
FILE_STANDARD_INFORMATION stdinf;
char buffer[READFILELEN];
char pszSize[256];
int i = 0;

RtlInitUnicodeString(
&filename,
pszFilePathName
);
InitializeObjectAttributes(
&ObjectAttributes,
&filename,
OBJ_CASE_INSENSITIVE,
NULL,
NULL
);
ntstatus=ZwCreateFile(
&hf,
GENERIC_WRITE|SYNCHRONIZE|GENERIC_READ,
&ObjectAttributes,
&IoOutStatusBlock,
0,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_DELETE,
FILE_OPEN_IF,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0
);
if (!NT_SUCCESS(ntstatus)){
return ntstatus;
}
do {
nOffSet = RtlConvertLongToLargeInteger(READFILELEN * i);

ZwReadFile(
hdIn,
0,
0,
0,
&IoInStatusBlock,
buffer,
READFILELEN,
&nOffSet,
NULL
);

//write from buffer
ZwWriteFile(
hf,
0,
0,
0,
&IoOutStatusBlock,
buffer,
READFILELEN,
NULL,
NULL
);

i++;
}
while (READFILELEN == IoInStatusBlock.Information);
ZwClose(hf);
return IoOutStatusBlock.Status;
}
谁能告诉我正确的做法。刚开始接触这个层次的编程。有源码最好了
谢谢

[编辑 -  6/3/04 by  popwalking]

[编辑 -  6/3/04 by  popwalking]
AERROR
驱动牛犊
驱动牛犊
  • 注册日期2004-06-03
  • 最后登录2010-07-05
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望11点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-04 10:11
我也是这么做的,不过我更狠一下子读完,再一下子写,哈哈,不用写循环了.
有没有更好的方法?
游客

返回顶部