233 lines
6.4 KiB
C
233 lines
6.4 KiB
C
/*++
|
|
|
|
Copyright (c) 1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
strmap.h
|
|
|
|
Abstract:
|
|
|
|
Strmap (formally pathmap) is a fast hueristic-based program that
|
|
searches strings and attempts to replace substrings when there
|
|
are matching substrings in the mapping database.
|
|
|
|
Author:
|
|
|
|
Marc R. Whitten (marcw) 20-Mar-1997
|
|
|
|
Revision History:
|
|
|
|
Jim Schmidt (jimschm) 08-May-2000 Rewrote mapping, added Flags & ex nodes
|
|
Calin Negreanu (calinn) 02-Mar-2000 Ported from win9xupg project
|
|
|
|
--*/
|
|
|
|
//
|
|
// Constants
|
|
//
|
|
|
|
#define STRMAP_COMPLETE_MATCH_ONLY 0x0001
|
|
#define STRMAP_FIRST_CHAR_MUST_MATCH 0x0002
|
|
#define STRMAP_RETURN_AFTER_FIRST_REPLACE 0x0004
|
|
#define STRMAP_REQUIRE_WACK_OR_NUL 0x0008
|
|
|
|
//
|
|
// Types
|
|
//
|
|
|
|
typedef struct {
|
|
BOOL UnicodeData;
|
|
|
|
//
|
|
// The filter can replace NewSubString. (The filter must also
|
|
// set NewSubStringSizeInBytes when replacing NewSubString.)
|
|
//
|
|
|
|
union {
|
|
struct {
|
|
PCWSTR OriginalString;
|
|
PCWSTR BeginningOfMatch;
|
|
PCWSTR CurrentString;
|
|
PCWSTR OldSubString;
|
|
PCWSTR NewSubString;
|
|
INT NewSubStringSizeInBytes;
|
|
} Unicode;
|
|
|
|
struct {
|
|
PCSTR OriginalString;
|
|
PCSTR BeginningOfMatch;
|
|
PCSTR CurrentString;
|
|
PCSTR OldSubString;
|
|
PCSTR NewSubString;
|
|
INT NewSubStringSizeInBytes;
|
|
} Ansi;
|
|
};
|
|
} REG_REPLACE_DATA, *PREG_REPLACE_DATA;
|
|
|
|
typedef BOOL(REG_REPLACE_FILTER_PROTOTYPE)(PREG_REPLACE_DATA Data);
|
|
typedef REG_REPLACE_FILTER_PROTOTYPE * REG_REPLACE_FILTER;
|
|
|
|
typedef struct TAG_CHARNODE {
|
|
WORD Char;
|
|
WORD Flags;
|
|
PVOID OriginalStr;
|
|
PVOID ReplacementStr;
|
|
INT ReplacementBytes;
|
|
|
|
struct TAG_CHARNODE *NextLevel;
|
|
struct TAG_CHARNODE *NextPeer;
|
|
|
|
} CHARNODE, *PCHARNODE;
|
|
|
|
typedef struct {
|
|
CHARNODE Node;
|
|
REG_REPLACE_FILTER Filter;
|
|
ULONG_PTR ExtraData;
|
|
} CHARNODEEX, *PCHARNODEEX;
|
|
|
|
|
|
|
|
typedef struct {
|
|
PMHANDLE Pool;
|
|
PCHARNODE FirstLevelRoot;
|
|
BOOL UsesExNode;
|
|
BOOL UsesFilter;
|
|
BOOL UsesExtraData;
|
|
} MAPSTRUCT, *PMAPSTRUCT;
|
|
|
|
//
|
|
// Macros
|
|
//
|
|
|
|
// None
|
|
|
|
//
|
|
// APIs
|
|
//
|
|
|
|
PMAPSTRUCT
|
|
CreateStringMappingEx (
|
|
IN BOOL UsesFilter,
|
|
IN BOOL UsesExtraData
|
|
);
|
|
|
|
#define CreateStringMapping() CreateStringMappingEx(FALSE,FALSE)
|
|
|
|
VOID
|
|
DestroyStringMapping (
|
|
IN PMAPSTRUCT Map
|
|
);
|
|
|
|
VOID
|
|
AddStringMappingPairExA (
|
|
IN OUT PMAPSTRUCT Map,
|
|
IN PCSTR Old,
|
|
IN PCSTR New,
|
|
IN REG_REPLACE_FILTER Filter, OPTIONAL
|
|
IN ULONG_PTR ExtraData, OPTIONAL
|
|
IN DWORD Flags
|
|
);
|
|
|
|
#define AddStringMappingPairA(Map,Old,New) AddStringMappingPairExA(Map,Old,New,NULL,0,0)
|
|
|
|
VOID
|
|
AddStringMappingPairExW (
|
|
IN OUT PMAPSTRUCT Map,
|
|
IN PCWSTR Old,
|
|
IN PCWSTR New,
|
|
IN REG_REPLACE_FILTER Filter, OPTIONAL
|
|
IN ULONG_PTR ExtraData, OPTIONAL
|
|
IN DWORD Flags
|
|
);
|
|
|
|
#define AddStringMappingPairW(Map,Old,New) AddStringMappingPairExW(Map,Old,New,NULL,0,0)
|
|
|
|
BOOL
|
|
MappingSearchAndReplaceExA (
|
|
IN PMAPSTRUCT Map,
|
|
IN PCSTR SrcBuffer,
|
|
OUT PSTR Buffer, // can be the same as SrcBuffer
|
|
IN INT InboundBytes, OPTIONAL
|
|
OUT PINT OutboundBytesPtr, OPTIONAL
|
|
IN INT MaxSizeInBytes,
|
|
IN DWORD Flags,
|
|
OUT ULONG_PTR *ExtraDataValue, OPTIONAL
|
|
OUT PCSTR *EndOfString OPTIONAL
|
|
);
|
|
|
|
#define MappingSearchAndReplaceA(map,buffer,maxbytes) MappingSearchAndReplaceExA(map,buffer,buffer,0,NULL,maxbytes,0,NULL,NULL)
|
|
|
|
BOOL
|
|
MappingSearchAndReplaceExW (
|
|
IN PMAPSTRUCT Map,
|
|
IN PCWSTR SrcBuffer,
|
|
OUT PWSTR Buffer, // can be the same as SrcBuffer
|
|
IN INT InboundBytes, OPTIONAL
|
|
OUT PINT OutboundBytes, OPTIONAL
|
|
IN INT MaxSizeInBytes,
|
|
IN DWORD Flags,
|
|
OUT ULONG_PTR *ExtraDataValue, OPTIONAL
|
|
OUT PCWSTR *EndOfString OPTIONAL
|
|
);
|
|
|
|
#define MappingSearchAndReplaceW(map,buffer,maxbytes) MappingSearchAndReplaceExW(map,buffer,buffer,0,NULL,maxbytes,0,NULL,NULL)
|
|
|
|
BOOL
|
|
MappingMultiTableSearchAndReplaceExA (
|
|
IN PMAPSTRUCT *MapArray,
|
|
IN UINT MapArrayCount,
|
|
IN PCSTR SrcBuffer,
|
|
OUT PSTR Buffer, // can be the same as SrcBuffer
|
|
IN INT InboundBytes, OPTIONAL
|
|
OUT PINT OutboundBytesPtr, OPTIONAL
|
|
IN INT MaxSizeInBytes,
|
|
IN DWORD Flags,
|
|
OUT ULONG_PTR *ExtraDataValue, OPTIONAL
|
|
OUT PCSTR *EndOfString OPTIONAL
|
|
);
|
|
|
|
#define MappingMultiTableSearchAndReplaceA(array,count,buffer,maxbytes) \
|
|
MappingMultiTableSearchAndReplaceExA(array,count,buffer,buffer,0,NULL,maxbytes,0,NULL,NULL)
|
|
|
|
BOOL
|
|
MappingMultiTableSearchAndReplaceExW (
|
|
IN PMAPSTRUCT *MapArray,
|
|
IN UINT MapArrayCount,
|
|
IN PCWSTR SrcBuffer,
|
|
OUT PWSTR Buffer, // can be the same as SrcBuffer
|
|
IN INT InboundBytes, OPTIONAL
|
|
OUT PINT OutboundBytes, OPTIONAL
|
|
IN INT MaxSizeInBytes,
|
|
IN DWORD Flags,
|
|
OUT ULONG_PTR *ExtraDataValue, OPTIONAL
|
|
OUT PCWSTR *EndOfString OPTIONAL
|
|
);
|
|
|
|
#define MappingMultiTableSearchAndReplaceW(array,count,buffer,maxbytes) \
|
|
MappingMultiTableSearchAndReplaceExW(array,count,buffer,buffer,0,NULL,maxbytes,0,NULL,NULL)
|
|
|
|
//
|
|
// Macros
|
|
//
|
|
|
|
#ifdef UNICODE
|
|
|
|
#define AddStringMappingPairEx AddStringMappingPairExW
|
|
#define AddStringMappingPair AddStringMappingPairW
|
|
#define MappingSearchAndReplaceEx MappingSearchAndReplaceExW
|
|
#define MappingSearchAndReplace MappingSearchAndReplaceW
|
|
#define MappingMultiTableSearchAndReplaceEx MappingMultiTableSearchAndReplaceExW
|
|
#define MappingMultiTableSearchAndReplace MappingMultiTableSearchAndReplaceW
|
|
|
|
#else
|
|
|
|
#define AddStringMappingPairEx AddStringMappingPairExA
|
|
#define AddStringMappingPair AddStringMappingPairA
|
|
#define MappingSearchAndReplaceEx MappingSearchAndReplaceExA
|
|
#define MappingSearchAndReplace MappingSearchAndReplaceA
|
|
#define MappingMultiTableSearchAndReplaceEx MappingMultiTableSearchAndReplaceExA
|
|
#define MappingMultiTableSearchAndReplace MappingMultiTableSearchAndReplaceA
|
|
|
|
#endif
|