/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_MSDRMDEFS
#define _INC_MSDRMDEFS

typedef ULONG DRMHANDLE;
typedef ULONG DRMPUBHANDLE;
typedef ULONG DRMHSESSION;
typedef ULONG DRMENVHANDLE;
typedef ULONG DRMQUERYHANDLE;

typedef enum _DRM_STATUS_MSG {
  DRM_MSG_ACTIVATE_MACHINE = 0,
  DRM_MSG_ACTIVATE_GROUPIDENTITY,
  DRM_MSG_ACQUIRE_LICENSE,
  DRM_MSG_ACQUIRE_ISSUANCE_LICENSE_TEMPLATE,
  DRM_MSG_ACQUIRE_ADVISORY,
  DRM_MSG_SIGN_ISSUANCE_LICENSE,
  DRM_MSG_ACQUIRE_CLIENTLICENSOR 
} DRM_STATUS_MSG;

typedef enum _DRMGLOBALOPTIONS {
  DRMGLOBALOPTIONS_USE_WINHTTP                   = 0x00,
  DRMGLOBALOPTIONS_USE_SERVERSECURITYPROCESSOR   = 0x01 
} DRMGLOBALOPTIONS;

typedef enum _DRM_DISTRIBUTION_POINT_INFO {
  DRM_DISTRIBUTION_POINT_LICENSE_ACQUISITION = 0,
  DRM_DISTRIBUTION_POINT_PUBLISHING,
  DRM_DISTRIBUTION_POINT_REFERRAL_INFO 
} DRM_DISTRIBUTION_POINT_INFO;

typedef enum _DRM_USAGEPOLICY_TYPE {
  DRM_USAGEPOLICY_TYPE_BYNAME = 0,
  DRM_USAGEPOLICY_TYPE_BYPUBLICKEY,
  DRM_USAGEPOLICY_TYPE_BYDIGEST,
  DRM_USAGEPOLICY_TYPE_OSEXCLUSION 
} DRM_USAGEPOLICY_TYPE;

typedef enum _DRMATTESTTYPE {
  DRMATTESTTYPE_FULLENVIRONMENT = 0,
  DRMATTESTTYPE_HASHONLY 
} DRMATTESTTYPE;

typedef enum _DRMENCODINGTYPE {
  DRMENCODINGTYPE_BASE64 = 0,
  DRMENCODINGTYPE_STRING,
  DRMENCODINGTYPE_LONG,
  DRMENCODINGTYPE_TIME,
  DRMENCODINGTYPE_UINT,
  DRMENCODINGTYPE_RAW 
} DRMENCODINGTYPE;

typedef enum _DRMSECURITYPROVIDERTYPE {
  DRMSECURITYPROVIDERTYPE_SOFTWARESECREP = 0
} DRMSECURITYPROVIDERTYPE;

typedef enum _DRMSPECTYPE {
  DRMSPECTYPE_UNKNOWN,
  DRMSPECTYPE_FILENAME 
} DRMSPECTYPE;

typedef enum _DRMTIMETYPE {
  DRMTIMETYPE_SYSTEMUTC = 0,
  DRMTIMETYPE_SYSTEMLOCAL 
} DRMTIMETYPE;

typedef struct _DRM_ACTSERV_INFO {
  UINT  uVersion;
  PWSTR wszPubKey;
  PWSTR wszURL;
} DRM_ACTSERV_INFO;

typedef struct _DRM_CLIENT_VERSION_INFO {
  UINT  uStructVersion;
  DWORD dwVersion[4];
  WCHAR wszHierarchy[256];
  WCHAR wszProductID[256];
  WCHAR wszProductDescription[256];
} DRM_CLIENT_VERSION_INFO;

typedef struct _DRMID {
  UINT  uVersion;
  WCHAR *wszIDType;
  WCHAR *wszID;
} DRMID;

typedef struct _DRMBOUNDLICENSEPARAMS {
  UINT      uVersion;
  DRMHANDLE hEnablingPrincipal;
  DRMHANDLE hSecureStore;
  PWSTR     wszRightsRequested;
  PWSTR     wszRightsGroup;
  DRMID     idResource;
  UINT      cAuthenticatorCount;
  DRMHANDLE *rghAuthenticators;
  PWSTR     wszDefaultEnablingPrincipalCredentials;
  DWORD     dwFlags;
} DRMBOUNDLICENSEPARAMS;

typedef HRESULT (__stdcall *DRMCALLBACK)(
    DRM_STATUS_MSG msg,
    HRESULT hr,
    VOID *pvParam,
    VOID *pvContext
);

#endif /*_INC_MSDRMDEFS*/