Reporting Status of a Protected Output

External events can alter the nature of the protection that is applied to a connector or even modify the type of the connector. The display miniport driver must report these events to OPM applications whenever the driver receives a call to its DxgkDdiOPMGetInformation or DxgkDdiOPMGetCOPPCompatibleInformation function. The display miniport driver must report the following external events by returning the specified status flags from the DXGKMDT_OPM_STATUS enumeration only on the next call to DxgkDdiOPMGetInformation or DxgkDdiOPMGetCOPPCompatibleInformation after the events occur:

Connection working properly
If the connection between the computer and the display device is working properly, the display miniport driver should set the DXGKMDT_OPM_STATUS_NORMAL status flag in the ulStatusFlags member of the DXGKMDT_OPM_STANDARD_INFORMATION, DXGKMDT_OPM_ACTUAL_OUTPUT_FORMAT, DXGKMDT_OPM_ACP_AND_CGMSA_SIGNALING, or DXGKMDT_OPM_CONNECTED_HDCP_DEVICE_INFORMATION structure.

Connection integrity
If the computer and the display device become disconnected, the display miniport driver should set the DXGKMDT_OPM_STATUS_LINK_LOST status flag in the ulStatusFlags member of the DXGKMDT_OPM_STANDARD_INFORMATION, DXGKMDT_OPM_ACTUAL_OUTPUT_FORMAT, DXGKMDT_OPM_ACP_AND_CGMSA_SIGNALING, or DXGKMDT_OPM_CONNECTED_HDCP_DEVICE_INFORMATION structure.

Connector reconfigurations
If the end-user causes the configuration of the physical connector to change, the display miniport driver should set the DXGKMDT_OPM_STATUS_RENEGOTIATION_REQUIRED status flag in the ulStatusFlags member of the DXGKMDT_OPM_STANDARD_INFORMATION, DXGKMDT_OPM_ACTUAL_OUTPUT_FORMAT, DXGKMDT_OPM_ACP_AND_CGMSA_SIGNALING, or DXGKMDT_OPM_CONNECTED_HDCP_DEVICE_INFORMATION structure.

Tampering
If tampering with the graphics adapter or the adapter's display miniport driver has occurred, the display miniport driver should set the DXGKMDT_OPM_STATUS_TAMPERING_DETECTED status flag in the ulStatusFlags member of the DXGKMDT_OPM_STANDARD_INFORMATION, DXGKMDT_OPM_ACTUAL_OUTPUT_FORMAT, DXGKMDT_OPM_ACP_AND_CGMSA_SIGNALING, or DXGKMDT_OPM_CONNECTED_HDCP_DEVICE_INFORMATION structure.

Revoked HDCP device
If a revoked High-bandwidth Digital Content Protection (HDCP) device is directly or indirectly attached to a connector and if HDCP is enabled, the display miniport driver should set the DXGKMDT_OPM_STATUS_REVOKED_HDCP_DEVICE_ATTACHED status flag in the ulStatusFlags member of the DXGKMDT_OPM_STANDARD_INFORMATION or DXGKMDT_OPM_ACTUAL_OUTPUT_FORMAT structure. If HDCP is not enabled, the driver is not required to set this status flag. The driver sets this status value only from a call to its DxgkDdiOPMGetInformation function to determine if HDCP is enabled.

The display miniport driver returns a pointer to a DXGKMDT_OPM_STANDARD_INFORMATION, DXGKMDT_OPM_ACTUAL_OUTPUT_FORMAT, DXGKMDT_OPM_ACP_AND_CGMSA_SIGNALING, or DXGKMDT_OPM_CONNECTED_HDCP_DEVICE_INFORMATION structure in the abRequestedInformation member of the DXGKMDT_OPM_REQUESTED_INFORMATION structure. A pointer to DXGKMDT_OPM_REQUESTED_INFORMATION is returned through the RequestedInformation parameter of DxgkDdiOPMGetInformation or DxgkDdiOPMGetCOPPCompatibleInformation.

For example, consider two media playback applications, A and B. Each application controls, via OPM, the HDCP protection level of the connector that attaches the computer to the display monitor. Each application controls its own unique protected output. If the connector becomes unplugged, the next time either application initiates a DxgkDdiOPMGetInformation or DxgkDdiOPMGetCOPPCompatibleInformation request to its protected output, the display miniport driver should return the DXGKMDT_OPM_STATUS_LINK_LOST status flag.

Assume application A is the first to initiate a call to DxgkDdiOPMGetInformation or DxgkDdiOPMGetCOPPCompatibleInformation on its protected output. Application A then receives the DXGKMDT_OPM_STATUS_LINK_LOST flag and acts accordingly. If application A initiates a subsequent DxgkDdiOPMGetInformation or DxgkDdiOPMGetCOPPCompatibleInformation call, it should not receive the DXGKMDT_OPM_STATUS_LINK_LOST flag, unless the connector becomes unplugged again. When application B initiates a call to DxgkDdiOPMGetInformation or DxgkDdiOPMGetCOPPCompatibleInformation on its protected output, it receives the DXGKMDT_OPM_STATUS_LINK_LOST flag and acts accordingly. Again, application B should not receive the DXGKMDT_OPM_STATUS_LINK_LOST flag again until the connector becomes unplugged again.