IOPMVideoOutput::StartInitialization method (opmapi.h)

Begins the initialization sequence for an Output Protection Manager (OPM) session.


HRESULT StartInitialization(
  [out] OPM_RANDOM_NUMBER *prnRandomNumber,
  [out] BYTE              **ppbCertificate,
  [out] ULONG             *pulCertificateLength


[out] prnRandomNumber

Pointer to an OPM_RANDOM_NUMBER structure. The structure receives a 128-bit random number generated by the display driver. This number is required for the IOPMVideoOutput::FinishInitialization method.

[out] ppbCertificate

Receives a pointer to a buffer containing the display driver's certificate. The method allocates the memory for the buffer. The caller must release the memory by calling CoTaskMemFree.

[out] pulCertificateLength

Receives the length of the buffer pointed to by ppbCertificate.

Return value

If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.


This method is equivalent to the IAMCertifiedOutputProtection::KeyExchange method in Certified Output Protection Protocol (COPP).

The method returns a certificate chain that contains the driver's 2048-bit RSA public key. The caller must validate the certificate chain and then call IOPMVideoOutput::FinishInitialization to establish the OPM session.

This method supports both OPM semantics and COPP semantics. COPP semantics are supported for backward compatibility; new applications should use OPM semantics.

OPM Semantics

The method returns an X.509 certificate chain. The certificate chain is encoded with ASN.1 Distinguished Encoding Rules (DER).

COPP Semantics

The method returns a COPP certificate chain. The certificate chain is returned as a UTF-8 string. You can treat the buffer returned in ppbCertificate as an array of chars.


Minimum supported client Windows Vista [desktop apps only]
Minimum supported server Windows Server 2008 [desktop apps only]
Target Platform Windows
Header opmapi.h

See also


Output Protection Manager