Driver
Instances
Windows
allows for multiples instances of an installable driver. The system creates an
instance of the driver each time the driver is opened and destroys the instance
when the driver is closed. Driver instances are especially useful for
installable drivers that support multiple devices or that are opened by
multiple applications or by the same application multiple times.
To help the
driver keep track of the instances, the system sends a driver instance handle
with each driver message after the instance has been created. Because this
handle uniquely identifies the instance, installable drivers often associate
the handle with memory and other resources that they have specifically
allocated for the instance.
When the
first instance is opened, the system sends the DRV_LOAD
When
processing a DRV_LOAD message, a driver typically reads configuration settings
from the registry, configures the driver and any associated hardware, and
allocates memory for use by all instances of the driver. If a driver cannot
complete the configuration or allocate memory, it returns zero to direct the
system to immediately remove the driver from memory and prevent any subsequent
messages from being sent. When processing the DRV_ENABLE message, the driver
prepares the hardware to receive and process input and output (I/O) requests.
The preparation may include installing interrupt handlers.
When
processing the DRV_OPEN message, the driver allocates memory or resources
required by the given instance of the driver and then returns a nonzero value.
The system uses this nonzero value as the driver identifier in
subsequent driver messages for the instance. The driver can use this identifier
for any purpose. For example, some drivers use a memory handle for the
identifier to gain quick access to memory containing information about the
given instance.
Many
installable drivers process the second parameter of the DRV_OPEN message,
giving the system and applications the means to send additional information to
the driver when opening an instance. The parameter can be a single value or an
address of a structure containing a set of values. When processing DRV_OPEN,
the driver checks the parameter to determine whether it is a value and uses the
given values, if any, to complete the creation of the instance.
The system
sends a DRV_CLOSE
When
processing the DRV_CLOSE message, the driver typically frees any memory or
resources allocated for the instance. When processing the DRV_DISABLE message,
the driver places any hardware in an inactive state, which may include the
removal of interrupt handlers. When processing the DRV_FREE message, the driver
frees any memory or resources that are still allocated.
Installable
drivers are not required to support multiple instances. A driver can prevent
any instance from being created by returning zero for the DRV_OPEN