Retrieving COPP-Compatible Information on Protected Output
The display miniport driver can receive requests to retrieve COPP-compatible information about the protected output that is associated with a graphics adapter's physical output connector. The display miniport driver's DxgkDdiOPMGetCOPPCompatibleInformation function is passed a pointer to a DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS structure in the Parameters parameter that contains the information request. DxgkDdiOPMGetCOPPCompatibleInformation writes the required information to the DXGKMDT_OPM_REQUESTED_INFORMATION structure that the RequestedInformation parameter points to. The guidInformation and abParameters members of DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS specify the information request. Depending on the information request, the display miniport driver should populate the members 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 with the required information and point the abRequestedInformation member of DXGKMDT_OPM_REQUESTED_INFORMATION to that structure. After the driver specifies the cbRequestedInformationSize (for example, sizeof (DXGKMDT_OPM_STANDARD_INFORMATION)) and abRequestedInformation members of DXGKMDT_OPM_REQUESTED_INFORMATION, the driver must calculate the One-key Cipher Block Chaining (CBC)-mode message authentication code (OMAC) for the data in DXGKMDT_OPM_REQUESTED_INFORMATION and must set this OMAC in the omac member of DXGKMDT_OPM_REQUESTED_INFORMATION. For more information about calculating OMAC, see the OMAC-1 algorithm.
Note Before DxgkDdiOPMGetCOPPCompatibleInformation returns, the display miniport driver must verify that the sequence number that is specified in the ulSequenceNumber member of DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS matches the sequence number that the driver currently has stored. The driver must then increment the stored sequence number.
Note The driver must return a 128-bit cryptographically secure random number in the rnRandomNumber member of DXGKMDT_OPM_STANDARD_INFORMATION, DXGKMDT_OPM_ACTUAL_OUTPUT_FORMAT, DXGKMDT_OPM_ACP_AND_CGMSA_SIGNALING, or DXGKMDT_OPM_CONNECTED_HDCP_DEVICE_INFORMATION. The random number was generated by the sending application and was provided in the rnRandomNumber member of DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS.
The driver returns the following information for the indicated request:
For DXGKMDT_OPM_GET_SUPPORTED_PROTECTION_TYPES set in the guidInformation member and undefined in the abParameters member of DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS, the driver indicates the available types of protection mechanisms. To indicate the available protection types, the driver returns a valid bitwise OR combination of values from the DXGKMDT_OPM_PROTECTION_TYPE enumeration in the ulInformation member of DXGKMDT_OPM_STANDARD_INFORMATION. The DXGKMDT_OPM_PROTECTION_TYPE_ACP, DXGKMDT_OPM_PROTECTION_TYPE_CGMSA, and DXGKMDT_OPM_PROTECTION_TYPE_COPP_COMPATIBLE_HDCP values are valid.
For DXGKMDT_OPM_GET_CONNECTOR_TYPE set in guidInformation and undefined in abParameters, the driver indicates the connector type. To indicate the connector type, the driver returns a valid bitwise OR combination of values from the D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY enumeration in the ulInformation member of DXGKMDT_OPM_STANDARD_INFORMATION.
For DXGKMDT_OPM_GET_VIRTUAL_PROTECTION_LEVEL or DXGKMDT_OPM_GET_ACTUAL_PROTECTION_LEVEL set in guidInformation and the protection type set in abParameters, the driver returns a protection-level value in the ulInformation member of DXGKMDT_OPM_STANDARD_INFORMATION. If the protection type is DXGKMDT_OPM_PROTECTION_TYPE_ACP, the protection-level value is from the DXGKMDT_OPM_ACP_PROTECTION_LEVEL enumeration. If the protection type is DXGKMDT_OPM_PROTECTION_TYPE_CGMSA, the protection-level value is from the DXGKMDT_OPM_CGMSA enumeration. If the protection type is DXGKMDT_OPM_PROTECTION_TYPE_COPP_COMPATIBLE_HDCP, the protection-level value is from the DXGKMDT_OPM_HDCP_PROTECTION_LEVEL enumeration.
The DXGKMDT_OPM_GET_VIRTUAL_PROTECTION_LEVEL request returns the currently set protection level for the protected output. The DXGKMDT_OPM_GET_ACTUAL_PROTECTION_LEVEL request returns the currently set protection level for the physical connector that is associated with the protected output.
For DXGKMDT_OPM_GET_ADAPTER_BUS_TYPE set in guidInformation and undefined in abParameters, the driver identifies the type of the bus that connects a graphics adapter to a mother board chipset's north bridge. To identify the type of the bus, the driver returns a valid bitwise OR combination of values from the DXGKMDT_OPM_BUS_TYPE_AND_IMPLEMENTATION enumeration in the ulInformation member of DXGKMDT_OPM_STANDARD_INFORMATION.
The driver can only combine the DXGKMDT_OPM_COPP_COMPATIBLE_BUS_TYPE_INTEGRATED (0x80000000) value with one of the bus-type values when none of the interface signals between the graphics adapter and other subsystems are available on an expansion bus that uses a publicly available specification and standard connector type. Memory buses are excluded from this definition.
For DXGKMDT_OPM_GET_ACTUAL_OUTPUT_FORMAT set in guidInformation and undefined in abParameters, the driver returns information in the members of DXGKMDT_OPM_ACTUAL_OUTPUT_FORMAT that describe how the signal that goes through the physical connector that is associated with the protected output is formatted.
For DXGKMDT_OPM_GET_ACP_AND_CGMSA_SIGNALING set in guidInformation and undefined in abParameters, the driver returns information in the members of DXGKMDT_OPM_ACP_AND_CGMSA_SIGNALING that describe how the signal that goes through the physical connector that is associated with the protected output is protected.
For DXGKMDT_OPM_GET_CONNECTED_HDCP_DEVICE_INFORMATION set in guidInformation and undefined in abParameters, the driver returns information in the members of DXGKMDT_OPM_CONNECTED_HDCP_DEVICE_INFORMATION that contain High-bandwidth Digital Content Protection (HDCP) information.