DxgkDdiOPMGetInformation routine

The DxgkDdiOPMGetInformation function retrieves information from the given protected output object.

Syntax


DXGKDDI_OPM_GET_INFORMATION DxgkDdiOPMGetInformation;

NTSTATUS DxgkDdiOPMGetInformation(
  _In_   PVOID MiniportDeviceContext,
  _In_   HANDLE ProtectedOutputHandle,
  _In_   const PDXGKMDT_OPM_GET_INFO_PARAMETERS Parameters,
  _Out_  PDXGKMDT_OPM_REQUESTED_INFORMATION RequestedInformation
)
{ ... }

Parameters

MiniportDeviceContext [in]

A handle to a context block associated with a display adapter. Previously, the display miniport driver's DxgkDdiAddDevice function provided this handle to the DirectX graphics kernel subsystem.

ProtectedOutputHandle [in]

The handle to a protected output object. The DxgkDdiOPMCreateProtectedOutput function creates the protected output object and returns the handle to the object. The protected output object that corresponds to this handle should have OPM semantics.

Parameters [in]

A pointer to a DXGKMDT_OPM_GET_INFO_PARAMETERS structure that contains parameters that are used to retrieve information from a protected output object whose handle is specified in the ProtectedOutputHandle parameter. DxgkDdiOPMGetInformation determines if the parameters contain a valid request from the application that indirectly created the protected output object. For more information, see the Remarks section.

RequestedInformation [out]

A pointer to a DXGKMDT_OPM_REQUESTED_INFORMATION structure that receives the protected output object's information if DxgkDdiOPMGetInformation returns successfully.

If DxgkDdiOPMGetInformation fails, the value that RequestedInformation points to is unchanged.

Return value

DxgkDdiOPMGetInformation returns one of the following values:

STATUS_SUCCESS

The function successfully retrieved the protected output object's information.

STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS

The protected output object whose handle is specified in the ProtectedOutputHandle parameter does not have OPM semantics. The DirectX graphics kernel subsystem should call the DxgkDdiOPMGetCOPPCompatibleInformation function instead of DxgkDdiOPMGetInformation for protected output objects with COPP semantics.

STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS

COPP-specific information was requested. DxgkDdiOPMGetInformation cannot return COPP-specific information because it can return only OPM-specific information. Callers that require COPP-specific information should create a protected output with COPP semantics and then call DxgkDdiOPMGetCOPPCompatibleInformation. Following are the types of requests (that are specified in the guidInformation member of the DXGKMDT_OPM_GET_INFO_PARAMETERS structure that the Parameters parameter points to) that cause DxgkDdiOPMGetInformation to return this value:

DXGKMDT_OPM_GET_CONNECTED_HDCP_DEVICE_INFORMATION

This request is used by COPP applications when they enable High-bandwidth Digital Content Protection (HDCP). For more information about HDCP, see the HDCP Specification Revision 1.1.

DXGKMDT_OPM_GET_VIRTUAL_PROTECTION_LEVEL or DXGKMDT_OPM_GET_ACTUAL_PROTECTION_LEVEL and the first 4 bytes of the abParameters member of DXGKMDT_OPM_GET_INFO_PARAMETERS contain DXGKMDT_OPM_PROTECTION_TYPE_COPP_COMPATIBLE_HDCP

DXGKMDT_OPM_PROTECTION_TYPE_COPP_COMPATIBLE_HDCP is used to determine an output's virtual or actual COPP-compatible HDCP protection level. OPM applications should use DXGKMDT_OPM_PROTECTION_TYPE_HDCP instead of DXGKMDT_OPM_PROTECTION_TYPE_COPP_COMPATIBLE_HDCP.

DXGKMDT_OPM_GET_ACP_AND_CGMSA_SIGNALING

OPM does not support this information request.

STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP

The graphics adapter does not support HDCP.

Following are the types of requests (that are specified in the guidInformation member of DXGKMDT_OPM_GET_INFO_PARAMETERS) that cause DxgkDdiOPMGetInformation to return this value:

DXGKMDT_OPM_GET_CURRENT_HDCP_SRM_VERSION
DXGKMDT_OPM_GET_VIRTUAL_PROTECTION_LEVEL or DXGKMDT_OPM_GET_ACTUAL_PROTECTION_LEVEL and the first 4 bytes of the abParameters member of DXGKMDT_OPM_GET_INFO_PARAMETERS contain DXGKMDT_OPM_PROTECTION_TYPE_HDCP.
STATUS_GRAPHICS_OPM_MONITOR_DOES_NOT_SUPPORT_HDCP

The graphics adapter supports HDCP, but the monitor that is connected to the protected output's physical video output does not support HDCP.

Following are the types of requests (that are specified in the guidInformation member of DXGKMDT_OPM_GET_INFO_PARAMETERS) that cause DxgkDdiOPMGetInformation to return this value:

DXGKMDT_OPM_GET_CURRENT_HDCP_SRM_VERSION

Requests the version number of the current High-bandwidth Digital Content Protection (HDCP) System Renewability Message (SRM) for the protected output.

DXGKMDT_OPM_GET_VIRTUAL_PROTECTION_LEVEL or DXGKMDT_OPM_GET_ACTUAL_PROTECTION_LEVEL and the first 4 bytes of the abParameters member of DXGKMDT_OPM_GET_INFO_PARAMETERS contain DXGKMDT_OPM_PROTECTION_TYPE_HDCP.

Requests the virtual or actual HDCP protection level.

STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP

The protected output object whose handle is specified in the ProtectedOutputHandle parameter does not support Analog Copy Protection (ACP), the guidInformation member of DXGKMDT_OPM_GET_INFO_PARAMETERS specifies DXGKMDT_OPM_GET_VIRTUAL_PROTECTION_LEVEL or DXGKMDT_OPM_GET_ACTUAL_PROTECTION_LEVEL, and the first 4 bytes of the abParameters member of DXGKMDT_OPM_GET_INFO_PARAMETERS contain DXGKMDT_OPM_PROTECTION_TYPE_ACP. ACP protects analog TV signals. For more information about ACP, see the Macrovision website.

STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA

The protected output object whose handle is specified in the ProtectedOutputHandle parameter does not support Content Generation Management System Analog (CGMS-A) and redistributable control, the guidInformation member of DXGKMDT_OPM_GET_INFO_PARAMETERS specifies DXGKMDT_OPM_GET_VIRTUAL_PROTECTION_LEVEL or DXGKMDT_OPM_GET_ACTUAL_PROTECTION_LEVEL, and the first 4 bytes of the abParameters member of DXGKMDT_OPM_GET_INFO_PARAMETERS contain DXGKMDT_OPM_PROTECTION_TYPE_CGMSA. CGMS-A protects analog TV signals. For more information about CGMS-A, see the CGMS-A article.

STATUS_GRAPHICS_OPM_HDCP_SRM_NEVER_SET

The graphics adapter supports HDCP, the guidInformation member of DXGKMDT_OPM_GET_INFO_PARAMETERS specifies DXGKMDT_OPM_GET_CURRENT_HDCP_SRM_VERSION, and the protected output's user never provided a System Renewability Message (SRM) to the protected output. For more information about the SRM, see the HDCP Specification Revision 1.1.

STATUS_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST

The ulSequenceNumber or omac member of DXGKMDT_OPM_GET_INFO_PARAMETERS contain an invalid sequence number or signature respectively.

This function might also return other error codes that are defined in Ntstatus.h.

Remarks

The DirectX graphics kernel subsystem should call DxgkDdiOPMGetInformation only if the output has OPM semantics.

Before the DirectX graphics kernel subsystem passes the protected output handle to the ProtectedOutputHandle parameter in a call to DxgkDdiOPMGetInformation, the DirectX graphics kernel subsystem always passes the protected output handle to the DxgkDdiOPMSetSigningKeyAndSequenceNumbers and DxgkDdiOPMGetRandomNumber functions.

DxgkDdiOPMGetInformation retrieves one of the following types of information:

  • The protected output's connector type.

  • The content protection types that the protected output supports. Protected outputs can currently support ACP, CGMS-A, and HDCP.

  • The protected output's current virtual protection level for a particular protection type.

  • The physical output's actual protection level for a particular protection type.

  • The version of the HDCP SRM that the protected output currently uses.

  • The type of expansion bus that the graphics adapter uses and how the graphics adapter is connected to the computer's north bridge.

  • The format of the images that the graphics adapter sends from the physical output to the monitor.

The guidInformation member of the DXGKMDT_OPM_GET_INFO_PARAMETERS structure that the Parameters parameter points to should never contain the DXGKMDT_OPM_GET_CONNECTED_HDCP_DEVICE_INFORMATION and DXGKMDT_OPM_GET_ACP_AND_CGMSA_SIGNALING GUIDs because only COPP applications should specify these GUIDs.

The first 4 bytes of the abParameters member of DXGKMDT_OPM_GET_INFO_PARAMETERS should never contain the DXGKMDT_OPM_PROTECTION_TYPE_COPP_COMPATIBLE_HDCP protection type when the DXGKMDT_OPM_GET_VIRTUAL_PROTECTION_LEVEL or DXGKMDT_OPM_GET_ACTUAL_PROTECTION_LEVEL GUID is specified in the guidInformation member of DXGKMDT_OPM_GET_INFO_PARAMETERS because only COPP applications use this protection type.

The driver must perform the following sequence when its DxgkDdiOPMGetInformation function is called.

  1. Verify that the protected output handle that was passed to the ProtectedOutputHandle parameter of DxgkDdiOPMGetInformation has OPM semantics.

  2. Verify that the information in the Parameters parameter was signed with the protected output object's signing key. The protected output object's signing key was previously set when the DxgkDdiOPMSetSigningKeyAndSequenceNumbers function was called. The Advanced Encryption Standard (AES) block cipher and the OMAC-1 signing algorithm should be used to verify the signature. For information about AES, see the RSA Laboratories website. For information about OMAC-1, see the DXGKMDT_OPM_OMAC reference page.

  3. Retrieve the requested information.

  4. Copy the random number that the rnRandomNumber member of DXGKMDT_OPM_GET_INFO_PARAMETERS specifies to the rnRandomNumber member in the DXGKMDT_OPM_STANDARD_INFORMATION or DXGKMDT_OPM_ACTUAL_OUTPUT_FORMAT structure. The structure that is used depends on the type of information that the caller requested and is set in the abRequestedInformation member of the DXGKMDT_OPM_REQUESTED_INFORMATION structure that the RequestedInformation parameter points to.

  5. Sign the DXGKMDT_OPM_REQUESTED_INFORMATION structure and place the signature in the omac member of DXGKMDT_OPM_REQUESTED_INFORMATION. The AES block cipher and the OMAC-1 signing algorithm should be used to sign the structure.

Initially, the DirectX graphics kernel subsystem calls DxgkDdiOPMGetInformation to retrieve information about the output and then calls DxgkDdiOPMConfigureProtectedOutput one or more times to configure the output. Subsequently, the DirectX graphics kernel subsystem calls DxgkDdiOPMGetInformation without also calling DxgkDdiOPMConfigureProtectedOutput.

DxgkDdiOPMGetInformation should be made pageable.

Requirements

Header

Dispmprt.h (include Dispmprt.h)

IRQL

PASSIVE_LEVEL (see Remarks section)

See also

DxgkDdiAddDevice
DxgkDdiOPMConfigureProtectedOutput
DxgkDdiOPMCreateProtectedOutput
DxgkDdiOPMGetRandomNumber
DxgkDdiOPMSetSigningKeyAndSequenceNumbers
DXGKMDT_OPM_GET_INFO_PARAMETERS
DXGKMDT_OPM_OMAC
DXGKMDT_OPM_REQUESTED_INFORMATION

 

 

Send comments about this topic to Microsoft

Show:
© 2014 Microsoft