• 大小: 324KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: 其他
  • 标签: 驱动,C++  

资源简介

这是基于微端口的虚拟磁盘驱动代码, 实现了主要框架,包括 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.xml

     文件      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.xml

     文件      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\_objects.mac

     文件         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.xml

     文件      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.xml

     文件      33417  2013-08-22 14:50  driver\StorPort\objchk_win7_x86\i386\user_intf.obj

............此处省略26个文件信息

评论

共有 条评论