WDF下在,在即插即用的设置结构WDF_PNPPOWER_EVENT_CALLBACKS中有一个属性:PNP_WDF_DEVICE_PREPARE_HARDWARE EvtDevicePrepareHardware;
这个属性指定了在设备插上机器时,操作系统要调用的函数。
我的理解: 第一步必须要先安装驱动程序, 然后在操作系统启动的时候就要启动一个服务或者其他进程,打开安装的设备,这样EvtDevicePrepareHardware指定的函数才能调用。
这我就不解了,别的设备都是在使用的时候才打开,为什么PnP的设备驱动在一启动的时候就要打开?那不是浪费资源吗?
谢谢
操作系统之所以能实现即插即用,根本原因是使用了中断!这就很容易理解为什么你插了U盘系统马上就能处理。其实在内核层面,是有一个线程一直在等待即插即用设备插拔的,要是没有这个处理线程,插上优盘也没有用的,所以这个PnP设备的驱动是必须系统启动的时候就要加载!
pnp不是你想象的那样的,他是有一个数据结构,在接到电平变化时,会触发PNP的例程,查找你的驱动。就象U盘一样,插进去,他的USB口会产生一个信号,然后开始寻找驱动。
在最底层,设备插入后,应该是先产生一个中断,去执行相应的中断服务程序,中断服务程序就是驱动的一部分,然后再通知上层应用。
PNP 不是要实现的,你只要给定触发后的动作就可以了
这个是系统已经完成的,你有动作,,系统自动触发,,给你信号,,你根据信号类型,做相应动作就可以了
建议 看张帆的书 ,,讲的很详细