windows-nt/Source/XPSP1/NT/ds/security/gina/userenv/rsop/reghash.h
2020-09-26 16:20:57 +08:00

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