一 创建虚拟磁盘设备
IoCreateDevice(...,
FILE_DEVICE_VIRTUAL_DISK, // 虚拟磁盘设备
(FILE_DEVICE_SECURE_OPEN),
FALSE, // This isn't an exclusive device
...);
二 分配/加载映像
注:分配映像内存时,需要对映射内存进行格式化(FAT16/FAT32/NTFS)。
三 创建符号链接
IoCreateSymbolicLink(L“//DosDevices//X:“, // 符号链接名(A~Z)
L“//Device//Xxxxx“); // 设备名
四 实现如下分发函数
1.IRP_MJ_CREATE/IRP_MJ_READ/IRP_MJ_WRITE/IRP_MJ_CLOSE
由FS调用,用于打开/关闭设备、读写设备。
注:读写时不需要考虑映像格式。
2.IRP_MJ_DEVICE_CONTROL
由FS调用,用于查询设备。需要响应:IOCTL_DISK_GET_PARTITION_INFO、IOCTL_DISK_GET_DRIVE_GEOMETRY、IOCTL_DISK_CHECK_VERIFY、IOCTL_DISK_IS_WRITABLE。
3.IRP_MJ_SYSTEM_CONTROL/IRP_MJ_PNP/IRP_MJ_POWER
仅传递给下层驱动处理。
引自: http://blog.vckbase.com/wetwoo/archive/2009/04/02/36762.html