資源簡介
這是基于微端口的虛擬磁盤驅動代碼,
實現了主要框架,包括 SCSIPORT和STORPORT兩套接口,
驅動安裝后會生成一個內存磁盤,可按照正常的磁盤那樣在磁盤管理器
里創建和格式化等,
虛擬磁盤驅動是一個挺有用的驅動,
比如我們可以做成內存類型的磁盤,大大加快文件的訪問速度,
做成一個鏡像文件類型的虛擬磁盤,如虛擬光驅等等;
做成一個網絡類型的虛擬磁盤,所有的讀寫虛擬盤的數據通過網絡存取于服務器上。
一個典型的比如無盤工作站的應用,核心中一個部分就是網絡虛擬磁盤驅動,
當系統引導從實模式轉入到保護模式之后,虛擬磁盤驅動模擬出系統C盤,
把磁盤讀寫請求轉發到服務器,從而構成一個無盤工作站模型。
此代碼實現了MINIPORT主要架構,
可用于研究學習用途,勿用于商業。
代碼還沒完善,有興趣的朋友可在此代碼上做擴展。
以下文章以及后續文章簡單闡述了這個對應的虛擬磁盤驅動的大致原理,有興趣可看看。
http://blog.csdn.net/fanxiushu/article/details/9903123

代碼片段和文件信息
///?By?Fanxiushu?2013-08-10
#include?“vdisk.h“
#define??DEV_NAME???L“\\Device\\VirtDisk“
#define??DOS_NAME???L“\\DosDevices\\VirtDisk“
NTSTATUS?ioctl_init(?adapter_t*?a?)
{
NTSTATUS?status?=?STATUS_SUCCESS;
UNICODE_STRING?name;?RtlInitUnicodeString(?&name?DEV_NAME);
status?=?IoCreateDevice(?a->driver_object?0?&name?FILE_DEVICE_VIRTDISK?0?FALSE?&a->ioctl_device?);?
if(?!NT_SUCCESS(status)){
DPT(“Create?Control?Device?Error<%u>\n“status);
return?status;
}
UNICODE_STRING?lname;?RtlInitUnicodeString(?&lname?DOS_NAME?);?
status?=?IoCreateSymboliclink(?&lname?&name?);
if(?!NT_SUCCESS(status)?){
IoDeleteDevice(?a->ioctl_device?);?a->ioctl_device?=?NULL;?
return?status?;?
}
a->ioctl_device->Flags?&=?~DO_DEVICE_INITIALIZING;?//一切就緒,準備接收IRP
///
return?status;
}
void?ioctl_deinit(?adapter_t*?a?)
{
UNICODE_STRING?lname;?RtlInitUnicodeString(?&lname?DOS_NAME?);?
IoDeleteSymboliclink(?&lname?);
IoDeleteDevice(?a->ioctl_device?);?a->ioctl_device?=?NULL;?
}
NTSTATUS?ioctl_func_createclose(?PDEVICE_object?dev?PIRP?irp?)
{
NTSTATUS?status?=?STATUS_SUCCESS;?
PIO_STACK_LOCATION?irpStack?=?IoGetCurrentIrpStackLocation(?irp?);
////
irp->IoStatus.Status?=?status;
irp->IoStatus.Information?=?0;
IoCompleteRequest(?irp?IO_NO_INCREMENT);
return?status;?
}
NTSTATUS?ioctl_func_devicecontrol(?PDEVICE_object?dev?PIRP?irp?)
{
NTSTATUS?status?=?STATUS_SUCCESS;?
PIO_STACK_LOCATION?irpStack?=?IoGetCurrentIrpStackLocation(?irp?);
////
irp->IoStatus.Status?=?status;
irp->IoStatus.Information?=?0;
IoCompleteRequest(?irp?IO_NO_INCREMENT);
return?status;?
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????7201??2013-08-22?14:50??driver\buildchk_win7_x86.log
?????文件?????????28??2013-08-08?18:49??driver\dirs
?????文件????????109??2013-08-11?01:09??driver\fine.cmd
?????文件???????1674??2013-08-11?14:38??driver\ioctl.cpp
?????文件?????????46??2013-08-11?00:31??driver\ioctl.h
?????文件???????4559??2013-08-22?14:06??driver\main.cpp
?????文件????????537??2013-03-24?17:07??driver\ScsiPort\makefile
?????文件??????25116??2013-08-22?14:50??driver\ScsiPort\objchk_win7_x86\i386\ioctl.obj
?????文件??????22705??2013-08-22?14:50??driver\ScsiPort\objchk_win7_x86\i386\main.obj
?????文件???????2373??2013-08-22?14:12??driver\ScsiPort\objchk_win7_x86\i386\main.obj.oacr.root.x86chk.pft.xm
?????文件??????33817??2013-08-22?14:50??driver\ScsiPort\objchk_win7_x86\i386\user_disk.obj
?????文件????????508??2013-08-22?14:12??driver\ScsiPort\objchk_win7_x86\i386\user_disk.obj.oacr.root.x86chk.pft.xm
?????文件??????29653??2013-08-22?14:50??driver\ScsiPort\objchk_win7_x86\i386\user_intf.obj
?????文件?????184320??2013-08-22?14:50??driver\ScsiPort\objchk_win7_x86\i386\vc90.pdb
?????文件??????29562??2013-08-22?14:50??driver\ScsiPort\objchk_win7_x86\i386\virt_init.obj
?????文件??????30097??2013-08-22?14:50??driver\ScsiPort\objchk_win7_x86\i386\virt_scsi.obj
?????文件????????449??2013-08-22?14:10??driver\ScsiPort\objchk_win7_x86\i386\_ob
?????文件?????????86??2013-08-08?19:32??driver\ScsiPort\sources
?????文件???????1456??2013-08-09?21:35??driver\ScsiPort\virtdisk.inf
????.CA....????265216??2013-08-22?14:50??driver\ScsiPort\virtdisk.pdb
?????文件???????8832??2013-08-22?14:50??driver\ScsiPort\virtdisk.sys
?????文件????????189??2013-08-09?22:48??driver\ScsiPort\安裝說明.txt
?????文件????????498??2013-08-20?13:50??driver\sources.inc
?????文件????????537??2013-03-24?17:07??driver\StorPort\makefile
?????文件??????27944??2013-08-22?14:50??driver\StorPort\objchk_win7_x86\i386\ioctl.obj
?????文件??????26084??2013-08-22?14:50??driver\StorPort\objchk_win7_x86\i386\main.obj
?????文件???????2371??2013-08-22?14:12??driver\StorPort\objchk_win7_x86\i386\main.obj.oacr.root.x86chk.pft.xm
?????文件??????36645??2013-08-22?14:50??driver\StorPort\objchk_win7_x86\i386\user_disk.obj
?????文件????????508??2013-08-22?14:12??driver\StorPort\objchk_win7_x86\i386\user_disk.obj.oacr.root.x86chk.pft.xm
?????文件??????33417??2013-08-22?14:50??driver\StorPort\objchk_win7_x86\i386\user_intf.obj
............此處省略26個文件信息
評論
共有 條評論