/*++ Copyright (c) 1995-1996 Microsoft Corporation Module Name: lsapi.h Abstract: This module defines the 32-Bit Licensing API. The Licensing API is still pre-release (i.e. beta) code. Revision History: --*/ #ifndef LSAPI_H #define LSAPI_H #define LS_API_ENTRY WINAPI /***************************************************/ /* Standard LSAPI C status codes */ /***************************************************/ #define LS_SUCCESS ((LS_STATUS_CODE) 0x0) #define LS_BAD_HANDLE ((LS_STATUS_CODE) 0xC0001001) #define LS_INSUFFICIENT_UNITS ((LS_STATUS_CODE) 0xC0001002) #define LS_SYSTEM_UNAVAILABLE ((LS_STATUS_CODE) 0xC0001003) #define LS_LICENSE_TERMINATED ((LS_STATUS_CODE) 0xC0001004) #define LS_AUTHORIZATION_UNAVAILABLE ((LS_STATUS_CODE) 0xC0001005) #define LS_LICENSE_UNAVAILABLE ((LS_STATUS_CODE) 0xC0001006) #define LS_RESOURCES_UNAVAILABLE ((LS_STATUS_CODE) 0xC0001007) #define LS_NETWORK_UNAVAILABLE ((LS_STATUS_CODE) 0xC0001008) #define LS_TEXT_UNAVAILABLE ((LS_STATUS_CODE) 0x80001009) #define LS_UNKNOWN_STATUS ((LS_STATUS_CODE) 0xC000100A) #define LS_BAD_INDEX ((LS_STATUS_CODE) 0xC000100B) #define LS_LICENSE_EXPIRED ((LS_STATUS_CODE) 0x8000100C) #define LS_BUFFER_TOO_SMALL ((LS_STATUS_CODE) 0xC000100D) #define LS_BAD_ARG ((LS_STATUS_CODE) 0xC000100E) /* Microsoft provider-specific error codes */ // The name of the current user could not be retrieved. #define LS_NO_USERNAME ( (LS_STATUS_CODE) 0xC0002000 ) // An unexpected error occurred in a system call. #define LS_SYSTEM_ERROR ( (LS_STATUS_CODE) 0xC0002001 ) // The provider failed to properly initialize. #define LS_SYSTEM_INIT_FAILED ( (LS_STATUS_CODE) 0xC0002002 ) // An internal error has occurred in the Micrsoft provider. #define LS_INTERNAL_ERROR ( (LS_STATUS_CODE) 0xC0002002 ) /***************************************************/ /* standard LS API c datatype definitions */ /***************************************************/ typedef unsigned long LS_STATUS_CODE; typedef unsigned long LS_HANDLE; typedef char LS_STR; typedef unsigned long LS_ULONG; typedef long LS_LONG; typedef void LS_VOID; typedef struct { LS_STR MessageDigest[16]; /* a 128-bit message digest */ } LS_MSG_DIGEST; typedef struct { LS_ULONG SecretIndex; /* index of secret, X */ LS_ULONG Random; /* a random 32-bit value, R */ LS_MSG_DIGEST MsgDigest; /* the message digest h(in,R,S,Sx) */ } LS_CHALLDATA; typedef struct { LS_ULONG Protocol; /* Specifies the protocol */ LS_ULONG Size; /* size of ChallengeData structure */ LS_CHALLDATA ChallengeData; /* challenge & response */ } LS_CHALLENGE; /***************************************************/ /* Standard LSAPI C constant definitions */ /***************************************************/ #define LS_DEFAULT_UNITS ((LS_ULONG) 0xFFFFFFFF) #define LS_ANY ((LS_STR FAR *) "") #define LS_USE_LAST ((LS_ULONG) 0x0800FFFF) #define LS_INFO_NONE ((LS_ULONG) 0) #define LS_INFO_SYSTEM ((LS_ULONG) 1) #define LS_INFO_DATA ((LS_ULONG) 2) #define LS_UPDATE_PERIOD ((LS_ULONG) 3) #define LS_LICENSE_CONTEXT ((LS_ULONG) 4) #define LS_BASIC_PROTOCOL ((LS_ULONG) 0x00000001) #define LS_SQRT_PROTOCOL ((LS_ULONG) 0x00000002) #define LS_OUT_OF_BAND_PROTOCOL ((LS_ULONG) 0xFFFFFFFF) #define LS_NULL ((LS_VOID FAR *) NULL) // maximum length of a provider name returned by LSEnumProviders() #define LS_MAX_PROVIDER_NAME ( 255 ) // if returned by a call to LSQuery() against LS_UPDATE_PERIOD, // indicates that no interval recommendation is being made #define LS_NO_RECOMMENDATION ( (LS_ULONG) 0xFFFFFFFF ) /***************************************************/ /* Standard LSAPI C function definitions */ /***************************************************/ LS_STATUS_CODE LS_API_ENTRY LSRequest( LS_STR *LicenseSystem, LS_STR *PublisherName, LS_STR *ProductName, LS_STR *Version, LS_ULONG TotUnitsReserved, LS_STR *LogComment, LS_CHALLENGE *Challenge, LS_ULONG *TotUnitsGranted, LS_HANDLE *LicenseHandle ); LS_STATUS_CODE LS_API_ENTRY LSRelease( LS_HANDLE LicenseHandle, LS_ULONG TotUnitsConsumed, LS_STR *LogComment); LS_STATUS_CODE LS_API_ENTRY LSUpdate( LS_HANDLE LicenseHandle, LS_ULONG TotUnitsConsumed, LS_ULONG TotUnitsReserved, LS_STR *LogComment, LS_CHALLENGE *Challenge, LS_ULONG *TotUnitsGranted); LS_STATUS_CODE LS_API_ENTRY LSGetMessage( LS_HANDLE LicenseHandle, LS_STATUS_CODE Value, LS_STR *Buffer, LS_ULONG BufferSize); LS_STATUS_CODE LS_API_ENTRY LSQuery( LS_HANDLE LicenseHandle, LS_ULONG Information, LS_VOID *InfoBuffer, LS_ULONG BufferSize, LS_ULONG *ActualBufferSize); LS_STATUS_CODE LS_API_ENTRY LSEnumProviders( LS_ULONG Index, LS_STR *Buffer); LS_VOID LS_API_ENTRY LSFreeHandle( LS_HANDLE LicenseHandle ); /***************************************************/ /* Extension LSAPI C function definitions */ /***************************************************/ LS_STATUS_CODE LS_API_ENTRY LSInstall( LS_STR * ProviderPath ); /*++ Routine Description: Install the given DLL as a license system provider. NOTE: This API is a Microsoft extension to the LSAPI standard. Arguments: ProviderPath (LS_STR *) Path to the provider DLL to install. This should be a full path, and the DLL should be in the %SystemRoot%\System32 directory. Return Value: (LS_STATUS_CODE) LS_SUCCESS Provider is already installed or was successfully added. LS_BAD_ARG The parameters passed to the function were invalid. other An error occurred while attempting to install the provider. --*/ /***************************************************/ /* Extension LSAPI C function definitions */ /* (these will be supported only for the BETA SDK) */ /***************************************************/ // license types (node assignment, user assignment, or concurrent use assignment) typedef DWORD LS_LICENSE_TYPE; #define LS_LICENSE_TYPE_NODE ( 0 ) #define LS_LICENSE_TYPE_USER ( 1 ) #define LS_LICENSE_TYPE_SERVER ( 2 ) LS_STATUS_CODE LS_API_ENTRY LSLicenseUnitsSet( LS_STR * LicenseSystem, LS_STR * PublisherName, LS_STR * ProductName, LS_STR * Version, LS_LICENSE_TYPE LicenseType, LS_STR * UserName, LS_ULONG NumUnits, LS_ULONG NumSecrets, LS_ULONG * Secrets ); /*++ Routine Description: Set the number of units for the given license to the designated value. NOTE: This API is a Microsoft extension to the LSAPI standard, and WILL ONLY BE SUPPORTED FOR THE BETA RELEASE OF THE LSAPI SDK. Thereafter, licenses must be added using the common certicate format (CCF). APIs will be exposed to allow licenses to be auotmatically added by an application's SETUP program. Arguments: LicenseSystem (LS_STR *) License system to which to set the license information. If LS_ANY, the license will be offered to each installed license system until one returns success. PublisherName (LS_STR *) Publisher name for which to set the license info. ProductName (LS_STR *) Product name for which to set the license info. Version (LS_STR *) Product version for which to set the license info. LicenseType (LS_LICENSE_TYPE) Type of license for which to set the license info. UserName (LS_STR *) User for which to set the license info. If LS_NULL and the the license type is LS_LICENSE_TYPE_USER, the license info will be set for the user corresponding to the current thread. NumUnits (LS_ULONG) Units purchased for this license. NumSecrets (LS_ULONG) Number of application-specific secrets corresponding to this license. Secrets (LS_ULONG *) Array of application-specific secrets corresponding to this license. Return Value: (LS_STATUS_CODE) LS_SUCCESS License successfully installed. LS_BAD_ARG The parameters passed to the function were invalid. other An error occurred whil attempting to install the license. --*/ LS_STATUS_CODE LS_API_ENTRY LSLicenseUnitsGet( LS_STR * LicenseSystem, LS_STR * PublisherName, LS_STR * ProductName, LS_STR * Version, LS_STR * UserName, LS_ULONG * NumUnits ); /*++ Routine Description: Get the number of units for the given license. NOTE: This API is a Microsoft extension to the LSAPI standard, and WILL ONLY BE SUPPORTED FOR THE BETA RELEASE OF THE LSAPI SDK. Thereafter, licenses must be accessed using the common certicate format (CCF). Arguments: LicenseSystem (LS_STR *) License system for which to get the license information. If LS_ANY, each installed license system will be queried until one returns success. PublisherName (LS_STR *) Publisher name for which to get the license info. ProductName (LS_STR *) Product name for which to get the license info. Version (LS_STR *) Product version for which to get the license info. UserName (LS_STR *) User for which to get the license info. If LS_NULL and the the license type is LS_LICENSE_TYPE_USER, license info will be retrieved for the user corresponding to the current thread. NumUnits (LS_ULONG *) On return, the number of units purchased for this license. Return Value: (LS_STATUS_CODE) LS_SUCCESS Success. LS_BAD_ARG The parameters passed to the function were invalid. other An error occurred whil attempting to retrieve the license. --*/ #endif /* LSAPI_H */