加载PNP设备
1) 插入设备,向bus driver发IRP_MJ_IO_CONTROL的IRP。
2) bus driver创建设备,加入自己的子设备列表。
3) bus driver调用IoInvalidateDeviceRelations来通知pnp manager更新他的设备树。
4) pnp manager发送一个IRP_MN_QUERY_DEVICE_RELATIONS的IRP。
5) bus driver处理该IRP。
6) pnp manager根据该IRP返回的信息来更新自己的设备树,创建新设备的节点。
7) pnp manager发送一系列IRP来收集新设备的信息来配置设备:
- IRP_MN_QUERY_ID, a separate IRP for each of the following device IDs:
BusQueryDeviceID
BusQueryInstanceID
BusQueryHardwareIDs
BusQueryCompatibleIDs - IRP_MN_QUERY_CAPABILITIES
- IRP_MN_QUERY_DEVICE_TEXT, a separate IRP for each of the following items:
DeviceTextDescription
DeviceTextLocationInformation - IRP_MN_QUERY_BUS_INFORMATION
- IRP_MN_QUERY_RESOURCES
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
8) pnp manager在注册表中创建如下项:
HKLM\System\CurrentControlSet\Enum\<enumerator>\<deviceID>
HKLM\System\CurrentControlSet\Enum\<enumerator>\<deviceID>\<instanceID>