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.
1064 lines
37 KiB
1064 lines
37 KiB
#include <windows.h>
|
|
#include <lsapi.h>
|
|
#include <stdio.h>
|
|
|
|
#define PUBLISHER_NAME ( "Microsoft" )
|
|
#define PRODUCT_NAME ( "Test Application" )
|
|
#define VERSION ( "1.0" )
|
|
|
|
static LS_STR szPublisherName[] = PUBLISHER_NAME;
|
|
static LS_STR szProductName[] = PRODUCT_NAME;
|
|
static LS_STR szVersion[] = VERSION;
|
|
|
|
static DWORD l_adwSecrets[] =
|
|
{
|
|
0x19721995,
|
|
0x19950830,
|
|
0x02593000,
|
|
0x19720817
|
|
};
|
|
|
|
static DWORD l_dwNumSecrets = sizeof( l_adwSecrets ) / sizeof( l_adwSecrets[0] );
|
|
|
|
static DWORD l_adwErrorCodes[] =
|
|
{
|
|
0x0,
|
|
0xc0001001,
|
|
0xc0001002,
|
|
0xc0001003,
|
|
0xc0001004,
|
|
0xc0001005,
|
|
0xc0001006,
|
|
0xc0001007,
|
|
0xc0001008,
|
|
0x80001009,
|
|
0xc000100a,
|
|
0xc000100b,
|
|
0x8000100c,
|
|
0xc000100d,
|
|
0xc000100e,
|
|
0xc0002000,
|
|
0xc0002001,
|
|
0xc0002002,
|
|
0xc0005001,
|
|
0xc0005002,
|
|
0xc0005003,
|
|
0xc0005004,
|
|
0xc0005005,
|
|
0xc0005006,
|
|
0xc0005007,
|
|
0xc0005008,
|
|
0x80005009,
|
|
0xc000500a,
|
|
0xc000500b,
|
|
0x8000500c,
|
|
0xc000500d,
|
|
0xc000500e,
|
|
0xc0006000,
|
|
0xc0006001,
|
|
0xc0006002
|
|
};
|
|
|
|
int __cdecl
|
|
main( int argc, char * argv[] )
|
|
{
|
|
LS_STATUS_CODE lsscError;
|
|
LS_ULONG lsulUnitsGranted;
|
|
LS_HANDLE lshHandle;
|
|
LS_STR szErrorMessage[ 256 ];
|
|
char achInfoBuffer[ 256 ];
|
|
LS_ULONG lsulBufferSizeNeeded;
|
|
char szProviderName[ 256 ];
|
|
LONG lError;
|
|
DWORD i;
|
|
BOOL bRepeat;
|
|
LS_ULONG lsulTotalUnits;
|
|
DWORD dwStart;
|
|
DWORD dwRequestSpan = 0;
|
|
DWORD nRequests = 0;
|
|
DWORD dwUpdateSpan = 0;
|
|
DWORD nUpdates = 0;
|
|
UINT nChars;
|
|
char szProviderPath[ MAX_PATH ];
|
|
|
|
// install if necessary
|
|
nChars = GetSystemDirectory( szProviderPath, sizeof( szProviderPath ) );
|
|
if ( 0 == nChars )
|
|
{
|
|
printf( "[%d] Can't get system directory, error 0x%lx.\n", __LINE__, GetLastError() );
|
|
}
|
|
|
|
lstrcat( szProviderPath, "\\mslsp32.dll" );
|
|
lsscError = LSInstall( szProviderPath );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSInstall failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
bRepeat = ( argc == 2 ) && ( !lstrcmpi( "/r", argv[1] ) );
|
|
|
|
do
|
|
{
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// No License //
|
|
//////////////////
|
|
|
|
// remove all licenses
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_NODE,
|
|
NULL,
|
|
0,
|
|
0,
|
|
NULL );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
NULL,
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 0 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 0.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
|
|
// request a license; this should fail since there are no licenses
|
|
dwStart = GetTickCount();
|
|
lsscError = LSRequest( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted,
|
|
&lshHandle );
|
|
dwRequestSpan += ( GetTickCount() - dwStart );
|
|
nRequests++;
|
|
|
|
if ( LS_AUTHORIZATION_UNAVAILABLE != lsscError )
|
|
{
|
|
printf( "[%d] LSRequest failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// update license; this should fail, too
|
|
dwStart = GetTickCount();
|
|
lsscError = LSUpdate( lshHandle,
|
|
LS_DEFAULT_UNITS,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted );
|
|
dwUpdateSpan += ( GetTickCount() - dwStart );
|
|
nUpdates++;
|
|
|
|
if ( LS_AUTHORIZATION_UNAVAILABLE != lsscError )
|
|
{
|
|
printf( "[%d] LSUpdate failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// release license
|
|
lsscError = LSRelease( lshHandle,
|
|
0,
|
|
LS_NULL );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRelease failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// free handle
|
|
LSFreeHandle( lshHandle );
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Node License //
|
|
////////////////////
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_NODE,
|
|
NULL,
|
|
LS_DEFAULT_UNITS,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
NULL,
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 1.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
// request a license
|
|
dwStart = GetTickCount();
|
|
lsscError = LSRequest( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted,
|
|
&lshHandle );
|
|
dwRequestSpan += ( GetTickCount() - dwStart );
|
|
nRequests++;
|
|
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRequest failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulUnitsGranted )
|
|
{
|
|
printf( "[%d] LSRequest succeeded but granted %lu units, not 1.\n", __LINE__, lsulUnitsGranted );
|
|
}
|
|
lsulUnitsGranted = 0;
|
|
|
|
// update license
|
|
dwStart = GetTickCount();
|
|
lsscError = LSUpdate( lshHandle,
|
|
LS_DEFAULT_UNITS,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted );
|
|
dwUpdateSpan += ( GetTickCount() - dwStart );
|
|
nUpdates++;
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSUpdate failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulUnitsGranted )
|
|
{
|
|
printf( "[%d] LSUpdate succeeded but granted %lu units, not 1.\n", __LINE__, lsulUnitsGranted );
|
|
}
|
|
|
|
// release license
|
|
lsscError = LSRelease( lshHandle,
|
|
0,
|
|
LS_NULL );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRelease failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// free handle
|
|
LSFreeHandle( lshHandle );
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// User License //
|
|
////////////////////
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_USER,
|
|
NULL,
|
|
LS_DEFAULT_UNITS,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
NULL,
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 1.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
// request a license
|
|
dwStart = GetTickCount();
|
|
lsscError = LSRequest( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted,
|
|
&lshHandle );
|
|
dwRequestSpan += ( GetTickCount() - dwStart );
|
|
nRequests++;
|
|
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRequest failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulUnitsGranted )
|
|
{
|
|
printf( "[%d] LSRequest succeeded but granted %lu units, not 1.\n", __LINE__, lsulUnitsGranted );
|
|
}
|
|
lsulUnitsGranted = 0;
|
|
|
|
// update license
|
|
dwStart = GetTickCount();
|
|
lsscError = LSUpdate( lshHandle,
|
|
LS_DEFAULT_UNITS,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted );
|
|
dwUpdateSpan += ( GetTickCount() - dwStart );
|
|
nUpdates++;
|
|
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSUpdate failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulUnitsGranted )
|
|
{
|
|
printf( "[%d] LSUpdate succeeded but granted %lu units, not 1.\n", __LINE__, lsulUnitsGranted );
|
|
}
|
|
|
|
// release license
|
|
lsscError = LSRelease( lshHandle,
|
|
0,
|
|
LS_NULL );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRelease failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// free handle
|
|
LSFreeHandle( lshHandle );
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Insufficient Node Licenses //
|
|
//////////////////////////////////
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_NODE,
|
|
NULL,
|
|
LS_DEFAULT_UNITS,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
NULL,
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 1.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
// request a license
|
|
dwStart = GetTickCount();
|
|
lsscError = LSRequest( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
2,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted,
|
|
&lshHandle );
|
|
dwRequestSpan += ( GetTickCount() - dwStart );
|
|
nRequests++;
|
|
|
|
if ( LS_INSUFFICIENT_UNITS != lsscError )
|
|
{
|
|
printf( "[%d] LSRequest failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulUnitsGranted )
|
|
{
|
|
printf( "[%d] LSRequest succeeded but granted %lu units, not 1.\n", __LINE__, lsulUnitsGranted );
|
|
}
|
|
|
|
dwStart = GetTickCount();
|
|
lsscError = LSUpdate( lshHandle,
|
|
LS_DEFAULT_UNITS,
|
|
2,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted );
|
|
dwUpdateSpan += ( GetTickCount() - dwStart );
|
|
nUpdates++;
|
|
|
|
if ( LS_INSUFFICIENT_UNITS != lsscError )
|
|
{
|
|
printf( "[%d] LSUpdate failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulUnitsGranted )
|
|
{
|
|
printf( "[%d] LSUpdate succeeded but granted %lu units, not 1.\n", __LINE__, lsulUnitsGranted );
|
|
}
|
|
|
|
// release license
|
|
lsscError = LSRelease( lshHandle,
|
|
0,
|
|
LS_NULL );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRelease failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// free handle
|
|
LSFreeHandle( lshHandle );
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Insufficient User Licenses //
|
|
//////////////////////////////////
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_USER,
|
|
NULL,
|
|
LS_DEFAULT_UNITS,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
NULL,
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 1.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
// request a license
|
|
dwStart = GetTickCount();
|
|
lsscError = LSRequest( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
2,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted,
|
|
&lshHandle );
|
|
dwRequestSpan += ( GetTickCount() - dwStart );
|
|
nRequests++;
|
|
|
|
if ( LS_INSUFFICIENT_UNITS != lsscError )
|
|
{
|
|
printf( "[%d] LSRequest failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulUnitsGranted )
|
|
{
|
|
printf( "[%d] LSRequest succeeded but granted %lu units, not 1.\n", __LINE__, lsulUnitsGranted );
|
|
}
|
|
|
|
dwStart = GetTickCount();
|
|
lsscError = LSUpdate( lshHandle,
|
|
LS_DEFAULT_UNITS,
|
|
2,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted );
|
|
dwUpdateSpan += ( GetTickCount() - dwStart );
|
|
nUpdates++;
|
|
|
|
if ( LS_INSUFFICIENT_UNITS != lsscError )
|
|
{
|
|
printf( "[%d] LSUpdate failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulUnitsGranted )
|
|
{
|
|
printf( "[%d] LSUpdate succeeded but granted %lu units, not 1.\n", __LINE__, lsulUnitsGranted );
|
|
}
|
|
|
|
// release license
|
|
lsscError = LSRelease( lshHandle,
|
|
0,
|
|
LS_NULL );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRelease failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// free handle
|
|
LSFreeHandle( lshHandle );
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// License Terminated //
|
|
//////////////////////////
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_NODE,
|
|
NULL,
|
|
LS_DEFAULT_UNITS,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
NULL,
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 1.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
// request a license
|
|
dwStart = GetTickCount();
|
|
lsscError = LSRequest( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted,
|
|
&lshHandle );
|
|
dwRequestSpan += ( GetTickCount() - dwStart );
|
|
nRequests++;
|
|
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRequest failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// destroy license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_NODE,
|
|
NULL,
|
|
0,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
|
|
// update license
|
|
dwStart = GetTickCount();
|
|
lsscError = LSUpdate( lshHandle,
|
|
LS_DEFAULT_UNITS,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted );
|
|
dwUpdateSpan += ( GetTickCount() - dwStart );
|
|
nUpdates++;
|
|
|
|
if ( LS_LICENSE_TERMINATED != lsscError )
|
|
{
|
|
printf( "[%d] LSUpdate failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// release license
|
|
lsscError = LSRelease( lshHandle,
|
|
0,
|
|
LS_NULL );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRelease failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// free handle
|
|
LSFreeHandle( lshHandle );
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Switch License Type //
|
|
///////////////////////////
|
|
|
|
// add node license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_NODE,
|
|
NULL,
|
|
LS_DEFAULT_UNITS,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
NULL,
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 1.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
// request a license
|
|
dwStart = GetTickCount();
|
|
lsscError = LSRequest( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted,
|
|
&lshHandle );
|
|
dwRequestSpan += ( GetTickCount() - dwStart );
|
|
nRequests++;
|
|
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRequest failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// destroy node license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_NODE,
|
|
NULL,
|
|
0,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
|
|
// add user license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_NODE,
|
|
NULL,
|
|
LS_DEFAULT_UNITS,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// update license
|
|
dwStart = GetTickCount();
|
|
lsscError = LSUpdate( lshHandle,
|
|
LS_DEFAULT_UNITS,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted );
|
|
dwUpdateSpan += ( GetTickCount() - dwStart );
|
|
nUpdates++;
|
|
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSUpdate failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// release license
|
|
lsscError = LSRelease( lshHandle,
|
|
0,
|
|
LS_NULL );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRelease failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// free handle
|
|
LSFreeHandle( lshHandle );
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Error Messages //
|
|
//////////////////////
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_NODE,
|
|
NULL,
|
|
LS_DEFAULT_UNITS,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
NULL,
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 1.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
// request a license
|
|
dwStart = GetTickCount();
|
|
lsscError = LSRequest( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted,
|
|
&lshHandle );
|
|
dwRequestSpan += ( GetTickCount() - dwStart );
|
|
nRequests++;
|
|
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRequest failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// get valid messages
|
|
for ( i=0; i < sizeof( l_adwErrorCodes ) / sizeof( l_adwErrorCodes[0] ); i++ )
|
|
{
|
|
lsscError = LSGetMessage( lshHandle,
|
|
l_adwErrorCodes[ i ],
|
|
szErrorMessage,
|
|
sizeof( szErrorMessage ) );
|
|
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSGetMessage on message 0x%lx failed, error 0x%lx.\n", __LINE__, l_adwErrorCodes[ i ], lsscError );
|
|
}
|
|
}
|
|
|
|
// get invalid message
|
|
lsscError = LSGetMessage( lshHandle,
|
|
0xFFFFFFFF,
|
|
szErrorMessage,
|
|
sizeof( szErrorMessage ) );
|
|
if ( LS_UNKNOWN_STATUS != lsscError )
|
|
{
|
|
printf( "[%d] LSGetMessage failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// get invalid message
|
|
lsscError = LSGetMessage( lshHandle,
|
|
0x80002345,
|
|
szErrorMessage,
|
|
sizeof( szErrorMessage ) );
|
|
if ( LS_UNKNOWN_STATUS != lsscError )
|
|
{
|
|
printf( "[%d] LSGetMessage failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// release license
|
|
lsscError = LSRelease( lshHandle,
|
|
0,
|
|
LS_NULL );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRelease failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// free handle
|
|
LSFreeHandle( lshHandle );
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Release of handle that has been freed //
|
|
/////////////////////////////////////////////
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_NODE,
|
|
NULL,
|
|
LS_DEFAULT_UNITS,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// request a license
|
|
lsscError = LSRequest( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted,
|
|
&lshHandle );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRequest failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// release license
|
|
lsscError = LSRelease( lshHandle,
|
|
0,
|
|
LS_NULL );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSRelease failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// free handle
|
|
LSFreeHandle( lshHandle );
|
|
|
|
// re-release license
|
|
lsscError = LSRelease( lshHandle,
|
|
0,
|
|
LS_NULL );
|
|
if ( LS_BAD_HANDLE != lsscError )
|
|
{
|
|
printf( "[%d] LSRelease failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// LicenseUnitsGet and LicenseUnitsSet for multiple users //
|
|
//////////////////////////////////////////////////////////////
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_USER,
|
|
"user1",
|
|
1,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_USER,
|
|
"user2",
|
|
2,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_USER,
|
|
"user3",
|
|
3,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_USER,
|
|
NULL,
|
|
4,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// verify license units
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
"user1",
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 1 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 1.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
// verify license units
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
"user2",
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 2 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 2.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
// verify license units
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
"user3",
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 3 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 3.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
// verify license units
|
|
lsscError = LSLicenseUnitsGet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
NULL,
|
|
&lsulTotalUnits );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
else if ( 4 != lsulTotalUnits )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsGet failed; got %d units, expected 4.\n", __LINE__, lsulTotalUnits );
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// LSRequest with LicenseSystem = NULL -- should not trap! //
|
|
///////////////////////////////////////////////////////////////
|
|
|
|
// add a license
|
|
lsscError = LSLicenseUnitsSet( LS_ANY,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_LICENSE_TYPE_NODE,
|
|
NULL,
|
|
LS_DEFAULT_UNITS,
|
|
l_dwNumSecrets,
|
|
l_adwSecrets );
|
|
if ( LS_SUCCESS != lsscError )
|
|
{
|
|
printf( "[%d] LSLicenseUnitsSet failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// request a license
|
|
lsscError = LSRequest( NULL,
|
|
szPublisherName,
|
|
szProductName,
|
|
szVersion,
|
|
LS_DEFAULT_UNITS,
|
|
LS_NULL,
|
|
LS_NULL,
|
|
&lsulUnitsGranted,
|
|
&lshHandle );
|
|
if ( LS_BAD_ARG != lsscError )
|
|
{
|
|
printf( "[%d] LSRequest failed, error 0x%lx.\n", __LINE__, lsscError );
|
|
}
|
|
|
|
// free handle
|
|
LSFreeHandle( lshHandle );
|
|
|
|
} while ( bRepeat );
|
|
|
|
printf( "Average LSRequest() time: %4d msec\n", dwRequestSpan / nRequests );
|
|
printf( "Average LSUpdate() time : %4d msec\n", dwUpdateSpan / nUpdates );
|
|
|
|
return 0;
|
|
}
|
|
|