ZwCreateFile问题

baobaodediaozhui 2013-08-01 08:27:06

使用ZwCreateFile在驱动中打开文件,可是总是返回FILE_SUPERSEDED,导致打开失败!

WCHAR *pDescPath = L"\\??\\C:\\Fuck\\fuck.txt";
UNICODE_STRING unstr_descpath;
RtlInitUnicodeString(&unstr_descpath,pDescPath);

HANDLE hSrcFile, hDestFile;
PVOID buffer = NULL;
ULONG length = 0;
IO_STATUS_BLOCK Io_Status_Block = {0};
OBJECT_ATTRIBUTES obj_attrib;
NTSTATUS status;
BOOLEAN bRet = FALSE;

{
//初始化文件属性
InitializeObjectAttributes(&obj_attrib,
&unstr_descpath, //源文件名
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
NULL,
NULL);
// 打开源文件
status = ZwCreateFile( &hSrcFile,
GENERIC_READ | GENERIC_WRITE,
&obj_attrib,//包含要打开的文件名
&Io_Status_Block,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ,
FILE_OPEN,
FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0 );
if(Io_Status_Block.Information == FILE_SUPERSEDED )
{
DbgPrint(("FILE_SUPERSEDED\n"));
//总是会进入此处
}
}

...全文
229 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
baobaodediaozhui 2013-08-05
  • 打赏
  • 举报
回复
引用 1 楼 beijingbeerman 的回复:
FILE_OPEN, 这个参数有问题,如果文件不存在。就会报错。应该用 FILE_OPEN_IF
对于这个参数,如果FILE_OPEN_IF也不行额,而且从逻辑来看也不应该为FILE_OPEN_IF的。 再次求解
beijingbeerman 2013-08-03
  • 打赏
  • 举报
回复
locStatus = ZwCreateFile( &TempFile, GENERIC_READ | GENERIC_WRITE, &ObjAtt, &ioStatusBlock, &pdx->CacheFileSize, FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN_IF, FILE_NON_DIRECTORY_FILE | FILE_RANDOM_ACCESS | FILE_SYNCHRONOUS_IO_NONALERT | FILE_NO_INTERMEDIATE_BUFFERING, NULL, 0);
beijingbeerman 2013-08-03
  • 打赏
  • 举报
回复
FILE_OPEN, 这个参数有问题,如果文件不存在。就会报错。应该用 FILE_OPEN_IF
fldmxp 2013-08-03
  • 打赏
  • 举报
回复
麻烦大家帮我看看我的问题呗http://bbs.csdn.net/topics/390537022

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧