YuBo97
驱动牛犊
驱动牛犊
  • 注册日期2003-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:1181回复:3

VXD中无法读取文件!

楼主#
更多 发布于:2003-10-25 20:53
平台:Windows98
目标:检测到某个文件读取时将此拷贝到另外一个目录
手段:采用R0_ReadFile,经过设置R0_SWAPPER_CALL标志防止IFS重入。但是在成功打开文件以后,使用R0_ReadFile函数不能读取文件,返回代码为5,就是禁止访问!
经过试验,即使是新建一个文件,然后写入部分信息后(写入正常),也无法读取,返回代码也是5,禁止访问。

请问有谁知道如何读取文件内容。

附:相关源代码:

BYTE pAction;
WORD pError;
HANDLE hSource=NULL;
HANDLE hTarget=NULL;
hSource=R0_OpenCreateFile(
TRUE,SourceName,
OPEN_ACCESS_READONLY||OPEN_SHARE_DENYNONE,
ATTR_NORMAL,
ACTION_IFEXISTS_OPEN||ACTION_IFNOTEXISTS_FAIL,
FLAG_R0_SWAPPER_CALL,
&pError,
&pAction);
if (pError==0)
{//打开源文件成功
hTarget=R0_OpenCreateFile(
FALSE,TargetName,
OPEN_ACCESS_WRITEONLY,
ATTR_NORMAL,
ACTION_IFNOTEXISTS_CREATE|ACTION_IFEXISTS_TRUNCATE,
R0_NO_CACHE,
&pError,
&pAction);
if (pError==0)
{//打开目标文件成功,开始拷贝
//以1024为单位开始拷贝
BYTE pBuffer[Read_BLOCK];
DWORD Copyed=0;
DWORD Writed=0;
DWORD Readed=Read_BLOCK;
DWORD ToRead=Read_BLOCK;
while(Readed==ToRead)
{
Readed=R0_ReadFile(
FALSE,hSource,
(void*)pBuffer,ToRead,
Copyed,&pError);
_wd(\"Read Error:\",pError);
_wd(\"Readed    :\",Readed);
if (Readed>0)
{//写入
Writed=R0_WriteFile(
FALSE,hTarget,
(void*)pBuffer,Readed,
Copyed,&pError);
_wd(\"Write Error:\",pError);
_wd(\"Writed     :\",Writed);
}
Copyed+=Readed;
}
Success=true;
}
}
YuBo97
驱动牛犊
驱动牛犊
  • 注册日期2003-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-25 21:47
搞定了,呵呵

原来源文件也必须用R0_NO_CACHE,而且读取只能1024字节读取
ilikepweb
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-26 14:32
又自己搞定了啊?
54
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-31 19:25
用户被禁言,该主题自动屏蔽!
游客

返回顶部