体会最深的是 创建符号 L"\\DosDevices\\Global\\你的符号名" 否则在后面动态创建的设备你的会发现在winobj里看不到,更打不开,符号有全局和局部之分.
还有一个就是
//创建设备
status = IoCreateDevice(
pDriverObject,
sizeof(DEVICE_EXTENSION),
&devName,
FILE_DEVICE_DISK,
0, FALSE,
&pDevObj );
if (!NT_SUCCESS(status))
return status;
pDevObj->Flags = DO_DIRECT_IO; //直接
注意:千万别写成 这样 pDevObj->Flags |= DO_DIRECT_IO; 否则,在DeviceTree中可以看到但打不开,系统提示找不到路径.
而创建虚拟磁盘的主要几个 IRP 是
case IOCTL_DISK_GET_PARTITION_INFO
case IOCTL_DISK_GET_LENGTH_INFO
case IOCTL_DISK_GET_DRIVE_GEOMETRY:
case IOCTL_CDROM_GET_DRIVE_GEOMETRY
case IOCTL_DISK_CHECK_VERIFY:
case IOCTL_CDROM_CHECK_VERIFY:
case IOCTL_STORAGE_CHECK_VERIFY:
case IOCTL_STORAGE_CHECK_VERIFY2
这些就是系统要获取设备的物理结构等 |