资源简介
filedisk 源码 分析 分为核心层和应用层两个部分,特别的详细,有助于对虚拟磁盘的深入研究。
代码片段和文件信息
///////////////////////////////////////////////////////
//该版本的ARG PARSER部分存在问题
//在带有5个参数,但是缺少文件名的状况没有办法进行解析
//BUG一个
////////////////////////////////////////////////////////
#include
#include
#include
#include “filedisk.h“
int Syntax(void)
{
fprintf(stderr “syntax:\n“);
fprintf(stderr “filedisk /mount devicenumber filename [size[k|M|G] | /ro | /cd] driveletter\n“);
fprintf(stderr “filedisk /umount driveletter\n“);
fprintf(stderr “\n“);
fprintf(stderr “example:\n“);
fprintf(stderr “filedisk /mount 0 c:\\temp\\filedisk.img 8M f:\n“);
fprintf(stderr “filedisk /mount 1 c:\\temp\\cdimage.iso /cd i:\n“);
fprintf(stderr “filedisk /umount f:\n“);
fprintf(stderr “filedisk /umount i:\n“);
return -1;
}
void PrintLastError(char* Prefix)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS
NULL
GetLastError()
0
(LPTSTR) &lpMsgBuf
0
NULL
);
fprintf(stderr “%s %s“ Prefix (LPTSTR) lpMsgBuf);
LocalFree(lpMsgBuf);
}
int
Mount(
int DeviceNumber
POPEN_FILE_INFORMATION OpenFileInformation
char DriveLetter
)
{
char VolumeName[] = “\\\\.\\ :“;
char DeviceName[255];
HANDLE Device;
DWORD BytesReturned;
VolumeName[4] = DriveLetter; //处理结果类似“\\\\.\\D:“
////////////////////////////////////////////////////////////////
//测试该虚拟卷是否已经存在,
//如果已经存在
//则输出错误
////////////////////////////////////////////////////////////////
Device = CreateFile(
VolumeName
GENERIC_READ | GENERIC_WRITE
FILE_SHARE_READ | FILE_SHARE_WRITE
NULL
OPEN_EXISTING
FILE_FLAG_NO_BUFFERING
NULL
);
if (Device != INVALID_HANDLE_VALUE) //这里判断的是合法的情况
{
SetLastError(ERROR_BUSY);
PrintLastError(&VolumeName[4]);
return -1;
}
////////////////////////////////////////////////////////////////
//如果不存在
//则开始建立虚拟盘符
//DEVICE_NAME_PREFIX=“\Device\FileDisk\FileDisk”
////////////////////////////////////////////////////////////////
sprintf(DeviceName DEVICE_NAME_PREFIX “%u“ DeviceNumber);
////////////////////////////////////////////////////////////////
//所有到VolumeName的IO请求都将被重定向到DeviceName
//执行到这里,在系统中应该可以看见一个虚拟的盘符出现
//但是还不能对该盘符做任何操作
////////////////////////////////////////////////////////////////
if (!DefineDosDevice(
DDD_RAW_TARGET_PATH
&VolumeName[4]
DeviceName
))
{
PrintLastError(&VolumeName[4]);
return -1;
}
////////////////////////////////////////////////////////////////
//打开虚拟盘符
//如果打开设备成功,则向其发送IOCTL_FILE_DISK_OPEN_FILE IRP
//其中IOCTL_FILE_DISK_OPEN_FILE在filedisk
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 356 2002-08-08 14:14 ccdeath-filedisk\filedisk.reg
文件 10556 2004-06-09 08:14 ccdeath-filedisk\filedisk.sys
文件 24455 2009-08-21 20:24 ccdeath-filedisk\filedisk应用层\Debug\filedisk.obj
文件 176263 2009-08-21 20:24 ccdeath-filedisk\filedisk应用层\Debug\filedisk应用层.exe
文件 185200 2009-08-21 20:24 ccdeath-filedisk\filedisk应用层\Debug\filedisk应用层.ilk
I.A.... 3715948 2009-08-21 20:24 ccdeath-filedisk\filedisk应用层\Debug\filedisk应用层.pch
文件 361472 2009-08-21 20:24 ccdeath-filedisk\filedisk应用层\Debug\filedisk应用层.pdb
文件 41984 2009-08-21 20:24 ccdeath-filedisk\filedisk应用层\Debug\vc60.idb
文件 69632 2009-08-21 20:24 ccdeath-filedisk\filedisk应用层\Debug\vc60.pdb
文件 10574 2007-12-26 10:15 ccdeath-filedisk\filedisk应用层\filedisk.c
文件 1057 2007-12-26 10:20 ccdeath-filedisk\filedisk应用层\filedisk.h
文件 4435 2007-12-26 08:50 ccdeath-filedisk\filedisk应用层\filedisk应用层.dsp
文件 553 2009-08-21 20:19 ccdeath-filedisk\filedisk应用层\filedisk应用层.dsw
文件 50176 2009-08-21 20:57 ccdeath-filedisk\filedisk应用层\filedisk应用层.ncb
文件 48640 2009-08-21 20:57 ccdeath-filedisk\filedisk应用层\filedisk应用层.opt
文件 1386 2009-08-21 20:24 ccdeath-filedisk\filedisk应用层\filedisk应用层.plg
....... 1760 2007-12-26 08:45 ccdeath-filedisk\filedisk核心层\buildchk.log
文件 42187 2009-08-22 22:32 ccdeath-filedisk\filedisk核心层\filedisk.c
文件 1158 2007-12-26 09:45 ccdeath-filedisk\filedisk核心层\filedisk.h
文件 4069 2007-12-26 08:40 ccdeath-filedisk\filedisk核心层\filedisk核心层.dsp
文件 757 2007-12-26 08:53 ccdeath-filedisk\filedisk核心层\filedisk核心层.dsw
文件 66560 2009-08-20 23:58 ccdeath-filedisk\filedisk核心层\filedisk核心层.ncb
文件 53760 2009-08-20 23:58 ccdeath-filedisk\filedisk核心层\filedisk核心层.opt
文件 1296 2007-12-26 08:39 ccdeath-filedisk\filedisk核心层\filedisk核心层.plg
文件 267 2006-11-03 20:33 ccdeath-filedisk\filedisk核心层\MAKEFILE
文件 91 2007-12-26 08:44 ccdeath-filedisk\filedisk核心层\Sources
文件 307 2002-08-08 14:25 ccdeath-filedisk\install.txt
文件 179 2007-12-26 13:24 ccdeath-filedisk\阅读之前说明.txt
目录 0 2009-08-21 20:24 ccdeath-filedisk\filedisk应用层\Debug
目录 0 2009-08-20 23:57 ccdeath-filedisk\filedisk核心层\Debug
............此处省略6个文件信息
- 上一篇:最优化方法课件 最优化理论与方法
- 下一篇:RT-thread-0.3.1
评论
共有 条评论