2176 lines
58 KiB
C++
2176 lines
58 KiB
C++
//-------------------------------------------------------------------
|
|
//
|
|
// FILE: PriDlgs.cpp
|
|
//
|
|
// Summary;
|
|
// This file contians the Primary Dialogs, functions and dialog procs
|
|
//
|
|
// Entry Points;
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
// Mar-14-95 MikeMi Added F1 Message Filter and PWM_HELP message
|
|
// Apr-26-95 MikeMi Added Computer name and remoting
|
|
// Dec-15-95 JeffParh Added secure certificate support.
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
#include <windows.h>
|
|
#include "resource.h"
|
|
#include "CLicReg.hpp"
|
|
#include <stdlib.h>
|
|
#include <htmlhelp.h>
|
|
#include "liccpa.hpp"
|
|
#include "PriDlgs.hpp"
|
|
#include "SecDlgs.hpp"
|
|
#include <llsapi.h>
|
|
|
|
|
|
extern "C"
|
|
{
|
|
INT_PTR CALLBACK dlgprocLICCPA( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
|
INT_PTR CALLBACK dlgprocLICSETUP( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
|
INT_PTR CALLBACK dlgprocPERSEATSETUP( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
|
INT_PTR CALLBACK dlgprocLICCPACONFIG( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
|
}
|
|
|
|
// Perserver user count value limits and defaults
|
|
//
|
|
const int PERSERVER_LIMITDEFAULT = 0;
|
|
const int PERSERVER_MAX = 999999;
|
|
const int PERSERVER_MIN = 0;
|
|
const int PERSERVER_PAGE = 10;
|
|
const int cchEDITLIMIT = 6; // the number of chars to represent PERSERVER_MAX
|
|
|
|
const UINT MB_VALUELIMIT = MB_OK; // beep when value limit is reached
|
|
|
|
// Used for in memory storage of license mode state
|
|
//
|
|
typedef struct tagSERVICEENTRY
|
|
{
|
|
LPWSTR pszComputer;
|
|
LPWSTR pszService;
|
|
LPWSTR pszDisplayName;
|
|
LPWSTR pszFamilyDisplayName;
|
|
LICENSE_MODE lm;
|
|
DWORD dwLimit;
|
|
BOOL fIsNewProduct;
|
|
} SERVICEENTRY, *PSERVICEENTRY;
|
|
|
|
#pragma warning(push)
|
|
#pragma warning(disable: 4296) // C4296: '<=' : expression is always true
|
|
inline BOOL VALIDUSERCOUNT( UINT users )
|
|
{
|
|
return ((PERSERVER_MIN <= users) && (PERSERVER_MAX >= users));
|
|
}
|
|
#pragma warning(pop)
|
|
|
|
static void UpdatePerServerLicenses( HWND hwndDlg, PSERVICEENTRY pServ );
|
|
static int ServiceRegister( LPWSTR pszComputer,
|
|
LPWSTR pszFamilyDisplayName,
|
|
LPWSTR pszDisplayName );
|
|
|
|
|
|
BOOL g_fWarned = FALSE;
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: AccessOk
|
|
//
|
|
// Summary;
|
|
// Checks access rights from reg call and raise dialog as needed
|
|
//
|
|
// Arguments;
|
|
// hDlg [in] - Handle to working dialog to raise error dlgs with
|
|
// lrc [in] - the return status from a reg call
|
|
//
|
|
// Returns:
|
|
// local error mapping;
|
|
// ERR_NONE
|
|
// ERR_PERMISSIONDENIED
|
|
// ERR_NOREMOTESERVER
|
|
// ERR_REGISTRYCORRUPT
|
|
//
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
INT AccessOk( HWND hDlg, LONG lrc, BOOL fCPCall )
|
|
{
|
|
INT nrt = ERR_NONE;
|
|
|
|
if (ERROR_SUCCESS != lrc)
|
|
{
|
|
WCHAR szText[TEMPSTR_SIZE];
|
|
WCHAR szTitle[TEMPSTR_SIZE];
|
|
UINT wId;
|
|
UINT wIdTitle;
|
|
|
|
switch (lrc)
|
|
{
|
|
case ERROR_ACCESS_DENIED:
|
|
wId = IDS_NOACCESS;
|
|
nrt = ERR_PERMISSIONDENIED;
|
|
break;
|
|
|
|
case RPC_S_SERVER_UNAVAILABLE:
|
|
wId = IDS_NOSERVER;
|
|
nrt = ERR_NOREMOTESERVER;
|
|
break;
|
|
|
|
default:
|
|
wId = IDS_BADREG;
|
|
nrt = ERR_REGISTRYCORRUPT;
|
|
break;
|
|
}
|
|
|
|
if (fCPCall)
|
|
{
|
|
wIdTitle = IDS_CPCAPTION;
|
|
}
|
|
else
|
|
{
|
|
wIdTitle = IDS_SETUPCAPTION;
|
|
}
|
|
|
|
LoadString(g_hinst, wIdTitle, szTitle, TEMPSTR_SIZE);
|
|
LoadString(g_hinst, wId, szText, TEMPSTR_SIZE);
|
|
MessageBox (hDlg, szText, szTitle, MB_OK|MB_ICONSTOP);
|
|
}
|
|
return( nrt );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: InitUserEdit
|
|
//
|
|
// Summary;
|
|
// Initializes and defines user count edit control behaviour
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - Parent dialog of user count edit dialog
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void InitUserEdit( HWND hwndDlg )
|
|
{
|
|
HWND hwndCount = GetDlgItem( hwndDlg, IDC_USERCOUNT);
|
|
|
|
SendMessage( hwndCount, EM_LIMITTEXT, cchEDITLIMIT, 0 );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: InitTitleText
|
|
//
|
|
// Summary;
|
|
// Initialize title static text and mode definition static text
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - Parent dialog of description static text
|
|
// pServ [in] - Service definition to set static text
|
|
//
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void InitTitleText( HWND hwndDlg, PSERVICEENTRY pServ )
|
|
{
|
|
InitStaticWithService( hwndDlg, IDC_STATICTITLE, pServ->pszDisplayName );
|
|
InitStaticWithService( hwndDlg, IDC_STATICPERSEAT, pServ->pszDisplayName );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: InitDialogForService
|
|
//
|
|
// Summary;
|
|
// Initialize dialog controls to the service state
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - Parent dialog to init controls in
|
|
// pServ [in] - Service definition to set controls
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void InitDialogForService( HWND hwndDlg, PSERVICEENTRY pServ )
|
|
{
|
|
HWND hwndCount = GetDlgItem( hwndDlg, IDC_USERCOUNT );
|
|
HWND hwndSpin = GetDlgItem( hwndDlg, IDC_USERCOUNTARROW );
|
|
BOOL fIsPerServer = (LICMODE_PERSERVER==pServ->lm);
|
|
|
|
// set radio button states
|
|
CheckDlgButton( hwndDlg, IDC_PERSEAT, !fIsPerServer );
|
|
CheckDlgButton( hwndDlg, IDC_PERSERVER, fIsPerServer );
|
|
|
|
// set user count edit control
|
|
if (fIsPerServer)
|
|
{
|
|
// add text back
|
|
SetDlgItemInt( hwndDlg, IDC_USERCOUNT, pServ->dwLimit, FALSE );
|
|
SetFocus( hwndCount );
|
|
SendMessage( hwndCount, EM_SETSEL, 0, -1 );
|
|
}
|
|
else
|
|
{
|
|
// remove all text in item
|
|
SetDlgItemText( hwndDlg, IDC_USERCOUNT, L"" );
|
|
}
|
|
|
|
// set state of edit control and arrows
|
|
if ( NULL != hwndSpin )
|
|
{
|
|
EnableWindow( hwndCount, fIsPerServer );
|
|
EnableWindow( hwndSpin, fIsPerServer );
|
|
}
|
|
else
|
|
{
|
|
UpdatePerServerLicenses( hwndDlg, pServ );
|
|
EnableWindow( GetDlgItem( hwndDlg, IDC_ADD_LICENSES ), fIsPerServer );
|
|
EnableWindow( GetDlgItem( hwndDlg, IDC_REMOVE_LICENSES ), fIsPerServer );
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: FreeServiceEntry
|
|
//
|
|
// Summary;
|
|
// Free all allocated memory when a service structure is created
|
|
//
|
|
// Aruments;
|
|
// pServ [in] - The Service structure to free
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void FreeServiceEntry( PSERVICEENTRY pServ )
|
|
{
|
|
GlobalFree( pServ->pszService );
|
|
GlobalFree( pServ->pszDisplayName );
|
|
if ( NULL != pServ->pszComputer )
|
|
{
|
|
GlobalFree( pServ->pszComputer );
|
|
}
|
|
GlobalFree( pServ );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: CreateServiceEntry
|
|
//
|
|
// Summary;
|
|
// Using the Service registry key name, allocate a Service structure
|
|
// and setup registry.
|
|
//
|
|
// Arguments;
|
|
// pszComputer [in] - The name of the computer to use (maybe null)
|
|
// pszService [in] - The name of the reg key to use to load or create
|
|
// service from
|
|
// pszDisplayName [in] - The name the user will see, this will only be
|
|
// if the registry does not contain a displayname already
|
|
//
|
|
// Returns: NULL if Error, pointer to allocated Service Structure
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
PSERVICEENTRY CreateServiceEntry( LPCWSTR pszComputer,
|
|
LPCWSTR pszService,
|
|
LPCWSTR pszFamilyDisplayName,
|
|
LPCWSTR pszDisplayName )
|
|
{
|
|
CLicRegLicenseService cLicServKey;
|
|
PSERVICEENTRY pServ = NULL;
|
|
DWORD cchSize = 0;
|
|
LONG lrt;
|
|
|
|
pServ = (PSERVICEENTRY)GlobalAlloc( GPTR, sizeof( SERVICEENTRY ));
|
|
if (pServ)
|
|
{
|
|
cLicServKey.SetService( pszService );
|
|
cLicServKey.Open( pszComputer, TRUE );
|
|
|
|
// load or set defaults
|
|
//
|
|
if (ERROR_SUCCESS != cLicServKey.GetMode( pServ->lm ))
|
|
{
|
|
pServ->lm = LICMODE_UNDEFINED;
|
|
}
|
|
|
|
if (ERROR_SUCCESS != cLicServKey.GetUserLimit( pServ->dwLimit ))
|
|
{
|
|
pServ->dwLimit = PERSERVER_LIMITDEFAULT;
|
|
}
|
|
|
|
//
|
|
// get, set DisplayName
|
|
//
|
|
lrt = cLicServKey.GetDisplayName( NULL, cchSize );
|
|
if (ERROR_SUCCESS == lrt)
|
|
{
|
|
pServ->pszDisplayName = (LPWSTR)GlobalAlloc( GPTR, cchSize * sizeof( WCHAR ) );
|
|
if (pServ->pszDisplayName == NULL)
|
|
{
|
|
goto ErrorCleanup;
|
|
}
|
|
lrt = cLicServKey.GetDisplayName( pServ->pszDisplayName, cchSize );
|
|
}
|
|
|
|
// the GetDisplayName may fail in both the two cases above
|
|
//
|
|
if (ERROR_SUCCESS != lrt)
|
|
{
|
|
GlobalFree( (HGLOBAL)pServ->pszDisplayName );
|
|
cchSize = lstrlen( pszDisplayName ) + 1;
|
|
pServ->pszDisplayName = (LPWSTR)GlobalAlloc( GPTR, cchSize * sizeof( WCHAR ) );
|
|
if (pServ->pszDisplayName == NULL)
|
|
{
|
|
goto ErrorCleanup;
|
|
}
|
|
lstrcpy( pServ->pszDisplayName, pszDisplayName );
|
|
cLicServKey.SetDisplayName( pServ->pszDisplayName );
|
|
pServ->fIsNewProduct = TRUE;
|
|
}
|
|
else
|
|
{
|
|
pServ->fIsNewProduct = FALSE;
|
|
}
|
|
|
|
//
|
|
// get, set FamilyDisplayName
|
|
//
|
|
lrt = cLicServKey.GetFamilyDisplayName( NULL, cchSize );
|
|
if (ERROR_SUCCESS == lrt)
|
|
{
|
|
pServ->pszFamilyDisplayName = (LPWSTR)GlobalAlloc( GPTR, cchSize * sizeof( WCHAR ) );
|
|
if ( pServ->pszFamilyDisplayName == NULL )
|
|
{
|
|
goto ErrorCleanup;
|
|
}
|
|
lrt = cLicServKey.GetFamilyDisplayName( pServ->pszFamilyDisplayName, cchSize );
|
|
}
|
|
|
|
// the GetFamilyDisplayName may fail in both the two cases above
|
|
//
|
|
if (ERROR_SUCCESS != lrt)
|
|
{
|
|
GlobalFree( (HGLOBAL)pServ->pszFamilyDisplayName );
|
|
cchSize = lstrlen( pszFamilyDisplayName ) + 1;
|
|
pServ->pszFamilyDisplayName = (LPWSTR)GlobalAlloc( GPTR, cchSize * sizeof( WCHAR ) );
|
|
|
|
if ( pServ->pszFamilyDisplayName == NULL )
|
|
{
|
|
goto ErrorCleanup;
|
|
}
|
|
lstrcpy( pServ->pszFamilyDisplayName, pszFamilyDisplayName );
|
|
}
|
|
|
|
cchSize = lstrlen( pszService ) + 1;
|
|
pServ->pszService = (LPWSTR)GlobalAlloc( GPTR, cchSize * sizeof( WCHAR ) );
|
|
if (pServ->pszService == NULL)
|
|
{
|
|
goto ErrorCleanup;
|
|
}
|
|
lstrcpy( pServ->pszService, pszService );
|
|
|
|
cLicServKey.Close();
|
|
|
|
if ( NULL == pszComputer )
|
|
{
|
|
pServ->pszComputer = NULL;
|
|
}
|
|
else
|
|
{
|
|
pServ->pszComputer = (LPWSTR)GlobalAlloc( GPTR, sizeof( WCHAR ) * ( 1 + lstrlen( pszComputer ) ) );
|
|
if (pServ->pszComputer == NULL)
|
|
{
|
|
goto ErrorCleanup;
|
|
}
|
|
lstrcpy( pServ->pszComputer, pszComputer );
|
|
}
|
|
}
|
|
return( pServ );
|
|
|
|
ErrorCleanup:
|
|
|
|
|
|
if (pServ) // JonN 5/15/00: PREFIX 112116-112119
|
|
{
|
|
if (pServ->pszDisplayName)
|
|
GlobalFree( (HGLOBAL)pServ->pszDisplayName );
|
|
if (pServ->pszFamilyDisplayName)
|
|
GlobalFree( (HGLOBAL)pServ->pszFamilyDisplayName );
|
|
if (pServ->pszService)
|
|
GlobalFree( (HGLOBAL)pServ->pszService );
|
|
if (pServ->pszComputer)
|
|
GlobalFree( (HGLOBAL)pServ->pszComputer );
|
|
GlobalFree( (HGLOBAL)pServ );
|
|
}
|
|
return ( (PSERVICEENTRY)NULL );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: SaveServiceToReg
|
|
//
|
|
// Summary;
|
|
// Save the given Service structure to the registry
|
|
//
|
|
// Arguments;
|
|
// pServ [in] - Service structure to save
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void SaveServiceToReg( LPCWSTR pszComputer, PSERVICEENTRY pServ )
|
|
{
|
|
CLicRegLicenseService cLicServKey;
|
|
LICENSE_MODE lm;
|
|
|
|
cLicServKey.SetService( pServ->pszService );
|
|
cLicServKey.Open( pszComputer );
|
|
|
|
//
|
|
// if no mode in the registry, set to current selected mode
|
|
//
|
|
if (ERROR_SUCCESS != cLicServKey.GetMode( lm ))
|
|
{
|
|
lm = pServ->lm;
|
|
}
|
|
//
|
|
// if a mode change was made or perseat mode selected,
|
|
// set the change flag so that user is warned on any change
|
|
//
|
|
if ((pServ->lm != lm) ||
|
|
(LICMODE_PERSEAT == pServ->lm) )
|
|
{
|
|
cLicServKey.SetChangeFlag( TRUE );
|
|
}
|
|
else
|
|
{
|
|
// this will not modify change flag if it is
|
|
// present, but will set it to false if it is not
|
|
// present
|
|
cLicServKey.CanChangeMode();
|
|
}
|
|
|
|
DWORD dwLimitInReg;
|
|
|
|
// user limit should be set by CCFAPI32; set only if it's absent
|
|
if ( ERROR_SUCCESS != cLicServKey.GetUserLimit( dwLimitInReg ) )
|
|
{
|
|
cLicServKey.SetUserLimit( pServ->dwLimit );
|
|
}
|
|
|
|
cLicServKey.SetDisplayName( pServ->pszDisplayName );
|
|
cLicServKey.SetFamilyDisplayName( pServ->pszFamilyDisplayName );
|
|
cLicServKey.SetMode( pServ->lm );
|
|
|
|
cLicServKey.Close();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: ServiceLicAgreement
|
|
//
|
|
// Summary;
|
|
// Check the given Service structure for violation
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - hwnd of dialog to use to raise legal voilation dialog
|
|
// pServ [in] - Service structure to check
|
|
// pszComputer [in] - computer to work with
|
|
// pszHelpFile [in] - helpfile for dialogs help button
|
|
// pszPerSeatHelpContext [in] - helpcontext for PerSeat dialog help button
|
|
// pszPerServerHelpContext [in] - helpcontext for PerServer dialog help button
|
|
//
|
|
// Return: FALSE if agreement was not acceptable
|
|
// TRUE if agreement was accepted
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
BOOL ServiceLicAgreement( HWND hwndDlg,
|
|
PSERVICEENTRY pServ,
|
|
LPCWSTR pszComputer,
|
|
LPCWSTR pszHelpFile,
|
|
DWORD dwPerSeatHelpContext,
|
|
DWORD dwPerServerHelpContext )
|
|
{
|
|
CLicRegLicenseService cLicServKey;
|
|
LICENSE_MODE lm;
|
|
DWORD dwLimit = pServ->dwLimit;
|
|
BOOL frt = TRUE;
|
|
BOOL fRaiseAgreement = TRUE;
|
|
|
|
cLicServKey.SetService( pServ->pszService );
|
|
if (ERROR_SUCCESS == cLicServKey.Open( pszComputer, FALSE ))
|
|
{
|
|
|
|
cLicServKey.GetMode( lm );
|
|
cLicServKey.GetUserLimit( dwLimit );
|
|
|
|
// check for changes
|
|
if ( !( pServ->lm != lm ||
|
|
(LICMODE_PERSERVER == pServ->lm &&
|
|
dwLimit != pServ->dwLimit) ) )
|
|
{
|
|
fRaiseAgreement = FALSE;
|
|
}
|
|
cLicServKey.Close();
|
|
}
|
|
|
|
if (fRaiseAgreement)
|
|
{
|
|
if (LICMODE_PERSEAT == pServ->lm)
|
|
{
|
|
frt = PerSeatAgreementDialog( hwndDlg,
|
|
pServ->pszDisplayName,
|
|
pszHelpFile,
|
|
dwPerSeatHelpContext );
|
|
}
|
|
else
|
|
{
|
|
// special case FilePrint and zero concurrent users
|
|
//
|
|
if ( 0 == lstrcmp( pServ->pszService, FILEPRINT_SERVICE_REG_KEY ) &&
|
|
(0 == pServ->dwLimit))
|
|
{
|
|
frt = ServerAppAgreementDialog( hwndDlg,
|
|
pszHelpFile,
|
|
LICCPA_HELPCONTEXTSERVERAPP );
|
|
}
|
|
else
|
|
{
|
|
// find the limit has changed but was this invoked
|
|
// by adding more licenses if so the user was already warned
|
|
|
|
if( !g_fWarned )
|
|
{
|
|
frt = PerServerAgreementDialog( hwndDlg,
|
|
pServ->pszDisplayName,
|
|
dwLimit , //pServ->dwLimit,
|
|
pszHelpFile,
|
|
dwPerServerHelpContext );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return( frt );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: ServiceViolation
|
|
//
|
|
// Summary;
|
|
// Check the given Service structure for violation
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - hwnd of dialog to use to raise legal voilation dialog
|
|
// pszComputer [in] - the name of the computer to work on
|
|
// pServ [in] - Service structure to check
|
|
//
|
|
//
|
|
// Return: FALSE if violation not made
|
|
// TRUE if violation was made
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
BOOL ServiceViolation( HWND hwndDlg, LPCWSTR pszComputer, PSERVICEENTRY pServ )
|
|
{
|
|
CLicRegLicenseService cLicServKey;
|
|
LICENSE_MODE lm;
|
|
DWORD dwLimit;
|
|
BOOL frt = FALSE;
|
|
|
|
cLicServKey.SetService( pServ->pszService );
|
|
if (ERROR_SUCCESS == cLicServKey.Open( pszComputer, FALSE ))
|
|
{
|
|
cLicServKey.GetMode( lm );
|
|
|
|
// check for changes
|
|
if ( (pServ->lm != lm) && !cLicServKey.CanChangeMode() )
|
|
{
|
|
frt = LicViolationDialog( hwndDlg );
|
|
}
|
|
cLicServKey.Close();
|
|
}
|
|
return( frt );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: EditInvalidDlg
|
|
//
|
|
// Summary;
|
|
// Display Dialog when user count edit control value is invalid
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - hwnd of dialog
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void EditInvalidDlg( HWND hwndDlg )
|
|
{
|
|
HWND hwndCount = GetDlgItem( hwndDlg, IDC_USERCOUNT);
|
|
WCHAR szTitle[TEMPSTR_SIZE];
|
|
WCHAR szText[LTEMPSTR_SIZE];
|
|
WCHAR szTemp[LTEMPSTR_SIZE];
|
|
|
|
MessageBeep( MB_VALUELIMIT );
|
|
|
|
LoadString(g_hinst, IDS_CPCAPTION, szTitle, TEMPSTR_SIZE);
|
|
LoadString(g_hinst, IDS_INVALIDUSERCOUNT, szTemp, LTEMPSTR_SIZE);
|
|
wsprintf( szText, szTemp, PERSERVER_MIN, PERSERVER_MAX );
|
|
MessageBox( hwndDlg, szText, szTitle, MB_OK | MB_ICONINFORMATION );
|
|
|
|
// also set focus to edit and select all
|
|
SetFocus( hwndCount );
|
|
SendMessage( hwndCount, EM_SETSEL, 0, -1 );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: EditValidate
|
|
//
|
|
// Summary;
|
|
// Handle when the value within the user count edit control changes
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - hwnd of dialog
|
|
// pserv [in] - currently selected service
|
|
//
|
|
// Return: FALSE if Edit Value is not valid, TRUE if it is
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
BOOL EditValidate( HWND hwndDlg, PSERVICEENTRY pServ )
|
|
{
|
|
BOOL fTranslated;
|
|
UINT nValue;
|
|
BOOL fValid = TRUE;
|
|
|
|
// only do this if in PerServer mode
|
|
//
|
|
if (LICMODE_PERSERVER == pServ->lm)
|
|
{
|
|
fValid = FALSE;
|
|
nValue = GetDlgItemInt( hwndDlg, IDC_USERCOUNT, &fTranslated, FALSE );
|
|
|
|
if (fTranslated)
|
|
{
|
|
if (VALIDUSERCOUNT( nValue))
|
|
{
|
|
pServ->dwLimit = nValue;
|
|
fValid = TRUE;
|
|
}
|
|
}
|
|
}
|
|
return( fValid );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnEditChange
|
|
//
|
|
// Summary;
|
|
// Handle when the value within the user count edit control changes
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - hwnd of dialog
|
|
// pserv [in] - currently selected service
|
|
//
|
|
// History;
|
|
// Mar-06-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void OnEditChange( HWND hwndDlg, HWND hwndCount, PSERVICEENTRY pServ )
|
|
{
|
|
BOOL fTranslated;
|
|
UINT nValue;
|
|
BOOL fValid = TRUE;
|
|
BOOL fModified = FALSE;
|
|
|
|
// only do this if in PerServer mode
|
|
//
|
|
if (LICMODE_PERSERVER == pServ->lm)
|
|
{
|
|
fValid = FALSE;
|
|
nValue = GetDlgItemInt( hwndDlg, IDC_USERCOUNT, &fTranslated, FALSE );
|
|
|
|
if (fTranslated)
|
|
{
|
|
#pragma warning(push)
|
|
#pragma warning(disable: 4296) // C4296: '>' : expression is always false
|
|
if (PERSERVER_MIN > nValue)
|
|
{
|
|
nValue = PERSERVER_MIN;
|
|
fModified = TRUE;
|
|
}
|
|
else if (PERSERVER_MAX < nValue)
|
|
{
|
|
nValue = PERSERVER_MAX;
|
|
fModified = TRUE;
|
|
}
|
|
#pragma warning(pop)
|
|
|
|
pServ->dwLimit = nValue;
|
|
}
|
|
else
|
|
{
|
|
// reset to last value
|
|
nValue = pServ->dwLimit;
|
|
fModified = TRUE;
|
|
}
|
|
|
|
if (fModified)
|
|
{
|
|
SetDlgItemInt( hwndDlg, IDC_USERCOUNT, nValue, FALSE );
|
|
SetFocus( hwndCount );
|
|
SendMessage( hwndCount, EM_SETSEL, 0, -1 );
|
|
MessageBeep( MB_VALUELIMIT );
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnCpaClose
|
|
//
|
|
// Summary;
|
|
// Do work needed when the Control Panel applet is closed.
|
|
// Free all Service structures alloced and possible save.
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - Dialog close was requested on
|
|
// fSave [in] - Save Services to Registry
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void OnCpaClose( HWND hwndDlg, BOOL fSave )
|
|
{
|
|
WCHAR szText[TEMPSTR_SIZE];
|
|
HWND hwndService = GetDlgItem( hwndDlg, IDC_SERVICES);
|
|
LRESULT cItems = SendMessage( hwndService, CB_GETCOUNT, 0, 0 ) - 1;
|
|
LONG_PTR iItem;
|
|
PSERVICEENTRY pServ;
|
|
LRESULT iSel;
|
|
|
|
iSel = SendMessage( hwndService, CB_GETCURSEL, 0, 0 );
|
|
pServ = (PSERVICEENTRY)SendMessage( hwndService, CB_GETITEMDATA, iSel, 0 );
|
|
|
|
if ( fSave &&
|
|
(pServ->lm == LICMODE_PERSERVER) &&
|
|
!EditValidate( hwndDlg, pServ ) )
|
|
{
|
|
EditInvalidDlg( hwndDlg );
|
|
}
|
|
else
|
|
{
|
|
BOOL fCompleted = TRUE;
|
|
// loop and check for agreement changes (only needed if saving)
|
|
//
|
|
if (fSave)
|
|
{
|
|
for (iItem = cItems; iItem >= 0; iItem--)
|
|
{
|
|
pServ = (PSERVICEENTRY)SendMessage( hwndService, CB_GETITEMDATA, iItem, 0 );
|
|
if (ServiceLicAgreement( hwndDlg,
|
|
pServ,
|
|
NULL,
|
|
LICCPA_HELPFILE,
|
|
LICCPA_HELPCONTEXTPERSEAT,
|
|
LICCPA_HELPCONTEXTPERSERVER ))
|
|
{
|
|
SaveServiceToReg( NULL, pServ );
|
|
}
|
|
else
|
|
{
|
|
fCompleted = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (fCompleted)
|
|
{
|
|
// loop and free service entries
|
|
//
|
|
for (iItem = cItems; iItem >= 0; iItem--)
|
|
{
|
|
pServ = (PSERVICEENTRY)SendMessage( hwndService, CB_GETITEMDATA, iItem, 0 );
|
|
FreeServiceEntry( pServ );
|
|
}
|
|
EndDialog( hwndDlg, fSave );
|
|
}
|
|
else
|
|
{
|
|
// set combo box to last canceled entry
|
|
SendMessage( hwndService, CB_SETCURSEL, iItem, 0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnSetupClose
|
|
//
|
|
// Summary;
|
|
// Do work needed when the Setup Dialog is closed.
|
|
// Free the service structure and possible save it
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - hwnd of dialog this close was requested on
|
|
// fSave [in] - Save service to registry
|
|
// pServ [in] - the service structure to work with
|
|
// psdParams [in] - setup dlg params for help contexts and files
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void OnSetupClose( HWND hwndDlg,
|
|
BOOL fSave,
|
|
PSERVICEENTRY pServ,
|
|
PSETUPDLGPARAM psdParams )
|
|
{
|
|
if ( fSave &&
|
|
(pServ->lm == LICMODE_PERSERVER) &&
|
|
!EditValidate( hwndDlg, pServ ) )
|
|
{
|
|
EditInvalidDlg( hwndDlg );
|
|
}
|
|
else
|
|
{
|
|
BOOL fCompleted = TRUE;
|
|
|
|
if (fSave)
|
|
{
|
|
if (ServiceLicAgreement( hwndDlg,
|
|
pServ,
|
|
psdParams->pszComputer,
|
|
psdParams->pszHelpFile,
|
|
psdParams->dwHCPerSeat,
|
|
psdParams->dwHCPerServer ))
|
|
{
|
|
SaveServiceToReg( psdParams->pszComputer, pServ );
|
|
|
|
// register service at enterprise server
|
|
ServiceRegister( psdParams->pszComputer,
|
|
psdParams->pszFamilyDisplayName,
|
|
psdParams->pszDisplayName );
|
|
}
|
|
else
|
|
{
|
|
fCompleted = FALSE;
|
|
}
|
|
}
|
|
else if ( pServ->fIsNewProduct )
|
|
{
|
|
// new product, but we're aborting
|
|
// make sure we don't leave any scraps behind
|
|
DWORD winError;
|
|
HKEY hkeyInfo;
|
|
|
|
winError = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
|
|
TEXT( "System\\CurrentControlSet\\Services\\LicenseInfo" ),
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hkeyInfo );
|
|
|
|
if ( ERROR_SUCCESS == winError )
|
|
{
|
|
RegDeleteKey( hkeyInfo, pServ->pszService );
|
|
RegCloseKey( hkeyInfo );
|
|
}
|
|
}
|
|
|
|
if (fCompleted)
|
|
{
|
|
FreeServiceEntry( pServ );
|
|
EndDialog( hwndDlg, fSave );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnSetServiceMode
|
|
//
|
|
// Summary;
|
|
// Handle the users request to change service mode
|
|
//
|
|
// Aruments;
|
|
// hwndDlg [in] - hwnd of dialog
|
|
// pszComputer [in] - compter to confirm mode change against
|
|
// pServ [in] - The service the request was made agianst
|
|
// idCtrl [in] - the control id that was pressed to make this request
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void OnSetServiceMode( HWND hwndDlg, LPCWSTR pszComputer, PSERVICEENTRY pServ, WORD idCtrl )
|
|
{
|
|
LICENSE_MODE lmOld = pServ->lm;
|
|
BOOL fChanged = FALSE;
|
|
|
|
if (idCtrl == IDC_PERSEAT)
|
|
{
|
|
fChanged = (pServ->lm != LICMODE_PERSEAT);
|
|
pServ->lm = LICMODE_PERSEAT;
|
|
}
|
|
else
|
|
{
|
|
fChanged = (pServ->lm != LICMODE_PERSERVER);
|
|
pServ->lm = LICMODE_PERSERVER;
|
|
}
|
|
|
|
//
|
|
// only check for violation the first time the user switches
|
|
//
|
|
if (fChanged && ServiceViolation( hwndDlg, pszComputer, pServ ))
|
|
{
|
|
pServ->lm = lmOld;
|
|
InitDialogForService( hwndDlg, pServ );
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnSpinButton
|
|
//
|
|
// Summary;
|
|
// Handle the events from user interactions with the spin control
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - hwnd of dialog
|
|
// wAction [in] - spin control event
|
|
// pServ [in] - current service selected
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void OnSpinButton( HWND hwndDlg, WORD wAction, PSERVICEENTRY pServ )
|
|
{
|
|
HWND hwndCount = GetDlgItem( hwndDlg, IDC_USERCOUNT);
|
|
INT nValue;
|
|
BOOL fValidAction = TRUE;
|
|
|
|
nValue = pServ->dwLimit;
|
|
|
|
switch (wAction)
|
|
{
|
|
case SB_LINEUP:
|
|
nValue++;
|
|
break;
|
|
|
|
case SB_LINEDOWN:
|
|
nValue--;
|
|
break;
|
|
|
|
case SB_PAGEUP:
|
|
nValue += PERSERVER_PAGE;
|
|
break;
|
|
|
|
case SB_PAGEDOWN:
|
|
nValue -= PERSERVER_PAGE;
|
|
break;
|
|
|
|
case SB_TOP:
|
|
nValue = PERSERVER_MAX;
|
|
break;
|
|
|
|
case SB_BOTTOM:
|
|
nValue = PERSERVER_MIN;
|
|
break;
|
|
|
|
default:
|
|
fValidAction = FALSE;
|
|
break;
|
|
}
|
|
if (fValidAction)
|
|
{
|
|
nValue = max( PERSERVER_MIN, nValue );
|
|
nValue = min( PERSERVER_MAX, nValue );
|
|
|
|
if (pServ->dwLimit == (DWORD)nValue)
|
|
{
|
|
MessageBeep( MB_VALUELIMIT );
|
|
}
|
|
else
|
|
{
|
|
pServ->dwLimit = nValue;
|
|
SetDlgItemInt( hwndDlg, IDC_USERCOUNT, pServ->dwLimit, FALSE );
|
|
}
|
|
SetFocus( hwndCount );
|
|
SendMessage( hwndCount, EM_SETSEL, 0, -1 );
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: UpdatePerServerLicenses
|
|
//
|
|
// Summary;
|
|
// Update the number of per server licenses displayed in the
|
|
// dialog with the proper value.
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - hwnd of dialog
|
|
// pServ [in] - current service selected
|
|
//
|
|
// History;
|
|
// Dec-19-95 JeffParh Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
static void UpdatePerServerLicenses( HWND hwndDlg, PSERVICEENTRY pServ )
|
|
{
|
|
LLS_HANDLE hLls;
|
|
DWORD dwError;
|
|
BOOL fIsSecure;
|
|
BOOL fUseRegistry;
|
|
|
|
fUseRegistry = TRUE;
|
|
|
|
dwError = LlsConnect( pServ->pszComputer, &hLls );
|
|
|
|
if ( ERROR_SUCCESS == dwError )
|
|
{
|
|
if ( pServ->fIsNewProduct )
|
|
{
|
|
dwError = LlsProductSecurityGet( hLls, pServ->pszDisplayName, &fIsSecure );
|
|
|
|
if ( ( ERROR_SUCCESS == dwError )
|
|
&& fIsSecure )
|
|
{
|
|
dwError = LlsProductLicensesGet( hLls, pServ->pszDisplayName, LLS_LICENSE_MODE_PER_SERVER, &pServ->dwLimit );
|
|
|
|
if ( ERROR_SUCCESS == dwError )
|
|
{
|
|
fUseRegistry = FALSE;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dwError = LlsProductLicensesGet( hLls, pServ->pszDisplayName, LLS_LICENSE_MODE_PER_SERVER, &pServ->dwLimit );
|
|
|
|
if ( ERROR_SUCCESS == dwError )
|
|
{
|
|
fUseRegistry = FALSE;
|
|
}
|
|
}
|
|
|
|
LlsClose( hLls );
|
|
}
|
|
|
|
if ( fUseRegistry )
|
|
{
|
|
CLicRegLicenseService cLicServKey;
|
|
|
|
cLicServKey.SetService( pServ->pszService );
|
|
cLicServKey.Open( NULL, FALSE );
|
|
|
|
cLicServKey.GetUserLimit( pServ->dwLimit );
|
|
|
|
cLicServKey.Close();
|
|
}
|
|
|
|
SetDlgItemInt( hwndDlg, IDC_USERCOUNT, pServ->dwLimit, FALSE );
|
|
UpdateWindow( hwndDlg );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnAddLicenses
|
|
//
|
|
// Summary;
|
|
// Handle the BN_CLICKED message from the Add Licenses button.
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - hwnd of dialog
|
|
// pServ [in] - current service selected
|
|
//
|
|
// History;
|
|
// Dec-19-95 JeffParh Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void OnAddLicenses( HWND hwndDlg, PSERVICEENTRY pServ )
|
|
{
|
|
LPSTR pszAscProductName;
|
|
LPSTR pszAscServerName = NULL;
|
|
CHAR szAscServerName[ 3 + MAX_PATH ];
|
|
|
|
pszAscProductName = (LPSTR) LocalAlloc( LPTR, 1 + lstrlen(pServ->pszDisplayName) );
|
|
|
|
if ( NULL != pszAscProductName )
|
|
{
|
|
wsprintfA( pszAscProductName, "%ls", pServ->pszDisplayName );
|
|
if ( NULL != pServ->pszComputer )
|
|
{
|
|
wsprintfA( szAscServerName, "%ls", pServ->pszComputer );
|
|
pszAscServerName = szAscServerName;
|
|
}
|
|
|
|
CCFCertificateEnterUI( hwndDlg, pszAscServerName, pszAscProductName, "Microsoft", CCF_ENTER_FLAG_PER_SERVER_ONLY, NULL );
|
|
UpdatePerServerLicenses( hwndDlg, pServ );
|
|
|
|
LocalFree( pszAscProductName );
|
|
|
|
g_fWarned = TRUE;
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnRemoveLicenses
|
|
//
|
|
// Summary;
|
|
// Handle the BN_CLICKED message from the Remove Licenses button.
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - hwnd of dialog
|
|
// pServ [in] - current service selected
|
|
//
|
|
// History;
|
|
// Dec-19-95 JeffParh Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void OnRemoveLicenses( HWND hwndDlg, PSERVICEENTRY pServ )
|
|
{
|
|
LPSTR pszAscProductName;
|
|
LPSTR pszAscServerName = NULL;
|
|
CHAR szAscServerName[ 3 + MAX_PATH ];
|
|
|
|
pszAscProductName = (LPSTR) LocalAlloc( LMEM_FIXED, 1 + lstrlen(pServ->pszDisplayName) );
|
|
|
|
if ( NULL != pszAscProductName )
|
|
{
|
|
wsprintfA( pszAscProductName, "%ls", pServ->pszDisplayName );
|
|
if ( NULL != pServ->pszComputer )
|
|
{
|
|
wsprintfA( szAscServerName, "%ls", pServ->pszComputer );
|
|
pszAscServerName = szAscServerName;
|
|
}
|
|
|
|
CCFCertificateRemoveUI( hwndDlg, pszAscServerName, pszAscProductName, "Microsoft", NULL, NULL );
|
|
UpdatePerServerLicenses( hwndDlg, pServ );
|
|
|
|
LocalFree( pszAscProductName );
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnSetupInitDialog
|
|
//
|
|
// Summary;
|
|
// Handle the initialization of the Setup Dialog
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - the dialog to initialize
|
|
// pszParams [in] - the dialog params to use to initialize
|
|
// pServ [out] - the current service
|
|
//
|
|
// Return;
|
|
// TRUE if succesful, otherwise false
|
|
//
|
|
// Notes;
|
|
//
|
|
// History;
|
|
// Nov-11-1994 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
BOOL OnSetupInitDialog( HWND hwndDlg,
|
|
PSETUPDLGPARAM psdParams,
|
|
PSERVICEENTRY& pServ )
|
|
{
|
|
BOOL frt = TRUE;
|
|
CLicRegLicense cLicKey;
|
|
LONG lrt;
|
|
INT nrt;
|
|
BOOL fNew;
|
|
|
|
do
|
|
{
|
|
CenterDialogToScreen( hwndDlg );
|
|
|
|
lrt = cLicKey.Open( fNew, psdParams->pszComputer );
|
|
nrt = AccessOk( hwndDlg, lrt, FALSE );
|
|
if (ERR_NONE != nrt)
|
|
{
|
|
EndDialog( hwndDlg, nrt );
|
|
frt = FALSE;
|
|
break;
|
|
}
|
|
|
|
pServ = CreateServiceEntry( psdParams->pszComputer,
|
|
psdParams->pszService,
|
|
psdParams->pszFamilyDisplayName,
|
|
psdParams->pszDisplayName );
|
|
if (pServ == NULL)
|
|
{
|
|
LowMemoryDlg();
|
|
EndDialog( hwndDlg, -2 );
|
|
break;
|
|
}
|
|
if (NULL == psdParams->pszHelpFile)
|
|
{
|
|
HWND hwndHelp = GetDlgItem( hwndDlg, IDC_BUTTONHELP );
|
|
// remove the help button
|
|
EnableWindow( hwndHelp, FALSE );
|
|
ShowWindow( hwndHelp, SW_HIDE );
|
|
}
|
|
if (psdParams->fNoExit)
|
|
{
|
|
HWND hwndExit = GetDlgItem( hwndDlg, IDCANCEL );
|
|
// remove the ExitSetup button
|
|
EnableWindow( hwndExit, FALSE );
|
|
ShowWindow( hwndExit, SW_HIDE );
|
|
}
|
|
|
|
// set char limit on edit box
|
|
InitUserEdit( hwndDlg );
|
|
|
|
// make sure title static text is set for this service
|
|
InitTitleText( hwndDlg, pServ );
|
|
|
|
// defaul to PerServer with Focus on edit
|
|
pServ->lm = LICMODE_PERSERVER;
|
|
|
|
// change default for setup only
|
|
// pServ->dwLimit = 1;
|
|
|
|
InitDialogForService( hwndDlg, pServ );
|
|
|
|
SetFocus( GetDlgItem( hwndDlg, IDC_PERSERVER ) );
|
|
} while (FALSE); // used to remove gotos
|
|
|
|
return( frt );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnCpaInitDialog
|
|
//
|
|
// Summary;
|
|
// Handle the initialization of the Control Panel Applet Dialog
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - the dialog to initialize
|
|
// fEnableReplication [in] -
|
|
// iSel [out] - the current service selected
|
|
// pServ [out] - the current service
|
|
//
|
|
// Return;
|
|
// TRUE if succesful, otherwise false
|
|
//
|
|
// Notes;
|
|
//
|
|
// History;
|
|
// Nov-11-1994 MikeMi Created
|
|
// Mar-08-1995 MikeMi Added removal of Replication button
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
BOOL OnCpaInitDialog( HWND hwndDlg,
|
|
BOOL fEnableReplication,
|
|
LONG_PTR& iSel,
|
|
PSERVICEENTRY& pServ )
|
|
{
|
|
BOOL frt = FALSE;
|
|
CLicRegLicense cLicKey;
|
|
LONG lrt;
|
|
INT nrt;
|
|
BOOL fNew;
|
|
|
|
lrt = cLicKey.Open( fNew );
|
|
nrt = AccessOk( hwndDlg, lrt, TRUE );
|
|
if (ERR_NONE == nrt)
|
|
{
|
|
DWORD i = 0;
|
|
WCHAR szText[TEMPSTR_SIZE];
|
|
DWORD cchText = TEMPSTR_SIZE;
|
|
HWND hwndService = GetDlgItem( hwndDlg, IDC_SERVICES);
|
|
LONG_PTR lIndex;
|
|
|
|
CenterDialogToScreen( hwndDlg );
|
|
|
|
//
|
|
// remove replication button if product used on pre 3.51
|
|
//
|
|
if (!fEnableReplication)
|
|
{
|
|
HWND hwndRep = GetDlgItem( hwndDlg, IDC_CONFIGURE );
|
|
|
|
EnableWindow( hwndRep, FALSE );
|
|
ShowWindow( hwndRep, SW_HIDE );
|
|
}
|
|
|
|
// load the service names from the registry into combo box
|
|
// Create service local state structures as we go
|
|
//
|
|
while (ERROR_SUCCESS == cLicKey.EnumService(i, szText, cchText ))
|
|
{
|
|
|
|
pServ = CreateServiceEntry( NULL, szText, L"<unknown>", L"<undefined>" );
|
|
if (pServ == NULL)
|
|
{
|
|
LowMemoryDlg();
|
|
EndDialog( hwndDlg, -2 );
|
|
return( TRUE );
|
|
}
|
|
lIndex = SendMessage( hwndService, CB_ADDSTRING, 0, (LPARAM)pServ->pszDisplayName );
|
|
SendMessage( hwndService, CB_SETITEMDATA, lIndex, (LPARAM)pServ );
|
|
i++;
|
|
cchText = TEMPSTR_SIZE;
|
|
}
|
|
cLicKey.Close();
|
|
|
|
if (0 == i)
|
|
{
|
|
// no services installed
|
|
//
|
|
WCHAR szText[TEMPSTR_SIZE];
|
|
WCHAR szTitle[TEMPSTR_SIZE];
|
|
|
|
LoadString(g_hinst, IDS_CPCAPTION, szTitle, TEMPSTR_SIZE);
|
|
LoadString(g_hinst, IDS_NOSERVICES, szText, TEMPSTR_SIZE);
|
|
MessageBox(hwndDlg, szText, szTitle, MB_OK|MB_ICONINFORMATION);
|
|
|
|
frt = FALSE;
|
|
}
|
|
else
|
|
{
|
|
// make sure a service is selected and update dialog
|
|
iSel = SendMessage( hwndService, CB_GETCURSEL, 0, 0 );
|
|
|
|
if (CB_ERR == iSel)
|
|
{
|
|
iSel = 0;
|
|
SendMessage( hwndService, CB_SETCURSEL, iSel, 0 );
|
|
}
|
|
pServ = (PSERVICEENTRY)SendMessage( hwndService, CB_GETITEMDATA, iSel, 0 );
|
|
|
|
// Set edit text chars limit
|
|
InitUserEdit( hwndDlg );
|
|
|
|
InitDialogForService( hwndDlg, pServ );
|
|
frt = TRUE;
|
|
}
|
|
}
|
|
if (!frt)
|
|
{
|
|
EndDialog( hwndDlg, -1 );
|
|
}
|
|
return( frt );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: dlgprocLICCPA
|
|
//
|
|
// Summary;
|
|
// The dialog procedure for the main Control Panel Applet Dialog
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - handle of Dialog window
|
|
// uMsg [in] - message
|
|
// lParam1 [in] - first message parameter
|
|
// lParam2 [in] - second message parameter
|
|
//
|
|
// Return;
|
|
// message dependant
|
|
//
|
|
// Notes;
|
|
//
|
|
// History;
|
|
// Nov-11-1994 MikeMi Created
|
|
// Mar-08-1995 MikeMi Added removal of Replication button
|
|
// from WM_INITDIALOG
|
|
// Mar-14-95 MikeMi Added F1 PWM_HELP message
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
INT_PTR CALLBACK dlgprocLICCPA( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
|
{
|
|
BOOL frt = FALSE;
|
|
static PSERVICEENTRY pServ = NULL;
|
|
static LONG_PTR iSel = 0;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
OnCpaInitDialog( hwndDlg, (BOOL)lParam , iSel, pServ );
|
|
return( TRUE ); // use default keyboard focus
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (HIWORD( wParam ))
|
|
{
|
|
case BN_CLICKED:
|
|
switch (LOWORD( wParam ))
|
|
{
|
|
case IDOK:
|
|
frt = TRUE; // use as save flag
|
|
// intentional no break
|
|
|
|
case IDCANCEL:
|
|
OnCpaClose( hwndDlg, frt );
|
|
frt = FALSE;
|
|
break;
|
|
|
|
case IDC_PERSEAT:
|
|
case IDC_PERSERVER:
|
|
OnSetServiceMode( hwndDlg, NULL, pServ, LOWORD(wParam) );
|
|
break;
|
|
|
|
case IDC_CONFIGURE:
|
|
DialogBox(g_hinst,
|
|
MAKEINTRESOURCE(IDD_CPADLG_LCACONF),
|
|
hwndDlg,
|
|
(DLGPROC)dlgprocLICCPACONFIG );
|
|
break;
|
|
|
|
case IDC_BUTTONHELP:
|
|
PostMessage( hwndDlg, PWM_HELP, 0, 0 );
|
|
break;
|
|
|
|
case IDC_ADD_LICENSES:
|
|
OnAddLicenses( hwndDlg, pServ );
|
|
break;
|
|
|
|
case IDC_REMOVE_LICENSES:
|
|
OnRemoveLicenses( hwndDlg, pServ );
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case CBN_SELENDOK:
|
|
if ((LICMODE_PERSERVER == pServ->lm) &&
|
|
!EditValidate( hwndDlg, pServ ))
|
|
{
|
|
// reset back to original
|
|
SendMessage( (HWND)lParam, CB_SETCURSEL, iSel, 0 );
|
|
EditInvalidDlg( hwndDlg );
|
|
}
|
|
else
|
|
{
|
|
iSel = SendMessage( (HWND)lParam, CB_GETCURSEL, 0, 0 );
|
|
pServ = (PSERVICEENTRY)SendMessage( (HWND)lParam, CB_GETITEMDATA, iSel, 0 );
|
|
InitDialogForService( hwndDlg, pServ );
|
|
}
|
|
break;
|
|
|
|
case EN_UPDATE:
|
|
if (IDC_USERCOUNT == LOWORD(wParam))
|
|
{
|
|
OnEditChange( hwndDlg, (HWND)(lParam), pServ );
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
case WM_VSCROLL:
|
|
OnSpinButton( hwndDlg, LOWORD( wParam ), pServ );
|
|
break;
|
|
|
|
default:
|
|
if (PWM_HELP == uMsg)
|
|
{
|
|
::HtmlHelp( hwndDlg, LICCPA_HTMLHELPFILE, HH_DISPLAY_TOPIC,0);
|
|
}
|
|
break;
|
|
}
|
|
return( frt );
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: dlgprocLICSETUP
|
|
//
|
|
// Summary;
|
|
// The dialog procedure for the Setup entry point Dialog
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - handle of Dialog window
|
|
// uMsg [in] - message
|
|
// lParam1 [in] - first message parameter
|
|
// lParam2 [in] - second message parameter
|
|
//
|
|
// Return;
|
|
// message dependant
|
|
//
|
|
// Notes;
|
|
//
|
|
// History;
|
|
// Nov-11-1994 MikeMi Created
|
|
// Mar-14-95 MikeMi Added F1 PWM_HELP message
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
INT_PTR CALLBACK dlgprocLICSETUP( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
|
{
|
|
BOOL frt = FALSE;
|
|
static PSERVICEENTRY pServ;
|
|
static PSETUPDLGPARAM psdParams;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
psdParams = (PSETUPDLGPARAM)lParam;
|
|
OnSetupInitDialog( hwndDlg, psdParams, pServ );
|
|
frt = FALSE; // we set the focus
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (HIWORD( wParam ))
|
|
{
|
|
case BN_CLICKED:
|
|
switch (LOWORD( wParam ))
|
|
{
|
|
case IDOK:
|
|
frt = TRUE; // use as save flag
|
|
// intentional no break
|
|
|
|
case IDCANCEL:
|
|
OnSetupClose( hwndDlg, frt, pServ, psdParams );
|
|
frt = FALSE;
|
|
break;
|
|
|
|
case IDC_PERSEAT:
|
|
case IDC_PERSERVER:
|
|
OnSetServiceMode( hwndDlg, psdParams->pszComputer, pServ, LOWORD(wParam) );
|
|
break;
|
|
|
|
case IDC_BUTTONHELP:
|
|
PostMessage( hwndDlg, PWM_HELP, 0, 0 );
|
|
break;
|
|
|
|
case IDC_ADD_LICENSES:
|
|
OnAddLicenses( hwndDlg, pServ );
|
|
break;
|
|
|
|
case IDC_REMOVE_LICENSES:
|
|
OnRemoveLicenses( hwndDlg, pServ );
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case EN_UPDATE:
|
|
if (IDC_USERCOUNT == LOWORD(wParam))
|
|
{
|
|
OnEditChange( hwndDlg, (HWND)(lParam), pServ );
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_VSCROLL:
|
|
OnSpinButton( hwndDlg, LOWORD( wParam ), pServ );
|
|
break;
|
|
|
|
default:
|
|
if (PWM_HELP == uMsg)
|
|
{
|
|
::HtmlHelp( hwndDlg, LICCPA_HTMLHELPFILE, HH_DISPLAY_TOPIC,0);
|
|
}
|
|
break;
|
|
}
|
|
return( frt );
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnPerSeatInitDialog
|
|
//
|
|
// Summary;
|
|
// Handle the initialization of the PerSeat only Setup Dialog
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - the dialog to initialize
|
|
// psdParams [in] - used for the displayname and service name
|
|
//
|
|
// Notes;
|
|
//
|
|
// History;
|
|
// Dec-08-1994 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void OnPerSeatInitDialog( HWND hwndDlg, PSETUPDLGPARAM psdParams )
|
|
{
|
|
HWND hwndOK = GetDlgItem( hwndDlg, IDOK );
|
|
CLicRegLicense cLicKey;
|
|
BOOL fNew;
|
|
LONG lrt;
|
|
INT nrt;
|
|
|
|
lrt = cLicKey.Open( fNew, psdParams->pszComputer );
|
|
nrt = AccessOk( NULL, lrt, FALSE );
|
|
if (ERR_NONE == nrt)
|
|
{
|
|
CenterDialogToScreen( hwndDlg );
|
|
|
|
InitStaticWithService( hwndDlg, IDC_STATICTITLE, psdParams->pszDisplayName );
|
|
InitStaticWithService2( hwndDlg, IDC_STATICINFO, psdParams->pszDisplayName );
|
|
|
|
// disable OK button at start!
|
|
EnableWindow( hwndOK, FALSE );
|
|
|
|
// if help is not defined, remove the button
|
|
if (NULL == psdParams->pszHelpFile)
|
|
{
|
|
HWND hwndHelp = GetDlgItem( hwndDlg, IDC_BUTTONHELP );
|
|
|
|
EnableWindow( hwndHelp, FALSE );
|
|
ShowWindow( hwndHelp, SW_HIDE );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
EndDialog( hwndDlg, nrt );
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnPerSeatSetupClose
|
|
//
|
|
// Summary;
|
|
// Do work needed when the Setup Dialog is closed.
|
|
// Save to Reg the Service entry.
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - hwnd of dialog this close was requested on
|
|
// fSave [in] - Save service to registry
|
|
// psdParams [in] - used for the service name and displayname
|
|
//
|
|
// History;
|
|
// Nov-30-94 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void OnPerSeatSetupClose( HWND hwndDlg, BOOL fSave, PSETUPDLGPARAM psdParams )
|
|
{
|
|
int nrt = fSave;
|
|
|
|
if (fSave)
|
|
{
|
|
CLicRegLicenseService cLicServKey;
|
|
|
|
cLicServKey.SetService( psdParams->pszService );
|
|
cLicServKey.Open( psdParams->pszComputer );
|
|
|
|
// configure license rule of one change from PerServer to PerSeat
|
|
//
|
|
cLicServKey.SetChangeFlag( TRUE );
|
|
|
|
cLicServKey.SetUserLimit( 0 );
|
|
cLicServKey.SetDisplayName( psdParams->pszDisplayName );
|
|
cLicServKey.SetFamilyDisplayName( psdParams->pszFamilyDisplayName );
|
|
cLicServKey.SetMode( LICMODE_PERSEAT );
|
|
cLicServKey.Close();
|
|
|
|
// register service at enterprise server
|
|
ServiceRegister( psdParams->pszComputer,
|
|
psdParams->pszFamilyDisplayName,
|
|
psdParams->pszDisplayName );
|
|
}
|
|
|
|
EndDialog( hwndDlg, nrt );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnPerSeatAgree
|
|
//
|
|
// Summary;
|
|
// Handle the user interaction with the Agree Check box
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - the dialog to initialize
|
|
//
|
|
// Return;
|
|
// TRUE if succesful, otherwise false
|
|
//
|
|
// Notes;
|
|
//
|
|
// History;
|
|
// Nov-11-1994 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
void OnPerSeatAgree( HWND hwndDlg )
|
|
{
|
|
HWND hwndOK = GetDlgItem( hwndDlg, IDOK );
|
|
BOOL fChecked = !IsDlgButtonChecked( hwndDlg, IDC_AGREE );
|
|
|
|
CheckDlgButton( hwndDlg, IDC_AGREE, fChecked );
|
|
EnableWindow( hwndOK, fChecked );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: dlgprocPERSEATSETUP
|
|
//
|
|
// Summary;
|
|
// The dialog procedure for the PerSeat only Setup Dialog
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - handle of Dialog window
|
|
// uMsg [in] - message
|
|
// lParam1 [in] - first message parameter
|
|
// lParam2 [in] - second message parameter
|
|
//
|
|
// Return;
|
|
// message dependant
|
|
//
|
|
// Notes;
|
|
//
|
|
// History;
|
|
// Nov-11-1994 MikeMi Created
|
|
// Mar-14-95 MikeMi Added F1 PWM_HELP message
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
INT_PTR CALLBACK dlgprocPERSEATSETUP( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
|
{
|
|
BOOL frt = FALSE;
|
|
static PSETUPDLGPARAM psdParams;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
psdParams = (PSETUPDLGPARAM)lParam;
|
|
OnPerSeatInitDialog( hwndDlg, psdParams );
|
|
frt = TRUE; // we use the default focus
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (HIWORD( wParam ))
|
|
{
|
|
case BN_CLICKED:
|
|
switch (LOWORD( wParam ))
|
|
{
|
|
case IDOK:
|
|
frt = TRUE; // use as save flag
|
|
// intentional no break
|
|
|
|
case IDCANCEL:
|
|
OnPerSeatSetupClose( hwndDlg, frt, psdParams );
|
|
frt = FALSE;
|
|
break;
|
|
|
|
case IDC_BUTTONHELP:
|
|
PostMessage( hwndDlg, PWM_HELP, 0, 0 );
|
|
break;
|
|
|
|
case IDC_AGREE:
|
|
OnPerSeatAgree( hwndDlg );
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
if (PWM_HELP == uMsg)
|
|
{
|
|
::HtmlHelp( hwndDlg, LICCPA_HTMLHELPFILE, HH_DISPLAY_TOPIC,0);
|
|
}
|
|
break;
|
|
}
|
|
return( frt );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: SetupDialog
|
|
//
|
|
// Summary;
|
|
// Init and raises main setup dialog.
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - handle of Dialog window
|
|
// dlgParem [in] - Setup params
|
|
//
|
|
// Return;
|
|
// 1 - OK button was used to exit
|
|
// 0 - Cancel button was used to exit
|
|
// -1 - General Dialog error
|
|
//
|
|
// Notes;
|
|
//
|
|
// History;
|
|
// Dec-05-1994 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
INT_PTR SetupDialog( HWND hwndParent, SETUPDLGPARAM& dlgParam )
|
|
{
|
|
INT_PTR nError;
|
|
|
|
nError = DialogBoxParam( g_hinst,
|
|
MAKEINTRESOURCE(IDD_SETUPDLG),
|
|
hwndParent,
|
|
(DLGPROC)dlgprocLICSETUP,
|
|
(LPARAM)&dlgParam );
|
|
|
|
return( nError );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: PerSeatSetupDialog
|
|
//
|
|
// Summary;
|
|
// Init and raises Per Seat only setup dialog.
|
|
//
|
|
// Arguments;
|
|
// hwndDlg [in] - handle of Dialog window
|
|
// dlgParem [in] - Setup params
|
|
//
|
|
// Return;
|
|
// 1 - OK button was used to exit
|
|
// 0 - Cancel button was used to exit
|
|
// -1 - General Dialog error
|
|
//
|
|
// Notes;
|
|
//
|
|
// History;
|
|
// Dec-05-1994 MikeMi Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
INT_PTR PerSeatSetupDialog( HWND hwndParent, SETUPDLGPARAM& dlgParam )
|
|
{
|
|
return( DialogBoxParam( g_hinst,
|
|
MAKEINTRESOURCE(IDD_SETUP2DLG),
|
|
hwndParent,
|
|
(DLGPROC)dlgprocPERSEATSETUP,
|
|
(LPARAM)&dlgParam ) );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: CpaDialog
|
|
//
|
|
// Summary;
|
|
// Init and Raise the main control panel applet dialog
|
|
//
|
|
// Arguments;
|
|
// hwndParent [in] - handle of parent window (CONTROL.EXE window)
|
|
//
|
|
// Return;
|
|
// 1 - OK button was used to exit
|
|
// 0 - Cancel button was used to exit
|
|
// -1 - General Dialog error
|
|
//
|
|
// Notes;
|
|
//
|
|
// History;
|
|
// Dec-05-1994 MikeMi Created
|
|
// Mar-08-1995 MikeMi Changed to only one Dialog Resource, Replication Button
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
INT_PTR CpaDialog( HWND hwndParent )
|
|
{
|
|
INT_PTR nError;
|
|
OSVERSIONINFO version;
|
|
|
|
version.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|
GetVersionEx( &version );
|
|
|
|
BOOL fReplicationEnabled;
|
|
|
|
//
|
|
// Only allow Replication Button on 3.51 and above
|
|
//
|
|
fReplicationEnabled = ( (version.dwMajorVersion > 3)
|
|
|| (version.dwMajorVersion == 3 && version.dwMinorVersion >= 51) );
|
|
nError = DialogBoxParam( g_hinst,
|
|
MAKEINTRESOURCE(IDD_CPADLG_CONFIGURE),
|
|
hwndParent,
|
|
(DLGPROC)dlgprocLICCPA,
|
|
(LPARAM)fReplicationEnabled );
|
|
|
|
return( nError );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: UpdateReg
|
|
//
|
|
// Summary;
|
|
// This function is used in unatteneded setup modes, it will
|
|
// configure the registry with the values passed.
|
|
//
|
|
// Arguments;
|
|
// pszComputer [in] - computer name (maybe null for local)
|
|
// pszService [in] - service key name
|
|
// pszFamilyDisplayName [in] - family display name
|
|
// pszDisplayName [in] - displayname
|
|
// lm [in] - license mode
|
|
// dwUsers [in] - number of conncurrent users
|
|
//
|
|
// Return;
|
|
// ERR_NONE - Successful
|
|
// ERR_USERSPARAM - invalid users count
|
|
// ERR_PERMISSIONDENIED - invalid access rights
|
|
//
|
|
// Notes;
|
|
//
|
|
// History;
|
|
// Dec-09-1994 MikeMi Created
|
|
// Apr-26-95 MikeMi Added Computer name and remoting
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
int UpdateReg( LPCWSTR pszComputer,
|
|
LPCWSTR pszService,
|
|
LPCWSTR pszFamilyDisplayName,
|
|
LPCWSTR pszDisplayName,
|
|
LICENSE_MODE lm,
|
|
DWORD dwUsers )
|
|
{
|
|
int nrt = ERR_NONE;
|
|
|
|
if (VALIDUSERCOUNT( dwUsers ))
|
|
{
|
|
CLicRegLicense cLicKey;
|
|
LONG lrt;
|
|
BOOL fNew;
|
|
|
|
lrt = cLicKey.Open( fNew, pszComputer );
|
|
nrt = AccessOk( NULL, lrt, FALSE );
|
|
if (ERR_NONE == nrt)
|
|
{
|
|
CLicRegLicenseService cLicServKey;
|
|
|
|
cLicServKey.SetService( pszService );
|
|
cLicServKey.Open( pszComputer );
|
|
|
|
// configure license rule of one change from PerServer to PerSeat
|
|
//
|
|
cLicServKey.SetChangeFlag( (LICMODE_PERSEAT == lm ) );
|
|
|
|
cLicServKey.SetUserLimit( dwUsers );
|
|
cLicServKey.SetDisplayName( pszDisplayName );
|
|
cLicServKey.SetFamilyDisplayName( pszFamilyDisplayName );
|
|
cLicServKey.SetMode( lm );
|
|
cLicServKey.Close();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
nrt = ERR_USERSPARAM;
|
|
}
|
|
return( nrt );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: ServiceSecuritySet
|
|
//
|
|
// Summary;
|
|
// Set security on a given product such that it requires a
|
|
// secure certificate for license entry.
|
|
//
|
|
// Arguments;
|
|
// pszComputer [in] - computer on which the license server resides
|
|
// pszDisplayName [in] - display name for the service
|
|
//
|
|
// History;
|
|
// Dec-19-95 JeffParh Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
int ServiceSecuritySet( LPWSTR pszComputer, LPWSTR pszDisplayName )
|
|
{
|
|
int nError;
|
|
NTSTATUS nt;
|
|
LLS_HANDLE hLls;
|
|
|
|
// register the product as secure on the target server
|
|
nt = LlsConnect( pszComputer, &hLls );
|
|
|
|
if ( STATUS_SUCCESS != nt )
|
|
{
|
|
nError = ERR_NOREMOTESERVER;
|
|
}
|
|
else
|
|
{
|
|
if ( !LlsCapabilityIsSupported( hLls, LLS_CAPABILITY_SECURE_CERTIFICATES ) )
|
|
{
|
|
nError = ERR_DOWNLEVEL;
|
|
}
|
|
else
|
|
{
|
|
nt = LlsProductSecuritySetW( hLls, pszDisplayName );
|
|
|
|
if ( STATUS_SUCCESS != nt )
|
|
{
|
|
nError = ERR_CERTREQFAILED;
|
|
}
|
|
else
|
|
{
|
|
nError = ERR_NONE;
|
|
}
|
|
}
|
|
|
|
LlsClose( hLls );
|
|
}
|
|
|
|
// register the product as secure on the enterprise server
|
|
// it is acceptable for this to fail (the enterprise server may
|
|
// be downlevel)
|
|
if ( ERR_NONE == nError )
|
|
{
|
|
PLLS_CONNECT_INFO_0 pConnectInfo = NULL;
|
|
|
|
nt = LlsConnectEnterprise( pszComputer, &hLls, 0, (LPBYTE *) &pConnectInfo );
|
|
|
|
if ( STATUS_SUCCESS == nt )
|
|
{
|
|
LlsFreeMemory( pConnectInfo );
|
|
|
|
if ( LlsCapabilityIsSupported( hLls, LLS_CAPABILITY_SECURE_CERTIFICATES ) )
|
|
{
|
|
LlsProductSecuritySetW( hLls, pszDisplayName );
|
|
}
|
|
|
|
LlsClose( hLls );
|
|
}
|
|
}
|
|
|
|
return nError;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: ServiceRegister
|
|
//
|
|
// Summary;
|
|
// Register a service at the enterprise server corresponding to
|
|
// the given server so that per seat licenses may be added
|
|
// immediately, rather than it taking up until the next
|
|
// replication cycle for the product to be listed.
|
|
//
|
|
// Arguments;
|
|
// pszComputer [in] - computer for which to register the service
|
|
// pszFamilyDisplayName [in] - family display name of the service
|
|
// pszDisplayName [in] - display name of the service
|
|
//
|
|
// History;
|
|
// Dec-19-95 JeffParh Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
static int ServiceRegister( LPWSTR pszComputer,
|
|
LPWSTR pszFamilyDisplayName,
|
|
LPWSTR pszDisplayName )
|
|
{
|
|
int nError;
|
|
NTSTATUS nt;
|
|
LLS_HANDLE hLls;
|
|
PLLS_CONNECT_INFO_0 pConnectInfo = NULL;
|
|
|
|
// register the product as secure on the enterprise server
|
|
nt = LlsConnectEnterprise( pszComputer, &hLls, 0, (LPBYTE *) &pConnectInfo );
|
|
|
|
if ( STATUS_SUCCESS != nt )
|
|
{
|
|
nError = ERR_NOREMOTESERVER;
|
|
}
|
|
else
|
|
{
|
|
LlsFreeMemory( pConnectInfo );
|
|
|
|
nt = LlsProductAdd( hLls, pszFamilyDisplayName, pszDisplayName, TEXT( "" ) );
|
|
|
|
LlsClose( hLls );
|
|
|
|
if ( STATUS_SUCCESS != nt )
|
|
{
|
|
nError = ERR_NOREMOTESERVER;
|
|
}
|
|
else
|
|
{
|
|
nError = ERR_NONE;
|
|
}
|
|
}
|
|
|
|
return nError;
|
|
}
|