全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3125
推到 Plurk!
推到 Facebook!

哪一個VCL可以作出虛擬磁碟機

尚未結案
swlong66
一般會員


發表:8
回覆:3
積分:2
註冊:2004-12-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-17 14:37:34 IP:163.16.xxx.xxx 未訂閱
請問眾高手: 有哪一個元件可以做出一個虛擬磁碟槽,就像網路磁碟機一樣的元件。 在BCB裡面有嗎? 謝謝您的指教!
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-26 21:04:20 IP:211.76.xxx.xxx 未訂閱
BCB 內建是沒有。 您可以用 "virtual drive" "virtual disk" "virtual drivers" 到 google 去找,再配合 VCL , Delphi, BCB 等,看看有沒有現成的元件, 如果沒有,就只有自己寫了。    吃軟也吃硬 dllee.ktop.com.tw StatPlus 系統資源監測器 @ KTOP OpenPLC - IEC61131-3 GeeXboX 媒體播放器
------
http://www.ViewMove.com
swlong66
一般會員


發表:8
回覆:3
積分:2
註冊:2004-12-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-28 22:27:54 IP:218.32.xxx.xxx 未訂閱
請問高手版主:     假如我要自己寫虛擬磁碟機,該從何下手?     這是不是跟硬體有關係,有沒有參考資料呢?     這部分好像在本版很少討論到,     相關書籍幾乎都沒看到,     怎辦?        感謝指教!
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-28 23:00:05 IP:218.187.xxx.xxx 未訂閱
■【問題】RamDriver http://delphi.ktop.com.tw/topic.php?TOPIC_ID=62298 ■(轉貼)windows2000的ramdisk 的資料 http://delphi.ktop.com.tw/topic.php?topic_id=20547 ■RAMDisk程式 http://delphi.ktop.com.tw/topic.php?topic_id=19236 以上是以記憶體去虛擬一個磁碟,有部分可能有原始碼, 或是您可以去找相關的資料,再改成您要的虛擬方式。    基本上,我是不會啦... 以: http://www.dirfile.com/virtual_drive_creator_.htm 如果您想要的只是把一個目錄變成一個虛擬磁碟, 那用 subst 就可以作到,例如: subst X: C:\TEMP 就可以有 X 碟,而 X 碟的內容就是 C:\TEMP 的目錄。    其他商業產品如: PAE PARTICLE ARCHIVE ENGINE (VIRTUAL DRIVE) FOR DELPHI VERSIONS :    DELPHI 6 AND DELPHI 7 http://www.pixeltray.euweb.cz/allproducts.html    吃軟也吃硬 dllee.ktop.com.tw StatPlus 系統資源監測器 @ KTOP OpenPLC - IEC61131-3 GeeXboX 媒體播放器 發表人 - dllee 於 2005/01/28 23:05:18
------
http://www.ViewMove.com
help
一般會員


發表:12
回覆:54
積分:13
註冊:2002-06-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-30 22:41:04 IP:61.230.xxx.xxx 未訂閱
在一位Flyup2005所主持的台灣網路論壇上有你所要的答案. http://8dao.gdan.com.tw/flyup/ccb/index.cgi? 在其中的Delphi資源倉庫中有一個 虛擬磁碟建立程式 不過要有1000分的用戶才能訪問... 我去問問版主是否能po在此囉.... gogowin
------
gogowin
bugmans
高階會員


發表:95
回覆:322
積分:188
註冊:2003-04-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-01 20:46:01 IP:218.166.xxx.xxx 未訂閱
引言:
■【問題】RamDriver
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=62298
■(轉貼)windows2000的ramdisk 的資料
http://delphi.ktop.com.tw/topic.php?topic_id=20547
■RAMDisk程式
http://delphi.ktop.com.tw/topic.php?topic_id=19236
以上是以記憶體去虛擬一個磁碟,有部分可能有原始碼,
或是您可以去找相關的資料,再改成您要的虛擬方式。

我是找到利用檔案虛擬磁碟,附程式碼http://www.acc.umu.se/~bosse/filedisk.zip
網頁的說明也要看一下http://www.acc.umu.se/~bosse/
安裝方式
1.將filedisk.sys放到%systemroot%\system32\drivers2.執行filedisk.reg登錄到電腦中
3.重開機
執行filedisk /mount 0 c:\temp\filedisk.img 8M f:代表將filedisk.img虛擬成f槽,容量8MB
執行filedisk /umount f:代表將f槽卸載 我測試過的確可以執行,只不過我也不會DDK,也看不懂filedisk.sys的程式碼,但是只
要學會filedisk.exe原始碼中如何掛載如何卸載虛擬磁碟就可以應用在自己的程式中
引言:
基本上,我是不會啦...
以:
http://www.dirfile.com/virtual_drive_creator_.htm
如果您想要的只是把一個目錄變成一個虛擬磁碟,
那用 subst 就可以作到,例如:
subst X: C:\TEMP
就可以有 X 碟,而 X 碟的內容就是 C:\TEMP 的目錄。

我在Planet-source-code網站找到利用API來達到相同目的的範例
http://www.planet-source-code.com/vb/sc ripts/ShowCode.asp?txtCodeId=61198&lngWId=1
不用subst.exe,而是用DefineDosDevice(DDD_REMOVE_DEFINITION, sDriveLetter, sMountPath)

http://www.planet-source-code.com/vb/scr ipts/ShowCode.asp?txtCodeId=44627&lngWId=1
使用subst.exe的方法

引言:
其他商業產品如:
PAE PARTICLE ARCHIVE ENGINE (VIRTUAL DRIVE)
FOR DELPHI VERSIONS : DELPHI 6 AND DELPHI 7
http://www.pixeltray.euweb.cz/allproducts.html

哪位網友能說明這技術能用在什麼地方,哪類的軟體需要這個技術
編輯記錄
bugmans 重新編輯於 2008-01-01 19:39:04, 註解 無‧
bugmans
高階會員


發表:95
回覆:322
積分:188
註冊:2003-04-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-02-11 09:28:12 IP:125.225.xxx.xxx 未訂閱
相關文章備份到ktop
http://blog.csdn.net/farsky16/archive/2006/05/06/711070.aspx
FileDisk源码分析
一 安装和使用方法:
1 安装:看install.txt文件;
2 挂载:filedisk /mount 0 c:\proj\myfiledisk\a.img e:
3 卸载:filedisk /umount e:
详细看example.txt文件,在本站的下载中心有下载,包括核心层和应用层的源码。
最多可以同时挂4个设备,分别定义4个设备号,如果同一设备号使用2次,会进入OPEN_FILE
两次,出现"FileDisk: IOCTL_FILE_DISK_OPEN_FILE: Media already opened\n"的错误提示;

二 基本知识:
1 关于DefineDosDevice函数:
在应用层开发中调用它来创建一个\??目录下的符号链接,如:
BOOL okay = DefineDosDevice(DDD_RAW_TARGET_PATH, "test", "\\Device\\FileDisk0");
调用成功后,将会在设备命名空间的\??目录下生成一个名为”test“的符号链接,该链接指
向”“\\Device\\FileDisk0“这个对象。
而在核心态的驱动程序中,需要调用以下的函数来创建相应的符号链接:
IoCreateSymbolicLink(linkname, targname);
Linkname是要创建的符号链接名,相当于上面函数中的”test”,targname是该链接指向的设备对象。

2 filedisk的源映像可以是img,iso,flp等,这些都是磁盘上一个分区的平面映像,所以挂上后可以直接
访问,但不能是整个硬盘的img映像或其它格式如rar等;

3 filedisk的源映像文件名称必须是全路径,即使是在当前目录下也必须是全路径;
4 源映像文件如果不存在且参数中没有指定只读,那么只要在参数中指定了大小则会主动创建它,使
用前会提示先“格式化”,之后就可正常使用了;

三 核心层源码分析:
1 DriverEntry: 主函数入口;备份传入路径,查询注册表值,调用ZwCreateDirectoryObject创建设备
目录,重复4次调用 FileDiskCreateDevice创建设备,初始化操作函数指针。

2 FileDiskCreateDevice:调用IoCreateDevice创建设备,KeInitializeEvent初始化事件对象,PsCreateSystemThread创建内核线程,入口函数是FileDiskThread,传入的函数参数为IoCreateDevice返回的设备对象。
3 FileDiskThread:首先调用KeSetPriorityThread更改自身线程的优先级为LOW_REALTIME_PRIORITY,然后开始for(;;),调用KeWaitForSingleObject函数等待事件对象有信号,如果等到,判断事件类型,有如下几种:
IRP_MJ_READ:调用ZwReadFile读取文件,从内核到用户缓冲区;
IRP_MJ_WRITE:调用ZwWriteFile写入文件,从用户到内核缓冲区;
IRP_MJ_DEVICE_CONTROL:在FileDiskDeviceControl设置事件才会触发,主要有如下两种操作码:
IOCTL_FILE_DISK_OPEN_FILE:调用FileDiskOpenFile。
IOCTL_FILE_DISK_CLOSE_FILE:调用FileDiskCloseFile。

FileDiskOpenFile:根据用户程序传入的映像文件全路径,调用ZwCreateFile在内核中打开它,如果
文件不存在则再创建它,返回文件句柄。
FileDiskCloseFile:调用ZwClose关闭文件。

4 FileDiskCreateClose: 仅返回成功;对应Create,Close操作。
5 FileDiskReadWrite:将IO包插入队列,然后调用KeSetEvent函数,激活事件对象;对应Read,Write操作。
6 FileDiskDeviceControl:用户程序调用DeviceIoControl的响应函数,主要有如下两种操作:
IOCTL_FILE_DISK_OPEN_FILE:设置好参数,将IO包插入队列,设置对象为有信号。
IOCTL_FILE_DISK_CLOSE_FILE:将IO包插入队列,设置对象为有信号。
其它的操作类型因为输入输出共用一个缓冲区,所以都采用系统默认处理,设置好需要输出的参数
后,就直接从这个函数返回了。如:
IOCTL_DISK_GET_DRIVE_GEOMETRY,IOCTL_CDROM_GET_DRIVE_GEOMETRY等;

7 有4种操作是自定义的:FileDiskReadWrite函数两种,FileDiskDeviceControl函数两种,对应的操
作码分别是:
IRP_MJ_READ,IRP_MJ_WRITE,IOCTL_FILE_DISK_OPEN_FILE,IOCTL_FILE_DISK_CLOSE_FILE这4种,在FileDiskThread中等待这4种事件发生,如果等到,就调用相应的函数处理。


四 应用层源码分析:
1 mount:调用DefineDosDevice在应用层创建一个指向设备命名空间的符号链接,用CreateFile打开
此链接,然后调用DeviceIoControl,控制码是IOCTL_FILE_DISK_OPEN_FILE,内核程序响应后,执
行真正打开源映像文件的操作。

2 umount: 上面大致一样,只是多一些步骤,不同的是控制码改为IOCTL_FILE_DISK_CLOSE_FILE,之后必须发送FSCTL_DISMOUNT_VOLUME;

系統時間:2024-05-04 8:20:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!