3.6.4 Multiple protocol instances
Multiple protocols are installed on the same handle if the protocols provide services related to that one handle. There are several handle types. The most common are image handles and device handles. For example, if there are multiple I/O services for a single device that are abstracted through multiple protocols, then multiple protocols must be installed onto the handle for that device.
A handle may have many protocols attached to it. However, it may have only one protocol of each GUID name. In other words, a single handle may not produce more than one instance of any single protocol. This prevents nondeterministic behavior about which instance would be consumed by a given request.
However, drivers may create multiple "instances" of a particular protocol and attach each instance to a different handle. This scenario is the case with the PCI I/O Protocol, where the PCI bus driver installs a PCI I/O Protocol instance for each PCI device. Each "instance" of the PCI I/O Protocol is configured with data values unique to that PCI device, including the location and size of the UEFI-conformant Option ROM (OpROM) image.
Each driver can install customized versions of the same protocol (as long as it
is not on the same handle). For example, each UEFI driver produces the
Component Name Protocols on its driver image handle, yet when the Component
Name Protocols' GetDriverName()
function is called, each handle returns the
unique name of the driver that owns that image handle. The GetDriverName()
function on the USB bus driver handle returns "USB bus driver" for the English
language, but the GetDriverName()
function on the PXE driver handle returns
"PXE base code driver."