DXGKDDI_OPM_GET_COPP_COMPATIBLE_INFORMATION callback function

The DxgkDdiOPMGetCOPPCompatibleInformation function retrieves information that is compatible with the Certified Output Protection Protocol (COPP) from the given protected output object.

Syntax

DXGKDDI_OPM_GET_COPP_COMPATIBLE_INFORMATION DxgkddiOpmGetCoppCompatibleInformation;

NTSTATUS DxgkddiOpmGetCoppCompatibleInformation(
  PVOID MiniportDeviceContext,
  HANDLE ProtectedOutputHandle,
  const Arg3,
  PDXGKMDT_OPM_REQUESTED_INFORMATION RequestedInformation
)
{...}

Parameters

MiniportDeviceContext

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

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 COPP semantics.

Arg3

RequestedInformation

A pointer to a DXGKMDT_OPM_REQUESTED_INFORMATION structure that receives the protected output object's COPP-compatible information if DxgkDdiOPMGetCOPPCompatibleInformation returns successfully.

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

Return Value

DxgkDdiOPMGetCOPPCompatibleInformation returns one of the following values.

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

Remarks

The DirectX graphics kernel subsystem should call DxgkDdiOPMGetCOPPCompatibleInformation only if the output has COPP semantics.

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

Following are some facts that pertain to DxgkDdiOPMGetCOPPCompatibleInformation and that do not pertain to the DxgkDdiOPMGetInformation function:

  • The DirectX graphics kernel subsystem can pass a handle to a protected output only with COPP semantics.
  • The DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS structure that the Parameters parameter points to is not signed.
  • The DirectX graphics kernel subsystem can pass the DXGKMDT_OPM_GET_ACP_AND_CGMSA_SIGNALING and DXGKMDT_OPM_GET_CONNECTED_HDCP_DEVICE_INFORMATION GUIDs in the guidInformation member of DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS.
  • The DirectX graphics kernel subsystem cannot pass the DXGKMDT_OPM_GET_CURRENT_HDCP_SRM_VERSION GUID in the guidInformation member of DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS.
  • The DirectX graphics kernel subsystem can specify DXGKMDT_OPM_PROTECTION_TYPE_COPP_COMPATIBLE_HDCP in the first 4 bytes of the abParameters member of DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS along with the DXGKMDT_OPM_GET_VIRTUAL_PROTECTION_LEVEL or DXGKMDT_OPM_GET_ACTUAL_PROTECTION_LEVEL GUID in the guidInformation member of DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS.
  • The DirectX graphics kernel subsystem cannot specify DXGKMDT_OPM_PROTECTION_TYPE_HDCP in the first 4 bytes of the abParameters member of DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS along with the DXGKMDT_OPM_GET_VIRTUAL_PROTECTION_LEVEL or DXGKMDT_OPM_GET_ACTUAL_PROTECTION_LEVEL GUID in the guidInformation member of DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS.
The driver must perform the following sequence when its DxgkDdiOPMGetCOPPCompatibleInformation function is called.
  1. Verify that the protected output handle that was passed to the ProtectedOutputHandle parameter of DxgkDdiOPMGetCOPPCompatibleInformation has COPP semantics.
  2. Retrieve the requested information.
  3. Copy the random number that the rnRandomNumber member of DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS specifies to the rnRandomNumber 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. The structure that is used depends on the type of information that the caller requested. The structure is set in the abRequestedInformation member of the DXGKMDT_OPM_REQUESTED_INFORMATION structure that the RequestedInformation parameter points to.
  4. 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. For information about AES, see the RSA Laboratories website. For information about OMAC-1, see the DXGKMDT_OPM_OMAC reference page.
Initially, the DirectX graphics kernel subsystem calls DxgkDdiOPMGetCOPPCompatibleInformation 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 DxgkDdiOPMGetCOPPCompatibleInformation without also calling DxgkDdiOPMConfigureProtectedOutput.

DxgkDdiOPMGetCOPPCompatibleInformation should be made pageable.

Requirements

   
Target Platform Desktop
Header dispmprt.h (include Dispmprt.h)
IRQL PASSIVE_LEVEL (see Remarks section)

See Also

DxgkDdiOPMCreateProtectedOutput

DxgkDdiOPMConfigureProtectedOutput

DxgkDdiAddDevice

DxgkDdiOPMGetRandomNumber

DXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS

DXGKMDT_OPM_REQUESTED_INFORMATION

DXGKMDT_OPM_OMAC

DxgkDdiOPMSetSigningKeyAndSequenceNumbers