newlife
驱动牛犊
驱动牛犊
  • 注册日期2004-11-25
  • 最后登录2005-05-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1706回复:7

(急)自己做的win界面版filedisk已能创建出盘符,但是无法访问。(50分)

楼主#
更多 发布于:2005-03-08 22:22
已把main函数copy到dialog的button函数中,并做了必要修改

代码如下:
void CTestDlg::OnCreate()
{
char* FileName;
char* Option;
char DriveLetter;

POPEN_FILE_INFORMATION OpenFileInformation;

FileName=\"e:\\
img\\filedisk.img\";

OpenFileInformation =
(OPEN_FILE_INFORMATION *)malloc(sizeof(OPEN_FILE_INFORMATION) + strlen(FileName) + 4);

memset
(OpenFileInformation,
0,
sizeof(OPEN_FILE_INFORMATION) + strlen(FileName) + 4
);

strcpy((char *)OpenFileInformation->FileName, \"\\\\??\\\\\");//复制\\\\??\\\\到str1
strcat((char *)OpenFileInformation->FileName, FileName);//连接字符串2至字符串1后面

OpenFileInformation->FileNameLength =
strlen((char *)OpenFileInformation->FileName);

Option=\"1G\";
DriveLetter=\'z\';

if (Option[strlen(Option) - 1] == \'G\')
{
OpenFileInformation->FileSize.QuadPart =
_atoi64(Option) * 1024 * 1024 * 1024;
}
else if (Option[strlen(Option) - 1] == \'M\')
{
OpenFileInformation->FileSize.QuadPart =
_atoi64(Option) * 1024 * 1024;
}
else if (Option[strlen(Option) - 1] == \'K\')
{
OpenFileInformation->FileSize.QuadPart =
_atoi64(Option) * 1024;
}
else
{
OpenFileInformation->FileSize.QuadPart =
_atoi64(Option);
}
Mount(0,OpenFileInformation, DriveLetter);
}
程序能运行,而且盘符(z)也出来了,但是该分区无法访问,双击显示“无法访问z:\\,设备未就绪”,使用原版filedisk也无法对其进行umont操作,只能通过重启让其消失,问题大概出现在什么地方?如果这里看不出问题,请下载附件中的程序。

15号就要交程序了,请大家帮帮忙,给大家磕头了。
附件名称/大小 下载次数 最后更新
2005-03-08_test.rar (1935KB)  65
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-03-09 09:16
路径有问题呗
调试一下看看不就知道了么
---内核开发合作或提供基础技术服务QQ:22863668 ---
newlife
驱动牛犊
驱动牛犊
  • 注册日期2004-11-25
  • 最后登录2005-05-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-09 11:51
如果是路径的话,我在原版filedisk也是用这个路径丫,但是什么问题也没有。
newlife
驱动牛犊
驱动牛犊
  • 注册日期2004-11-25
  • 最后登录2005-05-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-09 14:49
郁闷了……在oncreate函数里面设置的断点(分别在malloc操作,strcpy,strlen操作几个地方)在程序运行时居然一点作用都不起,直接创建了盘符z:,根本没有在断点处停留……
而且另一方面我试图改变路径,改成“filename=e:\\img\\aa.img”
发现根本没有创建这个文件(而之前的filedisk.img是我用原版filedisk创建的),看来真的是路径出了问题。我想问题可能出在
OpenFileInformation =
(OPEN_FILE_INFORMATION *)malloc(sizeof(OPEN_FILE_INFORMATION) + strlen(FileName) + 4);
strcpy((char *)OpenFileInformation->FileName, \"\\\\??\\\\\");
 strcat((char *)OpenFileInformation->FileName, FileName);
OpenFileInformation->FileNameLength =
strlen((char *)OpenFileInformation->FileName);

这四句上。可能这些问题在大家看来是挺简单的,完全可以凭自己解决,但是由于我的重心一直摆在外语上,编程技术可以说挺差的,所以……有经验的高手们帮忙看看吧,小弟的学位证书毕其功于这一役了,谢谢了。



[编辑 -  3/9/05 by  newlife]
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-03-10 09:16
已把main函数copy到dialog的button函数中,并做了必要修改

代码如下:
void CTestDlg::OnCreate()
{
char* FileName;
char* Option;
char DriveLetter;

POPEN_FILE_INFORMATION OpenFileInformation;

FileName=\"e:\\
img\\filedisk.img\";

OpenFileInformation =
(OPEN_FILE_INFORMATION *)malloc(sizeof(OPEN_FILE_INFORMATION) + strlen(FileName) + 4);

memset
(OpenFileInformation,
0,
sizeof(OPEN_FILE_INFORMATION) + strlen(FileName) + 4
);

strcpy((char *)OpenFileInformation->FileName, \"\\\\??\\\\\");//复制\\\\??\\\\到str1
strcat((char *)OpenFileInformation->FileName, FileName);//连接字符串2至字符串1后面

OpenFileInformation->FileNameLength =
strlen((char *)OpenFileInformation->FileName);

Option=\"1G\";
DriveLetter=\'z\';

if (Option[strlen(Option) - 1] == \'G\')
{
OpenFileInformation->FileSize.QuadPart =
_atoi64(Option) * 1024 * 1024 * 1024;
}
else if (Option[strlen(Option) - 1] == \'M\')
{
OpenFileInformation->FileSize.QuadPart =
_atoi64(Option) * 1024 * 1024;
}
else if (Option[strlen(Option) - 1] == \'K\')
{
OpenFileInformation->FileSize.QuadPart =
_atoi64(Option) * 1024;
}
else
{
OpenFileInformation->FileSize.QuadPart =
_atoi64(Option);
}
Mount(0,OpenFileInformation, DriveLetter);
}
程序能运行,而且盘符(z)也出来了,但是该分区无法访问,双击显示“无法访问z:\\,设备未就绪”,使用原版filedisk也无法对其进行umont操作,只能通过重启让其消失,问题大概出现在什么地方?如果这里看不出问题,请下载附件中的程序。

15号就要交程序了,请大家帮帮忙,给大家磕头了。
 



至少 FileName=\"e:\\
img\\filedisk.img\";是一个错误
应该是 e:\\\\img\\\\...
---内核开发合作或提供基础技术服务QQ:22863668 ---
newlife
驱动牛犊
驱动牛犊
  • 注册日期2004-11-25
  • 最后登录2005-05-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-10 16:03
按照楼上所说的,修改了路径后,果然能够创建出aa.img文件了……虽然还是无法访问z盘……
请问一下,为什么我们在原版filedisk中命令行输入filedisk /mount 0 e:\\img\\aa.img 1G z:就可以,而在mfc环境下需要把路径改成e:\\\\img\\\\aa.img呢?
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2005-03-10 17:45
那不是字符串转义了么
\\\\=\\
---内核开发合作或提供基础技术服务QQ:22863668 ---
gongbin_net
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2005-06-07
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-06-07 13:47
newlife你的那个问题解决没有啊,我也要作个界面版的,也是你那个设备没有就绪的问题。能不能分享下你的想法
游客

返回顶部