资源简介
这是基于微端口的虚拟磁盘驱动代码,
实现了主要框架,包括 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个文件信息
评论
共有 条评论