If the UEFI Driver is a Service Driver, the Service Binding Protocol is installed in the driver entry point. The following example shows an implementation of a Service Binding Protocol that is installed into the Handle Database in the driver entry point. A Service Binding Protocol is always paired with another protocol so, for this example, the paired protocol is the ABC_PROTOCOL
.
Global variables are declared for the handle on which the Service Binding Protocol is installed, the instance of the Service Binding Protocol, and an instance of the ABC_PROTOCOL
. The ABC_PROTOCOL
instance is installed onto a new handle every time the Service Binding Protocol service CreateChild()
is called. The ABC_PROTOCOL
is uninstalled from a child handle every time the Service Binding Protocol service DestroyChild()
is called.
#include <Uefi.h>#include <Protocol/ServiceBinding.h>#include <Library/UefiBootServicesTableLib.h>​typedef struct {UINT32 AbcField;} ABC_PROTOCOL;​EFI_HANDLE gAbcServiceBindingHandle = NULL;​EFI_SERVICE_BINDING_PROTOCOL gAbcServiceBinding = {AbcCreateChild,AbcDestroyChild};​ABC_PROTOCOL gAbc = {0};​EFI_STATUSEFIAPIAbcCreateChild (IN EFI_SERVICE_BINDING_PROTOCOL *This,IN OUT EFI_HANDLE *ChildHandle){EFI_HANDLE NewHandle;NewHandle = NULL;return gBS->InstallMultipleProtocolInterfaces (&NewHandle,&gAbcProtocolGuid,&gAbc,NULL);}​EFI_STATUSEFIAPIAbcDestroyChild (IN EFI_SERVICE_BINDING_PROTOCOL *This,IN EFI_HANDLE ChildHandle){return gBS->UninstallMultipleProtocolInterfaces (ChildHandle,&gAbcProtocolGuid,&gAbc,NULL);}​EFI_STATUSEFIAPIAbcDriverEntryPoint (IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable){//// Install Service Binding Protocol for ABC onto a new handle//return gBS->InstallMultipleProtocolInterfaces (&gAbcServiceBindingHandle,&gAbcServiceBindingProtocolGuid,&gAbcServiceBinding,NULL);}