Revocation_GetRevocationList.cpp
[The AD RMS SDK leveraging functionality exposed by the client in Msdrm.dll is available for use in Windows Server 2008, Windows Vista, Windows Server 2008 R2, Windows 7, Windows Server 2012, and Windows 8. It may be altered or unavailable in subsequent versions. Instead, use Active Directory Rights Management Services SDK 2.1, which leverages functionality exposed by the client in Msipc.dll.]
The following code example retrieves a revocation list for an end-user license. The example first tries to retrieve the list from the certificate store. If that fails, the function calls DRMAcquireAdvisories and tries to enumerate the store again.
#include "RevocationList.h"
/*===================================================================
File: Revocation_GetRevocationList.cpp
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
Copyright (C) Microsoft. All rights reserved.
===================================================================*/
/////////////////////////////////////////////////////////////////////
// The GetRevocationList function retrieves a revocation list for
// the specified license.
//
HRESULT GetRevocationList(
DRMHSESSION hLicenseStorage,
PWSTR pwszLicense,
PWSTR* ppwszRevokeList)
{
HRESULT hr = S_OK; // Return type
const DWORD DW_WAIT_TIME = 60000; // Maximum signal duration
DWORD dwWaitResult = 0; // Actual signal duration
DRM_CONTEXT context; // Callback context
hr = GetCertificate(
hLicenseStorage, // License storage session
DRM_EL_REVOCATIONLIST, // Certificate type
ppwszRevokeList); // Revocation list
if(FAILED(hr))
{
// Initialize the callback context.
SecureZeroMemory(&context, sizeof(context));
// Create an event to signal when the license has been acquired.
context.hEvent = CreateEvent(
NULL, // No attributes
FALSE, // Automatic reset
FALSE, // Initial state not signaled
NULL); // Event object not named
if(NULL == context.hEvent) return E_FAIL;
// Call DRMAcquireAdvisories to retrieve the revocation list(s)
// required by the license.
hr = DRMAcquireAdvisories(
hLicenseStorage, // License storage session
pwszLicense, // Input license
NULL, // Not used
(void*)&context); // Callback context
if(FAILED(hr)) return hr;
// Wait for the callback to return.
dwWaitResult = WaitForSingleObject(context.hEvent, DW_WAIT_TIME);
if(WAIT_TIMEOUT == dwWaitResult || FAILED(context.hr)) return hr;
// Try to enumerate the revocation list again.
// Note:
// This example assumes that there is only one revocation
// list in the store. If others exist, you should increment
// the index of the DRMEnumerateLicense function until you
// find the list you want or receive an E_DRM_NO_MORE_DATA
// HRESULT return code.
hr = GetCertificate(
hLicenseStorage, // License storage session
DRM_EL_REVOCATIONLIST, // Certificate type
ppwszRevokeList); // Revocation list
}
return hr;
}
Related topics