mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
320 lines
11 KiB
320 lines
11 KiB
#include <limits.h>
|
|
#include <windows.h>
|
|
#include <lsapi.h>
|
|
#include "provider.h"
|
|
|
|
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.
|
|
|
|
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 lsscError = LS_SYSTEM_UNAVAILABLE;
|
|
PLS_PROVIDER plspProvider = NULL;
|
|
LS_HANDLE lshProviderHandle = 0;
|
|
DWORD dwNumProviders;
|
|
DWORD i;
|
|
|
|
if ( IsBadStringPtr( LicenseSystem, UINT_MAX ) )
|
|
{
|
|
lsscError = LS_BAD_ARG;
|
|
}
|
|
#if 0
|
|
else if ( lstrcmpi( LS_ANY, LicenseSystem ) )
|
|
{
|
|
// ask only the designated provider
|
|
plspProvider = LSXProviderListGetByName( LicenseSystem );
|
|
|
|
if ( ( NULL != plspProvider )
|
|
&& ( NULL != plspProvider->pLSLicenseUnitsSet ) )
|
|
{
|
|
lsscError = ( * ( plspProvider->pLSLicenseUnitsSet ) )( LicenseSystem,
|
|
PublisherName,
|
|
ProductName,
|
|
Version,
|
|
LicenseType,
|
|
UserName,
|
|
NumUnits,
|
|
NumSecrets,
|
|
Secrets );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// try providers in search order until we find one that accepts the license
|
|
// or we've tried all providers
|
|
dwNumProviders = LSXProviderListGetSize();
|
|
|
|
for ( i = 0; i < dwNumProviders; i++ )
|
|
{
|
|
plspProvider = LSXProviderListGetByOrder( i );
|
|
|
|
if ( ( NULL != plspProvider )
|
|
&& ( NULL != plspProvider->pLSLicenseUnitsSet ) )
|
|
{
|
|
lsscError = ( * ( plspProvider->pLSLicenseUnitsSet ) )( LicenseSystem,
|
|
PublisherName,
|
|
ProductName,
|
|
Version,
|
|
LicenseType,
|
|
UserName,
|
|
NumUnits,
|
|
NumSecrets,
|
|
Secrets );
|
|
|
|
if ( LS_SUCCESS == lsscError )
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#else
|
|
dwNumProviders = LSXProviderListGetSize();
|
|
|
|
for ( i = 0; i < dwNumProviders; i++ )
|
|
{
|
|
plspProvider = LSXProviderListGetByOrder( i );
|
|
|
|
if ( ( NULL != plspProvider )
|
|
&& ( NULL != plspProvider->pLSLicenseUnitsSet )
|
|
&& ( !strnicmp( plspProvider->szProviderName, LicenseSystem, lstrlen( LicenseSystem ) ) ) )
|
|
{
|
|
// try to set units for this provider
|
|
lsscError = ( * ( plspProvider->pLSLicenseUnitsSet ) )( LicenseSystem,
|
|
PublisherName,
|
|
ProductName,
|
|
Version,
|
|
LicenseType,
|
|
UserName,
|
|
NumUnits,
|
|
NumSecrets,
|
|
Secrets );
|
|
|
|
if ( LS_SUCCESS == lsscError )
|
|
{
|
|
// sweet success; we need not seek any further
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
return lsscError;
|
|
}
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
--*/
|
|
{
|
|
LS_STATUS_CODE lsscError = LS_SYSTEM_UNAVAILABLE;
|
|
PLS_PROVIDER plspProvider = NULL;
|
|
LS_HANDLE lshProviderHandle = 0;
|
|
DWORD dwNumProviders;
|
|
DWORD i;
|
|
|
|
if ( IsBadStringPtr( LicenseSystem, UINT_MAX ) )
|
|
{
|
|
lsscError = LS_BAD_ARG;
|
|
}
|
|
#if 0
|
|
else if ( lstrcmpi( LS_ANY, LicenseSystem ) )
|
|
{
|
|
// ask only the designated provider
|
|
plspProvider = LSXProviderListGetByName( LicenseSystem );
|
|
|
|
if ( ( NULL != plspProvider )
|
|
&& ( NULL != plspProvider->pLSLicenseUnitsGet ) )
|
|
{
|
|
lsscError = ( * ( plspProvider->pLSLicenseUnitsGet ) )( LicenseSystem,
|
|
PublisherName,
|
|
ProductName,
|
|
Version,
|
|
UserName,
|
|
NumUnits );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// try providers in search order until we find one that accepts the license
|
|
// or we've tried all providers
|
|
dwNumProviders = LSXProviderListGetSize();
|
|
|
|
for ( i = 0; i < dwNumProviders; i++ )
|
|
{
|
|
plspProvider = LSXProviderListGetByOrder( i );
|
|
|
|
if ( ( NULL != plspProvider )
|
|
&& ( NULL != plspProvider->pLSLicenseUnitsGet ) )
|
|
{
|
|
lsscError = ( * ( plspProvider->pLSLicenseUnitsGet ) )( LicenseSystem,
|
|
PublisherName,
|
|
ProductName,
|
|
Version,
|
|
UserName,
|
|
NumUnits );
|
|
|
|
if ( LS_SUCCESS == lsscError )
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#else
|
|
dwNumProviders = LSXProviderListGetSize();
|
|
|
|
for ( i = 0; i < dwNumProviders; i++ )
|
|
{
|
|
plspProvider = LSXProviderListGetByOrder( i );
|
|
|
|
if ( ( NULL != plspProvider )
|
|
&& ( NULL != plspProvider->pLSLicenseUnitsSet )
|
|
&& ( !strnicmp( plspProvider->szProviderName, LicenseSystem, lstrlen( LicenseSystem ) ) ) )
|
|
{
|
|
// try to get units from this provider
|
|
lsscError = ( * ( plspProvider->pLSLicenseUnitsGet ) )( LicenseSystem,
|
|
PublisherName,
|
|
ProductName,
|
|
Version,
|
|
UserName,
|
|
NumUnits );
|
|
|
|
if ( LS_SUCCESS == lsscError )
|
|
{
|
|
// sweet success; we need not seek any further
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
return lsscError;
|
|
}
|
|
|
|
LS_STATUS_CODE LS_API_ENTRY
|
|
LSInstall( LS_STR * ProviderPath )
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Install the given DLL as a license system provider.
|
|
|
|
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.
|
|
|
|
--*/
|
|
{
|
|
LS_STATUS_CODE lsscError;
|
|
|
|
if ( IsBadStringPtr( ProviderPath, UINT_MAX ) )
|
|
{
|
|
lsscError = LS_BAD_ARG;
|
|
}
|
|
else
|
|
{
|
|
lsscError = LSXProviderInstall( ProviderPath );
|
|
}
|
|
|
|
return lsscError;
|
|
}
|