阅读:920回复:1
wdm下如何复制文件
已知一文件句柄,需要创建一个新文件,并复制文件内容。
我的做法如下,瞎想的过程,肯定不对: #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] |
|
沙发#
发布于:2004-06-04 10:11
我也是这么做的,不过我更狠一下子读完,再一下子写,哈哈,不用写循环了.
有没有更好的方法? |
|