107 lines
2.9 KiB
C
107 lines
2.9 KiB
C
//*************************************************************
|
|
//
|
|
// Hash table for registry Rsop data
|
|
//
|
|
// Microsoft Confidential
|
|
// Copyright (c) Microsoft Corporation 1999
|
|
// All rights reserved
|
|
//
|
|
// History: 7-Jun-99 SitaramR Created
|
|
//
|
|
//*************************************************************
|
|
|
|
#define HASH_TABLE_SIZE 97 // # buckets in hash table
|
|
#define STARCOMMAND TEXT("**Command") // A special valuename created to keep the commands
|
|
//
|
|
// List of data values for key registry value in precedence order,
|
|
// entries at the beginning of list have higher precedence.
|
|
//
|
|
|
|
typedef struct _REGDATAENTRY {
|
|
BOOL bDeleted; // Is this a deleted value ?
|
|
BOOL bAdmPolicy; // Is this generated by an Adm policy ?
|
|
DWORD dwValueType;
|
|
DWORD dwDataLen;
|
|
BYTE * pData;
|
|
WCHAR * pwszGPO; // Gpo that set this data
|
|
WCHAR * pwszSOM; // SDOU that the above Gpo is linked to
|
|
WCHAR * pwszCommand; // The actual command that caused the change in data value
|
|
struct _REGDATAENTRY * pNext;
|
|
} REGDATAENTRY, *LPREGDATAENTRY;
|
|
|
|
|
|
//
|
|
// List of registry value names under a common registry key
|
|
//
|
|
|
|
typedef struct _REGVALUEENTRY {
|
|
WCHAR * pwszValueName; // Registry value name
|
|
REGDATAENTRY * pDataList;
|
|
struct _REGVALUEENTRY * pNext;
|
|
|
|
} REGVALUEENTRY, *LPREGVALUEENTRY;
|
|
|
|
|
|
|
|
//
|
|
// List of registry keys that map to same hash bucket
|
|
//
|
|
|
|
typedef struct _REGKEYENTRY {
|
|
WCHAR * pwszKeyName; // Registry key name
|
|
REGVALUEENTRY * pValueList;
|
|
struct _REGKEYENTRY * pNext;
|
|
} REGKEYENTRY, *LPREGKEYENTRY;
|
|
|
|
|
|
//
|
|
// Hash table for looking up registry keys
|
|
//
|
|
|
|
typedef struct _REGHASHTABLE {
|
|
REGKEYENTRY * aHashTable[HASH_TABLE_SIZE];
|
|
HRESULT hrError;
|
|
} REGHASHTABLE, *LPREGHASHTABLE;
|
|
|
|
|
|
//
|
|
// Registry operation types for deleting and
|
|
// adding values.
|
|
//
|
|
|
|
typedef enum _REGOPERATION {
|
|
REG_DELETEVALUE = 0,
|
|
REG_DELETEALLVALUES,
|
|
REG_DELETEKEY,
|
|
REG_ADDVALUE,
|
|
REG_SOFTADDVALUE,
|
|
REG_INTERNAL_DELETESINGLEKEY
|
|
} REGOPERATION;
|
|
|
|
//
|
|
// Public methods of hash table: alloc, free and addentry
|
|
//
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
REGHASHTABLE * AllocHashTable();
|
|
|
|
void FreeHashTable( REGHASHTABLE *pHashTable );
|
|
|
|
BOOL AddRegHashEntry( REGHASHTABLE *pHashTable,
|
|
REGOPERATION opnType,
|
|
WCHAR *pwszKeyName,
|
|
WCHAR *pwszValueName,
|
|
DWORD dwType,
|
|
DWORD dwDataLen,
|
|
BYTE *pData,
|
|
WCHAR *pwszGPO,
|
|
WCHAR *pwszSOM,
|
|
WCHAR *szCommand,
|
|
BOOL bCreateCommand);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|