152 lines
5.3 KiB
C
152 lines
5.3 KiB
C
/*++
|
|
|
|
Copyright (c) 1994 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
msvctbl.h
|
|
|
|
Abstract:
|
|
|
|
See msvctbl.c
|
|
|
|
Author:
|
|
|
|
Arthur Hanson (arth) Dec 07, 1994
|
|
|
|
Environment:
|
|
|
|
Revision History:
|
|
|
|
Jeff Parham (jeffparh) 05-Dec-1995
|
|
o Added comments.
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _LLS_MSVCTBL_H
|
|
#define _LLS_MSVCTBL_H
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
#define IDS_BACKOFFICE 1500
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// The master service record is for license usage tracking. We have
|
|
// A master ROOT record for a family of products (say SQL Server) and
|
|
// a sub linked-list of each of the specific versions in order of the
|
|
// version number. When we do license checking we can move on up the tree
|
|
// to higher level of licenses.
|
|
//
|
|
// There is also a mapping table kept for each of the ROOT records. This
|
|
// tracks if the mapping license count has already been used.
|
|
//
|
|
struct _MASTER_SERVICE_ROOT;
|
|
|
|
typedef struct _MASTER_SERVICE_RECORD
|
|
{
|
|
ULONG Index; // index at which
|
|
// a pointer to this
|
|
// structure may be
|
|
// found in the
|
|
// MasterServiceTable
|
|
|
|
LPTSTR Name; // product name
|
|
|
|
DWORD Version; // version of the
|
|
// product;
|
|
// major.minor ->
|
|
// (major << 16)
|
|
// | minor, e.g.,
|
|
// 5.2 -> 0x50002
|
|
|
|
struct _MASTER_SERVICE_ROOT * Family; // pointer to the
|
|
// product family,
|
|
// e.g., "SNA 2.1"
|
|
// -> "SNA"
|
|
|
|
ULONG Licenses;
|
|
ULONG LicensesUsed;
|
|
ULONG LicensesClaimed;
|
|
|
|
ULONG MaxSessionCount;
|
|
ULONG HighMark;
|
|
|
|
ULONG next; // index at which
|
|
// a pointer to the
|
|
// next ascending
|
|
// version of this
|
|
// product may be
|
|
// found in the
|
|
// MasterServiceTable
|
|
// NOTE: index is
|
|
// 1-based, so if
|
|
// next == 0 there
|
|
// are no more, and
|
|
// if non-zero then
|
|
// the next version
|
|
// is at index next-1
|
|
|
|
} MASTER_SERVICE_RECORD, *PMASTER_SERVICE_RECORD;
|
|
|
|
typedef struct _MASTER_SERVICE_ROOT
|
|
{
|
|
LPTSTR Name; // name of this product family
|
|
|
|
DWORD Flags;
|
|
|
|
RTL_RESOURCE ServiceLock; // lock for changes to the
|
|
// Services array (below)
|
|
|
|
ULONG ServiceTableSize; // number of entries in Services
|
|
// array (below)
|
|
|
|
ULONG * Services; // array of indices into the
|
|
// MasterServiceTable of the various
|
|
// (product,version) pairs
|
|
// belonging to this family;
|
|
// sorted in order of ascending
|
|
// version
|
|
} MASTER_SERVICE_ROOT, *PMASTER_SERVICE_ROOT;
|
|
|
|
extern ULONG RootServiceListSize;
|
|
extern PMASTER_SERVICE_ROOT *RootServiceList;
|
|
|
|
extern ULONG MasterServiceListSize;
|
|
extern PMASTER_SERVICE_RECORD *MasterServiceList;
|
|
extern PMASTER_SERVICE_RECORD *MasterServiceTable;
|
|
|
|
extern RTL_RESOURCE MasterServiceListLock;
|
|
|
|
extern TCHAR BackOfficeStr[];
|
|
extern PMASTER_SERVICE_RECORD BackOfficeRec;
|
|
|
|
|
|
NTSTATUS MasterServiceListInit();
|
|
PMASTER_SERVICE_RECORD MServiceRecordFind( DWORD Version, ULONG NumServiceEntries, PULONG ServiceList );
|
|
PMASTER_SERVICE_ROOT MServiceRootFind( LPTSTR ServiceName );
|
|
PMASTER_SERVICE_RECORD MasterServiceListFind( LPTSTR DisplayName );
|
|
PMASTER_SERVICE_RECORD MasterServiceListAdd( LPTSTR FamilyName, LPTSTR Name, DWORD Version );
|
|
|
|
#if DBG
|
|
|
|
VOID MasterServiceRootDebugDump();
|
|
VOID MasterServiceRootDebugInfoDump( PVOID Data );
|
|
VOID MasterServiceListDebugDump();
|
|
VOID MasterServiceListDebugInfoDump( PVOID Data );
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|