//-------------------------------------------------------------------
//
//  FILE: CLicReg.Hpp
//
//  Summary;
//      Class definition for handling the licensing api registration
//
// Notes;
//
// History
//      11/15/94    MikeMi  Created
//      Apr-26-95   MikeMi  Added Computer name and remoting
//
//-------------------------------------------------------------------

#ifndef __CLicReg_HPP__
#define __CLicReg_HPP__

const WCHAR FILEPRINT_SERVICE_REG_KEY[]             = L"FilePrint";
const WCHAR FILEPRINT_SERVICE_DISPLAY_NAME[]        = L"Windows Server";
const WCHAR FILEPRINT_SERVICE_FAMILY_DISPLAY_NAME[] = L"Windows Server";

// license modes to pass to SetMode 
//
enum LICENSE_MODE
{
   LICMODE_PERSEAT,
   LICMODE_PERSERVER,
   LICMODE_UNDEFINED
};

//-------------------------------------------------------------------
//  Root class of all registry classes
//

class CLicReg
{
public:
   CLicReg();
   ~CLicReg();

   LONG CommitNow();
   LONG Close();

protected:
   HKEY  _hkey;
};

//-------------------------------------------------------------------
// License Registry Key, for initialization and enumeration
//

class CLicRegLicense : public CLicReg
{
public:
   LONG Open( BOOL& fNew,  LPCWSTR pszComputer = NULL );
   LONG EnumService( DWORD iService, LPWSTR pszBuffer, DWORD& cBuffer );
};

//-------------------------------------------------------------------
// Services under the License Registry Key
//

class CLicRegLicenseService : public CLicReg
{
public:
   CLicRegLicenseService( LPCWSTR pszService = NULL );

   LONG Open( LPCWSTR pszComputer = NULL, BOOL fCreate = TRUE );
   
   void SetService( LPCWSTR pszService );
   BOOL CanChangeMode();
   LONG SetChangeFlag( BOOL fHasChanged );
   LONG SetMode( LICENSE_MODE lm );
   LONG SetUserLimit( DWORD dwLimit );             
   LONG GetMode( LICENSE_MODE& lm );
   LONG GetUserLimit( DWORD& dwLimit );               
   LONG GetDisplayName( LPWSTR pszName, DWORD& cchName );
   LONG SetDisplayName( LPCWSTR pszName );
   LONG GetFamilyDisplayName( LPWSTR pszName, DWORD& cchName );
   LONG SetFamilyDisplayName( LPCWSTR pszName );

private:
   PWCHAR _pszService;
};

#endif