Plug and Play
This section provides detailed information on the Plug and Play (PnP) capabilities of the Windows operating system kernel. Plug and Play simplifies the process of adding and removing hardware devices from a computer by automating device detection, configuration, and resource management.
Introduction to Plug and Play
The Plug and Play system is a fundamental component of Windows that allows hardware devices to be dynamically recognized and configured without requiring manual user intervention or system reboots in most cases. It relies on a cooperative effort between hardware, firmware, operating system services, and device drivers.
Key Components and Concepts
- PnP Manager: The core OS component responsible for managing the PnP process.
- Device Tree: A hierarchical representation of all devices detected in the system.
- Resource Arbitration: The process of allocating system resources (like I/O ports, memory addresses, and interrupts) to devices.
- Enumeration: Discovering and identifying hardware devices.
- Configuration: Assigning resources and loading appropriate drivers for devices.
- Events: PnP events signal changes in device status (e.g., arrival, removal, surprise removal).
- Drivers: Kernel-mode drivers that interact with PnP devices.
PnP Operations
Device Enumeration and Detection
When a new device is connected (or at boot time), the PnP manager queries the system's hardware (e.g., via bus enumerators like PCI, USB, ACPI) to discover new devices. Each device reports its identity and capabilities.
Resource Allocation
Once a device is enumerated, the PnP manager determines the resources it requires. It then arbitrates and assigns these resources, ensuring that no two devices attempt to use the same resources. This involves complex algorithms that consider system constraints and device needs.
Driver Loading and Initialization
After resources are assigned, the PnP manager identifies and loads the appropriate device driver. The driver is then initialized, and it sets up the device to be ready for operation. This process often involves specific IRPs (I/O Request Packets) sent to the driver.
Device Start and Stop
The PnP manager controls the lifecycle of a device. It can start a device (making it ready for use) and stop a device (disabling it and releasing its resources). These operations are critical for power management and device removal.
Device Removal
When a device is removed, the PnP manager orchestrates the process of notifying the driver, stopping the device, releasing its resources, and unloading the driver. This must be handled gracefully to avoid system instability.
Driver Interfaces for PnP
Kernel-mode drivers must implement specific dispatch routines to handle PnP IRPs. These IRPs allow drivers to respond to PnP events and manage their devices accordingly.
Common PnP IRPs Handled by Drivers:
IRP_MN_START_DEVICE: Used to start the device, allocate resources, and initialize hardware.IRP_MN_STOP_DEVICE: Used to stop the device, release resources, and prepare for removal.IRP_MN_REMOVE_DEVICE: Used to remove the device from the system, freeing all resources.IRP_MN_QUERY_RESOURCES: Used to query the resources required by the device.IRP_MN_FILTER_RESOURCE_REQUIREMENTS: Allows a filter driver to modify resource requirements.IRP_MN_BUS_RELATIONS_QUERY: Used to query the devices on a bus.
PnP Structures and Data
| Structure | Description |
|---|---|
DEVICE_OBJECT |
Represents a device in the system. |
DRIVER_OBJECT |
Represents a loaded driver. |
PNP_DEVICE_ACTION_HEADER |
Common header for PnP-related operations. |
RESOURCE_REQUIREMENTS_LIST |
Specifies the resources a device needs. |
CM_PARTITION_INFO |
Information about a hardware partition. |