#pragma once #ifndef __MSDRM_H_ #define __MSDRM_H_ //----------------------------------------------------------------------------- // // // File: msdrm.h // // Copyright (C) 2001-2004 Microsoft Corporation. All Rights Reserved. // //----------------------------------------------------------------------------- #include "msdrmdefs.h" // environment & handle control DRMEXPORT HRESULT UDAPICALL DRMSetGlobalOptions( IN DRMGLOBALOPTIONS eGlobalOptions, IN LPVOID pvdata, IN DWORD dwlen); DRMEXPORT HRESULT UDAPICALL DRMGetClientVersion( OUT DRM_CLIENT_VERSION_INFO *pDRMClientVersionInfo); DRMEXPORT HRESULT UDAPICALL DRMInitEnvironment ( IN DRMSECURITYPROVIDERTYPE eSecurityProviderType, IN DRMSPECTYPE eSpecification, __in_opt PWSTR wszSecurityProvider, __in_opt PWSTR wszManifestCredentials, __in PWSTR wszMachineCredentials, OUT DRMENVHANDLE* phEnv, OUT DRMHANDLE* phDefaultLibrary); DRMEXPORT HRESULT UDAPICALL DRMLoadLibrary ( IN DRMENVHANDLE hEnv, IN DRMSPECTYPE eSpecification, __in PWSTR wszLibraryProvider, __in_opt PWSTR wszCredentials, OUT DRMHANDLE* phLibrary); DRMEXPORT HRESULT UDAPICALL DRMCreateEnablingPrincipal ( IN DRMENVHANDLE hEnv, IN DRMHANDLE hLibrary, __in PWSTR wszObject, IN DRMID* pidPrincipal, __in PWSTR wszCredentials, OUT DRMHANDLE* phEnablingPrincipal); DRMEXPORT HRESULT UDAPICALL DRMCloseHandle( IN DRMHANDLE handle); DRMEXPORT HRESULT UDAPICALL DRMCloseEnvironmentHandle( IN DRMENVHANDLE hEnv); DRMEXPORT HRESULT UDAPICALL DRMDuplicateHandle( IN DRMHANDLE hToCopy, OUT DRMHANDLE* phCopy); DRMEXPORT HRESULT UDAPICALL DRMDuplicateEnvironmentHandle( IN DRMENVHANDLE hToCopy, OUT DRMENVHANDLE* phCopy); DRMEXPORT HRESULT UDAPICALL DRMRegisterRevocationList ( IN DRMENVHANDLE hEnv, __in_opt PWSTR wszRevocationList); DRMEXPORT HRESULT UDAPICALL DRMCheckSecurity( IN DRMENVHANDLE hEnv, IN UINT cLevel); DRMEXPORT HRESULT UDAPICALL DRMRegisterContent( IN BOOL fRegister); // cryptographic functions DRMEXPORT HRESULT UDAPICALL DRMEncrypt ( IN DRMHANDLE hCryptoProvider, IN UINT iPosition, IN UINT cNumInBytes, IN BYTE* pbInData, IN OUT UINT* pcNumOutBytes, OUT BYTE* pbOutData); DRMEXPORT HRESULT UDAPICALL DRMDecrypt ( IN DRMHANDLE hCryptoProvider, IN UINT iPosition, IN UINT cNumInBytes, IN BYTE* pbInData, IN OUT UINT* pcNumOutBytes, OUT BYTE* pbOutData); // license binding and enabling bits DRMEXPORT HRESULT UDAPICALL DRMCreateBoundLicense ( IN DRMENVHANDLE hEnv, IN DRMBOUNDLICENSEPARAMS* pParams, __in PWSTR wszLicenseChain, OUT DRMHANDLE* phBoundLicense, OUT DRMHANDLE* phErrorLog); DRMEXPORT HRESULT UDAPICALL DRMCreateEnablingBitsDecryptor ( IN DRMHANDLE hBoundLicense, __in_opt PWSTR wszRight, IN DRMHANDLE hAuxLib, __in_opt PWSTR wszAuxPlug, OUT DRMHANDLE* phDecryptor); DRMEXPORT HRESULT UDAPICALL DRMCreateEnablingBitsEncryptor ( IN DRMHANDLE hBoundLicense, __in_opt PWSTR wszRight, IN DRMHANDLE hAuxLib, __in_opt PWSTR wszAuxPlug, OUT DRMHANDLE* phEncryptor); // inter-environment security attestation DRMEXPORT HRESULT UDAPICALL DRMAttest ( IN DRMHANDLE hEnablingPrincipal, __in PWSTR wszData, IN DRMATTESTTYPE eType, __inout UINT* pcAttestedBlob, __out_ecount(*pcAttestedBlob) PWSTR wszAttestedBlob); // miscellaneous calls and helper functions DRMEXPORT HRESULT UDAPICALL DRMGetTime ( IN DRMENVHANDLE hEnv, IN DRMTIMETYPE eTimerIdType, OUT SYSTEMTIME* poTimeObject); DRMEXPORT HRESULT UDAPICALL DRMGetInfo( __in DRMHANDLE handle, __in PWSTR wszAttribute, __in DRMENCODINGTYPE* peEncoding, __inout UINT* pcBuffer, OUT BYTE* pbBuffer); DRMEXPORT HRESULT UDAPICALL DRMGetEnvironmentInfo( IN DRMENVHANDLE handle, __in_opt PWSTR wszAttribute, OUT DRMENCODINGTYPE* peEncoding, IN OUT UINT* pcBuffer, OUT BYTE* pbBuffer); DRMEXPORT HRESULT UDAPICALL DRMGetProcAddress( IN DRMHANDLE hLibrary, __in PWSTR wszProcName, OUT FARPROC* ppfnProcAddress); // support for querying bound licenses DRMEXPORT HRESULT UDAPICALL DRMGetBoundLicenseObjectCount( IN DRMHANDLE hQueryRoot, __in PWSTR wszSubObjectType, OUT UINT* pcSubObjects); DRMEXPORT HRESULT UDAPICALL DRMGetBoundLicenseObject( IN DRMHANDLE hQueryRoot, __in PWSTR wszSubObjectType, IN UINT iWhich, OUT DRMHANDLE* phSubObject); DRMEXPORT HRESULT UDAPICALL DRMGetBoundLicenseAttributeCount( IN DRMHANDLE hQueryRoot, __in PWSTR wszAttribute, OUT UINT* pcAttributes); DRMEXPORT HRESULT UDAPICALL DRMGetBoundLicenseAttribute( IN DRMHANDLE hQueryRoot, __in PWSTR wszAttribute, IN UINT iWhich, OUT DRMENCODINGTYPE* peEncoding, IN OUT UINT* pcBuffer, OUT BYTE* pbBuffer); DRMEXPORT HRESULT UDAPICALL DRMCreateClientSession( IN DRMCALLBACK pfnCallback, // Callback IN UINT uCallbackVersion, // Version of the callback __in PWSTR wszGroupIDProviderType, // one of WINDOWSAUTH/PASSPORT __in_opt PWSTR wszGroupID, // Group ID OUT DRMHSESSION* phClient ); DRMEXPORT HRESULT UDAPICALL DRMIsActivated( IN DRMHSESSION hClient, // Client session IN UINT uFlags, // One of DRM_ACTIVATE_MACHINE/GROUPIDENTITY IN DRM_ACTSERV_INFO* pActServInfo);// Optional activation server info DRMEXPORT HRESULT UDAPICALL DRMActivate( IN DRMHSESSION hClient, // Client session IN UINT uFlags, // One/both: DRM_ACTIVATE_MACHINE/GROUPIDENTITY IN UINT uLangID, // Language ID IN DRM_ACTSERV_INFO* pActServInfo, // Optional activation server info IN VOID* pvContext, // Context used for callback IN HWND hParentWnd); // Parent window Handle DRMEXPORT HRESULT UDAPICALL DRMGetServiceLocation( IN DRMHSESSION hClient, // Client session IN UINT uServiceType, //One of DRM_SERVICE_TYPE IN UINT uServiceLocation, //One of DRM_SERVICE_LOCATION __in_opt PWSTR wszIssuanceLicense, //Optional IN OUT UINT* puServiceURLLength, __out_ecount_opt(*puServiceURLLength) PWSTR wszServiceURL); // LicenseStorage DRMEXPORT HRESULT UDAPICALL DRMCreateLicenseStorageSession( IN DRMENVHANDLE hEnv, // Environment Handle ( o/p of DRMInitEnvironment) IN DRMHANDLE hDefaultLibrary, // Default Library Handle (o/p of DRMInitEnvironment) IN DRMHSESSION hClient, // Client session IN UINT uFlags, // Reserved __in PWSTR wszIssuanceLicense, // IssuanceLicense OUT DRMHSESSION* phLicenseStorage); DRMEXPORT HRESULT UDAPICALL DRMAddLicense( IN DRMHSESSION hLicenseStorage, // LicenseStorage session IN UINT uFlags, // One of DRM_ADD_LICENSE_FLAGS __in PWSTR wszLicense); // License to add to the inmemory license store DRMEXPORT HRESULT UDAPICALL DRMAcquireAdvisories( IN DRMHSESSION hLicenseStorage, __in PWSTR wszLicense, __in_opt PWSTR wszURL,//Optional IN VOID* pvContext); DRMEXPORT HRESULT UDAPICALL DRMEnumerateLicense( IN DRMHSESSION hSession, // Client/License Storage session IN UINT uFlags, // One of DRM_ENUMERATE_LICENSE_FLAGS IN UINT uIndex, // Cert index IN OUT BOOL* pfSharedFlag, // Shared Flag IN OUT UINT* puCertificateDataLen, // String Length of wszCertificateData buffer __out_ecount_opt(*puCertificateDataLen) PWSTR wszCertificateData ); // CertChain DRMEXPORT HRESULT UDAPICALL DRMAcquireLicense( IN DRMHSESSION hSession, //Client/License Storage session IN UINT uFlags, //DRM_ACQUIRE_LICENSE_FLAGS __in_opt PWSTR wszGroupIdentityCredential,// Optional __in_opt PWSTR wszRequestedRights, //RESERVED, must be NULL. __in_opt PWSTR wszCustomData, //Custom data that goes with the request __in_opt PWSTR wszURL, // IN VOID* pvContext ); DRMEXPORT HRESULT UDAPICALL DRMDeleteLicense( IN DRMHSESSION hSession, //Client/License Storage session __in PWSTR wszLicenseId); DRMEXPORT HRESULT UDAPICALL DRMCloseSession( IN DRMHSESSION hSession); DRMEXPORT HRESULT UDAPICALL DRMDuplicateSession( IN DRMHSESSION hSessionIn, OUT DRMHSESSION *phSessionOut); DRMEXPORT HRESULT UDAPICALL DRMGetSecurityProvider( IN UINT uFlags, IN OUT UINT* puTypeLen, __out_ecount_opt(*puTypeLen) PWSTR wszType, IN OUT UINT* puPathLen, __out_ecount_opt(*puPathLen) PWSTR wszPath); DRMEXPORT HRESULT UDAPICALL DRMEncode( __in PWSTR wszAlgID, IN UINT uDataLen, IN BYTE* pbDecodedData, IN OUT UINT* puEncodedStringLen, __out_ecount_opt(*puEncodedStringLen) PWSTR wszEncodedString); DRMEXPORT HRESULT UDAPICALL DRMDecode( __in PWSTR wszAlgID, __in PWSTR wszEncodedString, IN OUT UINT* puDecodedDataLen, OUT BYTE* pbDecodedData); DRMEXPORT HRESULT UDAPICALL DRMConstructCertificateChain( IN UINT cCertificates, __in_ecount(cCertificates) PWSTR* rgwszCertificates, IN OUT UINT* pcChain, __out_ecount_opt(*pcChain) PWSTR wszChain); // support for unbound license querying DRMEXPORT HRESULT UDAPICALL DRMParseUnboundLicense( __in PWSTR wszCertificate, OUT DRMQUERYHANDLE* phQueryRoot); DRMEXPORT HRESULT UDAPICALL DRMCloseQueryHandle( IN DRMQUERYHANDLE hQuery); DRMEXPORT HRESULT UDAPICALL DRMGetUnboundLicenseObjectCount( IN DRMQUERYHANDLE hQueryRoot, __in PWSTR wszSubObjectType, OUT UINT* pcSubObjects); DRMEXPORT HRESULT UDAPICALL DRMGetUnboundLicenseObject( IN DRMQUERYHANDLE hQueryRoot, __in PWSTR wszSubObjectType, IN UINT iIndex, OUT DRMQUERYHANDLE* phSubQuery); DRMEXPORT HRESULT UDAPICALL DRMGetUnboundLicenseAttributeCount( IN DRMQUERYHANDLE hQueryRoot, __in PWSTR wszAttributeType, OUT UINT* pcAttributes); DRMEXPORT HRESULT UDAPICALL DRMGetUnboundLicenseAttribute( IN DRMQUERYHANDLE hQueryRoot, __in PWSTR wszAttributeType, IN UINT iWhich, OUT DRMENCODINGTYPE* peEncoding, IN OUT UINT* pcBuffer, OUT BYTE* pbBuffer); DRMEXPORT HRESULT UDAPICALL DRMGetCertificateChainCount( __in PWSTR wszChain, OUT UINT* pcCertCount); DRMEXPORT HRESULT UDAPICALL DRMDeconstructCertificateChain( __in PWSTR wszChain, IN UINT iWhich, IN OUT UINT* pcCert, __out_ecount_opt(*pcCert) PWSTR wszCert); DRMEXPORT HRESULT UDAPICALL DRMVerify ( __in_opt PWSTR wszData, UINT* pcAttestedData, __out_ecount_opt(*pcAttestedData) PWSTR wszAttestedData, DRMATTESTTYPE* peType, UINT* pcPrincipal, __out_ecount_opt(*pcPrincipal) PWSTR wszPrincipal, UINT* pcManifest, __out_ecount_opt(*pcManifest) PWSTR wszManifest); DRMEXPORT HRESULT UDAPICALL DRMCreateUser( __in_opt PWSTR wszUserName, __in_opt PWSTR wszUserId, __in_opt PWSTR wszUserIdType, OUT DRMPUBHANDLE* phUser); DRMEXPORT HRESULT UDAPICALL DRMCreateRight( __in PWSTR wszRightName, IN SYSTEMTIME* pstFrom, IN SYSTEMTIME* pstUntil, IN UINT cExtendedInfo, __in_ecount_opt(cExtendedInfo) PWSTR* pwszExtendedInfoName, __in_ecount_opt(cExtendedInfo) PWSTR* pwszExtendedInfoValue, OUT DRMPUBHANDLE *phRight); DRMEXPORT HRESULT UDAPICALL DRMCreateIssuanceLicense( IN SYSTEMTIME* pstTimeFrom, IN SYSTEMTIME* pstTimeUntil, __in_opt PWSTR wszReferralInfoName, __in_opt PWSTR wszReferralInfoURL, IN DRMPUBHANDLE hOwner,//Use created using DRMCreateUser. __in_opt PWSTR wszIssuanceLicense,//Issuance License Template or Signed Issuance License IN DRMHANDLE hBoundLicense, OUT DRMPUBHANDLE* phIssuanceLicense); DRMEXPORT HRESULT UDAPICALL DRMAddRightWithUser( IN DRMPUBHANDLE hIssuanceLicense, IN DRMPUBHANDLE hRight, IN DRMPUBHANDLE hUser); DRMEXPORT HRESULT UDAPICALL DRMClearAllRights( IN DRMPUBHANDLE hIssuanceLicense); DRMEXPORT HRESULT UDAPICALL DRMSetMetaData( IN DRMPUBHANDLE hIssuanceLicense, __in PWSTR wszContentId, __in PWSTR wszContentIdType, __in_opt PWSTR wszSKUId, __in_opt PWSTR wszSKUIdType, __in_opt PWSTR wszContentType, __in_opt PWSTR wszContentName); DRMEXPORT HRESULT UDAPICALL DRMSetUsagePolicy( IN DRMPUBHANDLE hIssuanceLicense, IN DRM_USAGEPOLICY_TYPE eUsagePolicyType, IN BOOL fDelete, IN BOOL fExclusion, __in_opt PWSTR wszName,//Set usage policy by Name __in_opt PWSTR wszMinVersion, __in_opt PWSTR wszMaxVersion, __in_opt PWSTR wszPublicKey,//Set usage policy by public key __in_opt PWSTR wszDigestAlgorithm,//Set usage policy by digest IN BYTE* pbDigest, IN UINT cbDigest); DRMEXPORT HRESULT UDAPICALL DRMSetRevocationPoint( IN DRMPUBHANDLE hIssuanceLicense, IN BOOL fDelete, __in PWSTR wszId, __in PWSTR wszIdType, __in PWSTR wszURL, IN SYSTEMTIME* pstFrequency, __in_opt PWSTR wszName,//Optional __in_opt PWSTR wszPublicKey); DRMEXPORT HRESULT UDAPICALL DRMSetApplicationSpecificData( IN DRMPUBHANDLE hIssuanceLicense, IN BOOL fDelete, __in_opt PWSTR wszName, __in_opt PWSTR wszValue); DRMEXPORT HRESULT UDAPICALL DRMSetNameAndDescription( IN DRMPUBHANDLE hIssuanceLicense, IN BOOL fDelete, IN UINT lcid, __in_opt PWSTR wszName, __in_opt PWSTR wszDescription); DRMEXPORT HRESULT UDAPICALL DRMSetIntervalTime( IN DRMPUBHANDLE hIssuanceLicense, IN UINT cDays); DRMEXPORT HRESULT UDAPICALL DRMGetIssuanceLicenseTemplate( IN DRMPUBHANDLE hIssuanceLicense, IN OUT UINT* puIssuanceLicenseTemplateLength, __out_ecount_opt(*puIssuanceLicenseTemplateLength) PWSTR wszIssuanceLicenseTemplate); DRMEXPORT HRESULT UDAPICALL DRMGetSignedIssuanceLicense( IN DRMENVHANDLE hEnv,//Optional.Mandatory for DRM_SIGN_OFFLINE IN DRMPUBHANDLE hIssuanceLicense, IN UINT uFlags,//DRM_SIGN_ONLINE/DRM_SIGN_OFFLINE/DRM_SIGN_CANCEL IN BYTE* pbSymKey, IN UINT cbSymKey, __in_opt PWSTR wszSymKeyType, __in_opt PWSTR wszClientLicensorCertificate,//Should be NULL for DRM_SIGN_ONLINE , not NULL otherwise IN DRMCALLBACK pfnCallback, __in_opt PWSTR wszURL,//Mandatory if uFlags is DRM_SIGN_ONLINE IN VOID* pvContext);//Optional DRMEXPORT HRESULT UDAPICALL DRMGetSignedIssuanceLicenseEx( DRMENVHANDLE hEnv, DRMPUBHANDLE hIssuanceLicense, UINT uFlags, __in_bcount_opt(cbSymKey) BYTE* pbSymKey, UINT cbSymKey, __in_opt PWSTR wszSymKeyType, __in_opt PVOID pvReserved, __in DRMHANDLE hEnablingPrincipal, __in DRMHANDLE hBoundLicenseCLC, __in DRMCALLBACK pfnCallback, __in PVOID pvContext); DRMEXPORT HRESULT UDAPICALL DRMClosePubHandle( IN DRMPUBHANDLE hPub); DRMEXPORT HRESULT UDAPICALL DRMDuplicatePubHandle( IN DRMPUBHANDLE hPubIn, OUT DRMPUBHANDLE* phPubOut); DRMEXPORT HRESULT UDAPICALL DRMGetUserInfo( IN DRMPUBHANDLE hUser, IN OUT UINT* puUserNameLength, __out_ecount_opt(*puUserNameLength) PWSTR wszUserName, IN OUT UINT* puUserIdLength, __out_ecount_opt(*puUserIdLength) PWSTR wszUserId, IN OUT UINT* puUserIdTypeLength, __out_ecount_opt(*puUserIdTypeLength) PWSTR wszUserIdType); DRMEXPORT HRESULT UDAPICALL DRMGetRightInfo( IN DRMPUBHANDLE hRight, IN OUT UINT* puRightNameLength, __out_ecount_opt(*puRightNameLength) PWSTR wszRightName, OUT SYSTEMTIME* pstFrom, OUT SYSTEMTIME* pstUntil); DRMEXPORT HRESULT UDAPICALL DRMGetRightExtendedInfo( IN DRMPUBHANDLE hRight, IN UINT uIndex, IN OUT UINT* puExtendedInfoNameLength, __out_ecount_opt(*puExtendedInfoNameLength) PWSTR wszExtendedInfoName, IN OUT UINT* puExtendedInfoValueLength, __out_ecount_opt(*puExtendedInfoValueLength) PWSTR wszExtendedInfoValue); DRMEXPORT HRESULT UDAPICALL DRMGetUsers( IN DRMPUBHANDLE hIssuanceLicense, IN UINT uIndex, OUT DRMPUBHANDLE* phUser); DRMEXPORT HRESULT UDAPICALL DRMGetUserRights( IN DRMPUBHANDLE hIssuanceLicense, IN DRMPUBHANDLE hUser, IN UINT uIndex, OUT DRMPUBHANDLE* phRight); DRMEXPORT HRESULT UDAPICALL DRMGetMetaData( IN DRMPUBHANDLE hIssuanceLicense, IN OUT UINT* puContentIdLength, __out_ecount_opt(*puContentIdLength) PWSTR wszContentId, IN OUT UINT* puContentIdTypeLength, __out_ecount_opt(*puContentIdTypeLength) PWSTR wszContentIdType, IN OUT UINT* puSKUIdLength, __out_ecount_opt(*puSKUIdLength) PWSTR wszSKUId, IN OUT UINT* puSKUIdTypeLength, __out_ecount_opt(*puSKUIdTypeLength) PWSTR wszSKUIdType, IN OUT UINT* puContentTypeLength, __out_ecount_opt(*puContentTypeLength) PWSTR wszContentType, IN OUT UINT* puContentNameLength, __out_ecount_opt(*puContentNameLength) PWSTR wszContentName); DRMEXPORT HRESULT UDAPICALL DRMGetApplicationSpecificData( IN DRMPUBHANDLE hIssuanceLicense, IN UINT uIndex, IN OUT UINT* puNameLength, __out_ecount_opt(*puNameLength) PWSTR wszName, IN OUT UINT* puValueLength, __out_ecount_opt(*puValueLength) PWSTR wszValue); DRMEXPORT HRESULT UDAPICALL DRMGetIssuanceLicenseInfo( IN DRMPUBHANDLE hIssuanceLicense, OUT SYSTEMTIME* pstTimeFrom, OUT SYSTEMTIME* pstTimeUntil, IN UINT uFlags, IN OUT UINT* puDistributionPointNameLength, __out_ecount_opt(*puDistributionPointNameLength) PWSTR wszDistributionPointName, IN OUT UINT* puDistributionPointURLLength, __out_ecount_opt(*puDistributionPointURLLength) PWSTR wszDistributionPointURL, OUT DRMPUBHANDLE* phOwner, OUT BOOL* pfOfficial); DRMEXPORT HRESULT UDAPICALL DRMGetRevocationPoint( IN DRMPUBHANDLE hIssuanceLicense, IN OUT UINT* puIdLength, __out_ecount_opt(*puIdLength) PWSTR wszId, IN OUT UINT* puIdTypeLength, __out_ecount_opt(*puIdTypeLength) PWSTR wszIdType, IN OUT UINT* puURLLength, __out_ecount_opt(*puURLLength) PWSTR wszRL, OUT SYSTEMTIME* pstFrequency, IN OUT UINT* puNameLength, __out_ecount_opt(*puNameLength) PWSTR wszName, IN OUT UINT* puPublicKeyLength, __out_ecount_opt(*puPublicKeyLength) PWSTR wszPublicKey); DRMEXPORT HRESULT UDAPICALL DRMGetUsagePolicy( IN DRMPUBHANDLE hIssuanceLicense, IN UINT uIndex, OUT DRM_USAGEPOLICY_TYPE* peUsagePolicyType, OUT BOOL* pfExclusion, IN OUT UINT* puNameLength, __out_ecount_opt(*puNameLength) PWSTR wszName, IN OUT UINT* puMinVersionLength, __out_ecount_opt(*puMinVersionLength) PWSTR wszMinVersion, IN OUT UINT* puMaxVersionLength, __out_ecount_opt(*puMaxVersionLength) PWSTR wszMaxVersion, IN OUT UINT* puPublicKeyLength, __out_ecount_opt(*puPublicKeyLength) PWSTR wszPublicKey, IN OUT UINT* puDigestAlgorithmLength, __out_ecount_opt(*puDigestAlgorithmLength) PWSTR wszDigestAlgorithm, IN OUT UINT* pcbDigest, OUT BYTE* pbDigest); DRMEXPORT HRESULT UDAPICALL DRMGetNameAndDescription( IN DRMPUBHANDLE hIssuanceLicense, IN UINT uIndex, OUT UINT* pulcid, IN OUT UINT* puNameLength, __out_ecount_opt(*puNameLength) PWSTR wszName, IN OUT UINT* puDescriptionLength, __out_ecount_opt(*puDescriptionLength) PWSTR wszDescription); DRMEXPORT HRESULT UDAPICALL DRMGetOwnerLicense( IN DRMPUBHANDLE hIssuanceLicense, IN OUT UINT* puOwnerLicenseLength, __out_ecount_opt(*puOwnerLicenseLength) PWSTR wszOwnerLicense); DRMEXPORT HRESULT UDAPICALL DRMGetIntervalTime( IN DRMPUBHANDLE hIssuanceLicense, OUT UINT* pcDays); DRMEXPORT HRESULT UDAPICALL DRMRepair(); DRMEXPORT HRESULT UDAPICALL DRMRegisterProtectedWindow( IN DRMENVHANDLE hEnv, IN HWND hwnd); DRMEXPORT HRESULT UDAPICALL DRMIsWindowProtected( IN HWND hwnd, OUT BOOL* pfProtected); DRMEXPORT HRESULT UDAPICALL DRMAcquireIssuanceLicenseTemplate( IN DRMHSESSION hClient, IN UINT uFlags, IN VOID* pvReserved, IN UINT cTemplates, __in_ecount_opt(cTemplates) PWSTR* pwszTemplateIds, __in PWSTR wszUrl, IN VOID* pvContext); #endif // #ifndef __MSDRM_H_