A virtual device hooks a specific IRQ by calling the VPICD_Virtualize_IRQ service and passing it a pointer to a VPICD_IRQ_Descriptor structure containing the number of the IRQ and the addresses of the callback procedures to support the interrupt. If another virtual device has already virtualized the IRQ, the call fails if either of the virtual devices is unable to share the IRQ. Both virtual devices must set the VPICD_Opt_Can_Share value in the VID_Options field of the structure to permit sharing.