ScsiClass2分析

本文深入探讨了磁盘驱动的内部工作原理,包括minidriver和classdriver的概念,详细解析了disk.sys中的DriverEntry函数及ScsiClassInitialize的实现过程,展示了如何通过DeviceScsiPort读取磁盘资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我感觉磁盘驱动是mini driver+class driver。

其中class2.sys就是类驱动
而disk.sys就是mini driver

mini driver的DriverEntry调用

NTSTATUS STDCALL
DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
CLASS_INIT_DATA InitData;

RtlZeroMemory(&InitData,
sizeof(CLASS_INIT_DATA));

InitData.InitializationDataSize = sizeof(CLASS_INIT_DATA);
InitData.DeviceExtensionSize = sizeof(DEVICE_EXTENSION) + sizeof(DISK_DATA);
InitData.DeviceType = FILE_DEVICE_DISK;
InitData.DeviceCharacteristics = 0;

InitData.ClassError = NULL; // DiskClassProcessError;
InitData.ClassReadWriteVerification = DiskClassCheckReadWrite;
InitData.ClassFindDeviceCallBack = DiskClassCheckDevice;
InitData.ClassFindDevices = DiskClassFindDevices;
InitData.ClassDeviceControl = DiskClassDeviceControl;
InitData.ClassShutdownFlush = DiskClassShutdownFlush;
InitData.ClassCreateClose = NULL;
InitData.ClassStartIo = NULL;

return(ScsiClassInitialize(DriverObject,
RegistryPath,
&InitData));
}
 
在ScsiClassInitialize中,它利用\Device\ScsiPort0或\Device\ScsiPort1读取磁盘资料。

	  /* check scsi port for attached disk drives */
if (InitializationData->ClassFindDevices(DriverObject,
Argument2,
InitializationData,
PortDeviceObject,
PortNumber))
{
DiskFound = TRUE;
}
 
下面是disk.sys中的DiskClassFindDevices

转载于:https://www.cnblogs.com/fanzi2009/archive/2009/06/03/1495178.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值