Retrieving Information About a Protected Output
The display miniport driver can receive requests to retrieve information about the protected output that is associated with a graphics adapter's physical output connector. The display miniport driver's DxgkDdiOPMGetInformation function is passed a pointer to a DXGKMDT_OPM_GET_INFO_PARAMETERS structure in the Parameters parameter that contains the information request. DxgkDdiOPMGetInformation 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_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_OUTPUT_ID, or DXGKMDT_OPM_ACTUAL_OUTPUT_FORMAT 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 DxgkDdiOPMGetInformation returns, the display miniport driver must verify that the OMAC that is specified in the omac member of DXGKMDT_OPM_GET_INFO_PARAMETERS is correct. The driver must also verify that the sequence number that is specified in the ulSequenceNumber member of DXGKMDT_OPM_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_OUTPUT_ID, or DXGKMDT_OPM_ACTUAL_OUTPUT_FORMAT. The random number was generated by the sending application and was provided in the rnRandomNumber member of DXGKMDT_OPM_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 the DXGKMDT_OPM_GET_INFO_PARAMETERS structure, 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_HDCP and DXGKMDT_OPM_PROTECTION_TYPE_DPCP 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_HDCP, the protection-level value is from the DXGKMDT_OPM_HDCP_PROTECTION_LEVEL enumeration. If the protection type is DXGKMDT_OPM_PROTECTION_TYPE_DPCP, the protection-level value is from the DXGKMDT_OPM_DPCP_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 and implementation of the bus that connects a graphics adapter to a mother board chipset's north bridge. To identify the type and implementation 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.
For DXGKMDT_OPM_GET_CURRENT_HDCP_SRM_VERSION set in guidInformation and undefined in abParameters, the driver returns a value in the ulInformation member of DXGKMDT_OPM_STANDARD_INFORMATION that identifies the version number of the current High-bandwidth Digital Content Protection (HDCP) System Renewability Message (SRM) for the protected output. The least significant bits (bits 0 through 15) contain the SRM's version number in little-endian format. For more information about the SRM version number, see the HDCP Specification Revision 1.1.
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_OUTPUT_ID set in guidInformation and undefined in abParameters, the driver returns information in the members of DXGKMDT_OPM_OUTPUT_ID that identifies the output connector.
For DXGKMDT_OPM_GET_DVI_CHARACTERISTICS set in the guidInformation member and undefined in the abParameters member of the DXGKMDT_OPM_GET_INFO_PARAMETERS structure, the driver indicates electrical characteristics of a Digital Video Interface (DVI) output connector. To indicate the DVI electrical characteristics, the driver returns one of the values from the DXGKDT_OPM_DVI_CHARACTERISTICS enumeration in the ulInformation member of DXGKMDT_OPM_STANDARD_INFORMATION.