|
|
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
hash.h
Abstract:
Replacement routines for the string table functions in setupapi.dll. This routines are much more easy to work with.
Author:
Jim Schmidt (jimschm) 22-Dec-1998
Revision History:
ovidiut 11-Oct-1999 Updated for new coding conventions and Win64 compliance
--*/
//
// Includes
//
// None
//
// Strings
//
// None
//
// Constants
//
// None
//
// Macros
//
#define CASE_SENSITIVE TRUE
#define CASE_INSENSITIVE FALSE
#define UNKNOWN_LETTER_CASE FALSE
#define ALREADY_LOWERCASE TRUE
#define DEFAULT_BUCKET_SIZE 0
//
// Types
//
typedef const void *HASHTABLE;
typedef const void *HASHITEM;
typedef struct {
PCSTR String; PCVOID ExtraData; HASHITEM Index;
HASHTABLE Internal;
} HASHTABLE_ENUMA, *PHASHTABLE_ENUMA;
typedef struct { PCWSTR String; PCVOID ExtraData; HASHITEM Index;
HASHTABLE Internal;
} HASHTABLE_ENUMW, *PHASHTABLE_ENUMW;
typedef BOOL (*PHASHTABLE_CALLBACK_ROUTINEA)( IN HASHTABLE HashTable, IN HASHITEM Index, IN PCSTR String, IN PVOID ExtraData, IN UINT ExtraDataSize, IN LPARAM lParam );
typedef BOOL (*PHASHTABLE_CALLBACK_ROUTINEW)( IN HASHTABLE HashTable, IN HASHITEM Index, IN PCWSTR String, IN PVOID ExtraData, IN UINT ExtraDataSize, IN LPARAM lParam );
typedef enum { WRITE_UNICODE_HEADER = 0x0001, REVERSE_ORDER = 0x0002 } HASHTABLEOUTPUTFLAGS;
//
// Globals
//
// None
//
// Macro expansion list
//
// None
//
// Function prototypes and wrapper macros
//
HASHTABLE HtAllocExAW ( IN BOOL CaseSensitive, IN BOOL Unicode, IN BOOL ExternalStrings, IN UINT ExtraDataSize, IN UINT BucketCount OPTIONAL );
#define HtAllocA() HtAllocExAW(FALSE,FALSE,FALSE,0,0)
#define HtAllocW() HtAllocExAW(FALSE,TRUE,FALSE,0,0)
#define HtAllocWithDataA(size) HtAllocExAW(FALSE,FALSE,FALSE,size,0)
#define HtAllocWithDataW(size) HtAllocExAW(FALSE,TRUE,FALSE,size,0)
#define HtAllocExA(cs,datasize,bucketcount) HtAllocExAW(cs,FALSE,FALSE,datasize,bucketcount)
#define HtAllocExW(cs,datasize,bucketcount) HtAllocExAW(cs,TRUE,FALSE,datasize,bucketcount)
#define HtAllocExternStrA() HtAllocExAW(FALSE,FALSE,TRUE,0,0)
#define HtAllocExternStrW() HtAllocExAW(FALSE,TRUE,TRUE,0,0)
#define HtAllocExternStrWithDataA(size) HtAllocExAW(FALSE,FALSE,TRUE,0,0)
#define HtAllocExternStrWithDataW(size) HtAllocExAW(FALSE,TRUE,TRUE,0,0)
#define HtAllocExternStrExA(cs,size,bucketcount) HtAllocExAW(cs,FALSE,TRUE,size,bucketcount)
#define HtAllocExternStrExW(cs,size,bucketcount) HtAllocExAW(cs,TRUE,TRUE,size,bucketcount)
VOID HtFree ( IN HASHTABLE HashTable );
HASHITEM HtAddStringExA ( IN HASHTABLE HashTable, IN PCSTR String, IN PCVOID ExtraData, OPTIONAL IN BOOL AlreadyLowercase );
#define HtAddStringA(table,string) HtAddStringExA(table,string,NULL,UNKNOWN_LETTER_CASE)
#define HtAddStringAndDataA(table,string,data) HtAddStringExA(table,string,data,UNKNOWN_LETTER_CASE)
HASHITEM HtAddStringExW ( IN HASHTABLE HashTable, IN PCWSTR String, IN PCVOID ExtraData, OPTIONAL IN BOOL AlreadyLowercase );
#define HtAddStringW(table,string) HtAddStringExW(table,string,NULL,UNKNOWN_LETTER_CASE)
#define HtAddStringAndDataW(table,string,data) HtAddStringExW(table,string,data,UNKNOWN_LETTER_CASE)
BOOL HtRemoveItem ( IN HASHTABLE HashTable, IN HASHITEM Item );
BOOL HtRemoveStringA ( IN HASHTABLE HashTable, IN PCSTR AnsiString );
BOOL HtRemoveStringW ( IN HASHTABLE HashTable, IN PCWSTR UnicodeString );
HASHITEM HtFindStringExA ( IN HASHTABLE HashTable, IN PCSTR String, OUT PVOID ExtraData, OPTIONAL IN BOOL AlreadyLowercase );
#define HtFindStringA(table,string) HtFindStringExA(table,string,NULL,UNKNOWN_LETTER_CASE)
#define HtFindStringAndDataA(table,string,data) HtFindStringExA(table,string,data,UNKNOWN_LETTER_CASE)
HASHITEM HtFindStringExW ( IN HASHTABLE HashTable, IN PCWSTR String, OUT PVOID ExtraData, OPTIONAL IN BOOL AlreadyLowercase );
#define HtFindStringW(table,string) HtFindStringExW(table,string,NULL,UNKNOWN_LETTER_CASE)
#define HtFindStringAndDataW(table,string,data) HtFindStringExW(table,string,data,UNKNOWN_LETTER_CASE)
HASHITEM HtFindPrefixExA ( IN HASHTABLE HashTable, IN PCSTR StringStart, IN PCSTR BufferEnd, OUT PVOID ExtraData, OPTIONAL IN BOOL AlreadyLowercase );
#define HtFindPrefixA(table,str,end) HtFindPrefixExA(table,str,end,NULL,UNKNOWN_LETTER_CASE)
HASHITEM HtFindPrefixExW ( IN HASHTABLE HashTable, IN PCWSTR StringStart, IN PCWSTR BufferEnd, OUT PVOID ExtraData, OPTIONAL IN BOOL AlreadyLowercase );
#define HtFindPrefixW(table,str,end) HtFindPrefixExW(table,str,end,NULL,UNKNOWN_LETTER_CASE)
BOOL HtGetExtraData ( IN HASHTABLE HashTable, IN HASHITEM Index, OUT PCVOID *ExtraData );
BOOL HtCopyStringData ( IN HASHTABLE HashTable, IN HASHITEM Index, OUT PVOID ExtraData );
BOOL HtSetStringData ( IN HASHTABLE HashTable, IN HASHITEM Index, IN PCVOID ExtraData );
PCSTR HtGetStringFromItemA ( IN HASHITEM Index );
PCWSTR HtGetStringFromItemW ( IN HASHITEM Index );
BOOL EnumFirstHashTableStringA ( OUT PHASHTABLE_ENUMA EnumPtr, IN HASHTABLE HashTable );
BOOL EnumFirstHashTableStringW ( OUT PHASHTABLE_ENUMW EnumPtr, IN HASHTABLE HashTable );
BOOL EnumNextHashTableStringA ( IN OUT PHASHTABLE_ENUMA EnumPtr );
BOOL EnumNextHashTableStringW ( IN OUT PHASHTABLE_ENUMW EnumPtr );
BOOL EnumHashTableWithCallbackA ( IN HASHTABLE Table, IN PHASHTABLE_CALLBACK_ROUTINEA Proc, IN LPARAM lParam );
BOOL EnumHashTableWithCallbackW ( IN HASHTABLE Table, IN PHASHTABLE_CALLBACK_ROUTINEW Proc, IN LPARAM lParam );
BOOL HtIsEmpty ( IN HASHTABLE HashTable );
BOOL HtWriteToFile ( IN HASHTABLE HashTable, IN HANDLE OutputFile, IN HASHTABLEOUTPUTFLAGS Flags );
//
// Macro expansion definition
//
// None
//
// A & W macros
//
#ifdef UNICODE
#define HASHTABLE_ENUM HASHTABLE_ENUMW
#define PHASHTABLE_ENUM PHASHTABLE_ENUMW
#define PHASH_CALLBACK_ROUTINE PHASH_CALLBACK_ROUTINEW
#define HtAlloc HtAllocW
#define HtAllocWithData HtAllocWithDataW
#define HtAllocEx HtAllocExW
#define HtAllocExternStr HtAllocExternStrW
#define HtAllocExternStrWithData HtAllocExternStrWithDataW
#define HtAllocExternStrEx HtAllocExternStrExW
#define HtAddString HtAddStringW
#define HtAddStringAndData HtAddStringAndDataW
#define HtAddStringEx HtAddStringExW
#define HtRemoveString HtRemoveStringW
#define HtFindString HtFindStringW
#define HtFindStringAndData HtFindStringAndDataW
#define HtFindStringEx HtFindStringExW
#define HtFindPrefix HtFindPrefixW
#define HtFindPrefixEx HtFindPrefixExW
#define HtGetStringFromItem HtGetStringFromItemW
#define EnumFirstHashTableString EnumFirstHashTableStringW
#define EnumNextHashTableString EnumNextHashTableStringW
#define EnumHashTableWithCallback EnumHashTableWithCallbackW
#else
#define HASHTABLE_ENUM HASHTABLE_ENUMA
#define PHASHTABLE_ENUM PHASHTABLE_ENUMA
#define PHASH_CALLBACK_ROUTINE PHASH_CALLBACK_ROUTINEA
#define HtAlloc HtAllocA
#define HtAllocWithData HtAllocWithDataA
#define HtAllocEx HtAllocExA
#define HtAllocExternStr HtAllocExternStrA
#define HtAllocExternStrWithData HtAllocExternStrWithDataA
#define HtAllocExternStrEx HtAllocExternStrExA
#define HtAddString HtAddStringA
#define HtAddStringAndData HtAddStringAndDataA
#define HtAddStringEx HtAddStringExA
#define HtRemoveString HtRemoveStringA
#define HtFindString HtFindStringA
#define HtFindStringAndData HtFindStringAndDataA
#define HtFindStringEx HtFindStringExA
#define HtFindPrefix HtFindPrefixA
#define HtFindPrefixEx HtFindPrefixExA
#define HtGetStringFromItem HtGetStringFromItemA
#define EnumFirstHashTableString EnumFirstHashTableStringA
#define EnumNextHashTableString EnumNextHashTableStringA
#define EnumHashTableWithCallback EnumHashTableWithCallbackA
#endif
|