The Infrared driver stack is deprecated starting in Windows 10, version 1803 and should no longer be used.
When the Microsoft Windows operating systems wants to send CIR data, it uses the IOCTL_IR_TRANSMIT request. Transmit request processing is only a bit more complicated than processing a receive request. IOCTL_IR_TRANSMIT uses both IOCTL data buffers. The input buffer (which uses buffered I/O) contains an IR_TRANSMIT_PARAMS structure that describes the parameters for the transmit request.
Note that the transmit port mask (TransmitPortMask) in IR_TRANSMIT_PARAMS indicates which ports of the indicated IR device the specified data should be transmitted on.
The IOCTL_IR_TRANSMIT data buffer, which is described by a memory descriptor list (MDL), is used to supply the data in RLC format to send by the device controlled by the CIR Port driver. The data buffer comprises a series of transmit "chunks," each of which is described by an IR_TRANSMIT_CHUNK structure.
The repeat count (RepeatCount) in IR_TRANSMIT_CHUNK indicates the number of consecutive times that the RLC data in the Data field of the structure is to be transmitted. The number of bytes of RLC data in the Data field is indicates by the ByteCount field of IR_TRANSMIT_CHUNK.
The last chunk to be transmitted is identified by an OffsetToNextChunk field value of zero.
CIR Port drivers are required to process IOCTL_IR_TRANSMIT requests synchronously. That is, a CIR Port driver must not complete an IOCTL_IR_TRANSMIT request until all of the data that the request describes has been transmitted.