/*++ Copyright (c) 1996 Microsoft Corporation Module Name: memdbutil.c Abstract: MemDb Utility functions Author: Jim Schmidt (jimschm) 8-Aug-1996 Revision History: mvander xx-xxx-1999 split from memdb.c --*/ #include "pch.h" BOOL MemDbValidateDatabase ( VOID ) { // NTRAID#NTBUG9-153308-2000/08/01-jimschm Reimplement MemDbValidateDatabase return TRUE; } /*++ Routine Description: MemDbMakeNonPrintableKey converts the double-backslashe pairs in a string to ASCII 1, a non-printable character. This allows the caller to store properly escaped strings in MemDb. This routine is desinged to be expanded for other types of escape processing. Arguments: KeyName - Specifies the key text; receives the converted text. The DBCS version may grow the text buffer, so the text buffer must be twice the length of the inbound string. Flags - Specifies the type of conversion. Currently only MEMDB_CONVERT_DOUBLEWACKS_TO_ASCII_1 is supported. Return Value: none --*/ VOID MemDbMakeNonPrintableKeyA ( IN OUT PSTR KeyName, IN UINT Flags ) { while (*KeyName) { if (Flags & MEMDB_CONVERT_DOUBLEWACKS_TO_ASCII_1) { if (_mbsnextc (KeyName) == '\\' && _mbsnextc (_mbsinc (KeyName)) == '\\' ) { _setmbchar (KeyName, 1); KeyName = _mbsinc (KeyName); MYASSERT (_mbsnextc (KeyName) == '\\'); _setmbchar (KeyName, 1); } DEBUGMSG_IF (( _mbsnextc (KeyName) == 1, DBG_WHOOPS, "MemDbMakeNonPrintableKeyA: Non-printable character " "collision detected; key was damaged" )); } if (Flags & MEMDB_CONVERT_WILD_STAR_TO_ASCII_2) { if (_mbsnextc (KeyName) == '*') { _setmbchar (KeyName, 2); } DEBUGMSG_IF (( _mbsnextc (_mbsinc (KeyName)) == 2, DBG_WHOOPS, "MemDbMakeNonPrintableKeyA: Non-printable character " "collision detected; key was damaged" )); } if (Flags & MEMDB_CONVERT_WILD_QMARK_TO_ASCII_3) { if (_mbsnextc (KeyName) == '?') { _setmbchar (KeyName, 3); } DEBUGMSG_IF (( _mbsnextc (_mbsinc (KeyName)) == 3, DBG_WHOOPS, "MemDbMakeNonPrintableKeyA: Non-printable character " "collision detected; key was damaged" )); } KeyName = _mbsinc (KeyName); } } VOID MemDbMakeNonPrintableKeyW ( IN OUT PWSTR KeyName, IN UINT Flags ) { while (*KeyName) { if (Flags & MEMDB_CONVERT_DOUBLEWACKS_TO_ASCII_1) { if (KeyName[0] == L'\\' && KeyName[1] == L'\\') { KeyName[0] = 1; KeyName[1] = 1; KeyName++; } DEBUGMSG_IF (( KeyName[0] == 1, DBG_WHOOPS, "MemDbMakeNonPrintableKeyW: Non-printable character " "collision detected; key was damaged" )); } if (Flags & MEMDB_CONVERT_WILD_STAR_TO_ASCII_2) { if (KeyName[0] == L'*') { KeyName[0] = 2; } DEBUGMSG_IF (( KeyName[1] == 2, DBG_WHOOPS, "MemDbMakeNonPrintableKeyW: Non-printable character " "collision detected; key was damaged" )); } if (Flags & MEMDB_CONVERT_WILD_QMARK_TO_ASCII_3) { if (KeyName[0] == L'*') { KeyName[0] = 3; } DEBUGMSG_IF (( KeyName[1] == 3, DBG_WHOOPS, "MemDbMakeNonPrintableKeyW: Non-printable character " "collision detected; key was damaged" )); } KeyName++; } } /*++ Routine Description: MemDbMakePrintableKey converts the ASCII 1 characters to backslashes, restoring the string converted by MemDbMakeNonPrintableKey. This routine is desinged to be expanded for other types of escape processing. Arguments: KeyName - Specifies the key text; receives the converted text. The DBCS version may grow the text buffer, so the text buffer must be twice the length of the inbound string. Flags - Specifies the type of conversion. Currently only MEMDB_CONVERT_DOUBLEWACKS_TO_ASCII_1 is supported. Return Value: none --*/ VOID MemDbMakePrintableKeyA ( IN OUT PSTR KeyName, IN UINT Flags ) { while (*KeyName) { if (Flags & MEMDB_CONVERT_DOUBLEWACKS_TO_ASCII_1) { if (_mbsnextc (KeyName) == 1) { _setmbchar (KeyName, '\\'); } } if (Flags & MEMDB_CONVERT_WILD_STAR_TO_ASCII_2) { if (_mbsnextc (KeyName) == 2) { _setmbchar (KeyName, '*'); } } if (Flags & MEMDB_CONVERT_WILD_QMARK_TO_ASCII_3) { if (_mbsnextc (KeyName) == 3) { _setmbchar (KeyName, '?'); } } KeyName = _mbsinc (KeyName); } } VOID MemDbMakePrintableKeyW ( IN OUT PWSTR KeyName, IN UINT Flags ) { while (*KeyName) { if (Flags & MEMDB_CONVERT_DOUBLEWACKS_TO_ASCII_1) { if (KeyName[0] == 1) { KeyName[0] = L'\\'; } } if (Flags & MEMDB_CONVERT_WILD_STAR_TO_ASCII_2) { if (KeyName[0] == 2) { KeyName[0] = L'*'; } } if (Flags & MEMDB_CONVERT_WILD_QMARK_TO_ASCII_3) { if (KeyName[0] == 3) { KeyName[0] = L'?'; } } KeyName++; } }