第一步.生成一个控制设备。当然此前你必须给控制设置指定名称。
第二步.设置 Dispatch Functions. 设置 Fast Io Functions.
第三步.编写一个 File System Notify 回调函数,在其中绑定刚激活的 FS CDO. 并注册这个回调函数。
第四步.编写默认的 dispatch functions.
第五步.处理 IRP_MJ_FILE_SYSTEM_CONTROL,在其中监控卷设备的 Mount和 Dismount.
DriverEntery:程序入口点函数,在其中通过IoCreateDevice函数生成CDO(控制设备对象),设置dispatch function, 通过IoRegisterFsRegistrationChange注册回调函数SfFsNotification当系统中有任何文件系统被激活或者是被注销的时候,注册过的回调函数就会被调用,在其中绑定CDO
IoCreateDevice:生成的CDO保存在最后一个参数里
SfFsNotification:回调函数,调用SfAttachToFileSystemDevice
SfAttachToFileSystemDevice:检查设备类型,生成新设备,调用SfAttachDeviceToDeviceStack进行绑定
SfAttachDeviceToDeviceStack:通过系统调用IoAttachToDeviceStack绑定设备对象device object(DO)到设备栈顶端,这样IRP会首先到达
SfFsControl:相应当有卷mount或dismount时,产生的IRP_MJ_FILE_SYSTEM_CONTROL,调用SfFsControlMountVolume绑定卷设备
SfFsControlMountVolume:使用事件同步的方法,创建事件,等待完成函数SfFsControlMountVolumeComplete设置事件
SfFsControlMountVolumeComplete:调用SfAttachToMountedDevice
SfAttachToMountedDevice:调用SfAttachDeviceToDeviceStack完成卷绑定