Enterprise Mobility and Security Blog


Prior to Windows Server 2008, there was no way for administrators to manually revoke issued licenses. Issued licenses would automatically expire after a random period between 52-89 days and become part of the available license pool. In some cases, an administrator might want an issued license to become available immediately—typically when a particular machine will no longer be used (for example, the machine is being reformatted) and the license must be made available immediately to another client without waiting until it expires. To address this, we now have a method of revoking a license manually.

Currently, revocation support is only for per-device CALs. Per User Terminal Server mode is not enforced in Windows Server 2008, so there will not be any denial of service from terminal server.

You can only revoke 20% of a specific version of a CAL or one CAL, whichever is more. So, for example, if there are 100 Windows Server 2003 per-device CALs installed, you can revoke only 20 of them. Once 20% of the totals CAL are revoked, Admin will have to wait till any of the revoked CAL expires, so that he can revoke more CAL’s.

Manual revocation of CALs can be done by either of the following mechanisms:

  • TS Licensing Manager
  • WMI providers

Manual Revocation of CALs using TS Licensing Manager:

  1. Open TS Licensing Manager (LicMgr.Exe)
  2. Right-click the CAL you want to revoke, and then click Revoke CAL.



After revocation, the revoked CAL becomes available immediately. The status of the revoked CAL is changed from “Active” to “Revoked,” as shown in figure below.


Manual Revocation of CALs using WMI Providers:

Windows Server 2008 also provides support for revocation of issued CALs using WMI providers. CALs revoked through WMI are reflected in TS Licensing Manager.

The following WMI class is used to revoke issued CALs:


Windows Server 2008 has a WMI class named “Win32_TSIssuedLicense” for managing issued per device CALs. This WMI class provides the following interface to manually revoke issued CALs:

Revoke: This API can be used to manually revoke an issued CAL. This is a not a static function.

The syntax of the API is

uint32 Revoke(
  [out]  uint32 RevokableCals,
  [out]  DATETIME NextRevokeAllowedOn );


  • RevokableCals: Number of TS CALs of the same type as the current object that can be revoked.
  • NextRevokeAllowedOn: Date that the administrator can next try to revoke licenses. This parameter only contains valid data when the Revoke method call has failed because the maximum revoke count has been reached.