Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Specifica i dati di inizializzazione per un oggetto Encrypted Media Extension.
Tipo di dati
VT_BLOB
GUID proprietà
MF_ENCRYPTEDMEDIAEXTENSIONS_INITIALIZATION_DATA
Il valore della proprietà
BLOB binario contenente i dati di inizializzazione per l'oggetto Encrypted Media Extension.
Osservazioni:
Questa proprietà consente alle app di creare un'istanza e inizializzare un oggetto EME (Encrypted Media Extension) in un processo esterno. In questo scenario un'app chiama il metodo IMFPMPHost::CreateObjectByCLSID, specificando MF_ENCRYPTEDMEDIAEXTENSIONS_ACTIVATE, che è il CLSID di un oggetto proxy che implementa IMFActivate. Un'app può impostare la proprietà MF_ENCRYPTEDMEDIAEXTENSIONS_INITIALIZATION_DATA negli attributi di creazione per MF_ENCRYPTEDMEDIAEXTENSIONS_ACTIVATE proxy per fornire un metodo di inizializzazione aggiuntivo. Le chiamate a ActivateObject nell'oggetto proxy specificano LID di un'interfaccia implementata dall'estensione dei supporti crittografati, ad esempio IMFTrustedInput.
Esempi
L'esempio seguente illustra una funzione helper che può essere usata da un'app per creare un'istanza e inizializzare un oggetto EME (Encrypted Media Extension) in un processo esterno. Questa funzione può essere usata come parte di un'implementazione più ampia del metodo IMFPMPHostApp::ActivateClassById . La funzione helper usa IMFPMPHost::CreateObjectByCLSID per creare un'istanza dell'oggetto EME.
#include <wil/com.h>
#include <mfidl.h>
#include <mfapi.h>
#include <mfcontentdecryptionmodule.h>
HRESULT ActivateEncryptedMediaExtensionInExternalProcess(
_In_ IMFPMPHost* pmp_host,
_In_ PCWSTR activatableClassId, // The "id" parameter in IMFPMPHostApp::ActivateClassById
_In_reads_opt_(initializationDataSize) const BYTE* initializationData,
size_t initializationDataSize,
REFIID riid,
_Outptr_ void** activated_class)
{
wil::com_ptr_nothrow<IMFAttributes> creation_attributes;
RETURN_IF_FAILED(MFCreateAttributes(&creation_attributes, 2));
// Specify the Activatable Class ID of the runtime class that implements the Encrypted Media Extension.
RETURN_IF_FAILED(creation_attributes->SetString(MF_ENCRYPTEDMEDIAEXTENSIONS_ACTIVATABLE_CLASS_ID,
activatableClassId));
// If initialization data is available, it is also stored in the IMFAttributes property store.
// When implementing IMFPMPHostApp::ActivateClassById, the initialization data is read from the
// "pStream" parameter of that method.
if (initializationData != nullptr)
{
RETURN_IF_FAILED(creation_attributes->SetBlob(MF_ENCRYPTEDMEDIAEXTENSIONS_INITIALIZATION_DATA,
initializationData, initializationDataSize));
}
// Serialize the contents of the IMFAttributes property store into an IStream.
wil::com_ptr_nothrow<IStream> output_stream;
RETURN_IF_FAILED(CreateStreamOnHGlobal(nullptr, TRUE, &output_stream));
RETURN_IF_FAILED(MFSerializeAttributesToStream(creation_attributes.get(), 0, output_stream.get()));
RETURN_IF_FAILED(output_stream->Seek({}, STREAM_SEEK_SET, nullptr));
// Create an activator for the Encrypted Media Extension.
wil::com_ptr_nothrow<IMFActivate> activator;
RETURN_IF_FAILED(pmp_host->CreateObjectByCLSID(
MF_ENCRYPTEDMEDIAEXTENSIONS_ACTIVATE,
output_stream.get(),
IID_PPV_ARGS(&activator)));
// Activate the Encrypted Media Extension.
// The riid parameter is for any IID of an interface implemented by the
// Encrypted Media Extension, such as IMFTrustedInput.
RETURN_IF_FAILED(activator->ActivateObject(riid, activated_class));
return S_OK;
}
Requisiti
| Requisito | Value |
|---|---|
| Client minimo supportato |
Aggiornamento di Windows 10 di aprile 2020 |
| Intestazione |
|