/*++ Copyright (c) 1992 Microsoft Corporation Module Name: Crtools.h Abstract: This module is the master header file for the Configuration Registry Tools (CRTools) library. Author: David J. Gilman (davegi) 02-Jan-1992 Environment: Windows, Crt - User Mode --*/ #include #include // // Additional type to declare string arrays. // // // Assertion/debug macros/functions. // #ifdef UNICODE #define NUL_SIZE ( 2 ) typedef WCHAR TSTR; #else #define NUL_SIZE ( 1 ) typedef char TSTR; #endif // UNICODE #if DBG VOID CrAssert( IN PSTR FailedAssertion, IN PSTR FileName, IN DWORD LineNumber, IN PSTR Message OPTIONAL ); #define ASSERT( exp ) \ if( !( exp )) \ CrAssert( #exp, __FILE__, __LINE__, NULL ) #define ASSERT_MESSAGE( exp, msg ) \ if( !( exp )) \ CrAssert( #exp, __FILE__, __LINE__, msg ) #define ASSERT_IS_KEY( Key ) \ ASSERT( ARGUMENT_PRESENT( Key )); \ ASSERT( Key->Signature == KEY_SIGNATURE ); #else #define ASSERT( exp ) #define ASSERT_MESSAGE( msg, exp ) #define ASSERT_IS_KEY( Key ) #endif // DBG // // Macro to check for a switch character. // #define isswitch( s ) \ ((( s ) == '-' ) || (( s ) == '/' )) // // Macro to check if an argument is present (i.e. non-NULL). // #define ARGUMENT_PRESENT( arg ) \ ((( PVOID ) arg ) != (( PVOID ) NULL )) // // Compare two blocks of memory for equality. // // BOOL // Compare( // IN PVOID Block1, // IN PVOID Block2, // IN DWORD NumberOfBytes // ); // #define Compare( s1, s2, c ) \ ( memcmp(( PVOID )( s1 ), ( PVOID )( s2 ), ( size_t )( c )) == 0 ) // // Compute the length (in bytes) of a Unicode string w/o the trailing NUL. // #define LENGTH( str ) ( sizeof( str ) - NUL_SIZE ) // // Check the success of a Win32 Registry API. // #define REG_API_SUCCESS( api ) \ ASSERT_MESSAGE( Error == ERROR_SUCCESS, #api ) // // // A KEY structure is used to hold information about a Registry Key. // typedef struct _KEY KEY, *PKEY; struct _KEY { PKEY Parent; HKEY KeyHandle; PSTR SubKeyName; PSTR SubKeyFullName; PSTR ClassName; DWORD ClassLength; DWORD TitleIndex; DWORD NumberOfSubKeys; DWORD MaxSubKeyNameLength; DWORD MaxSubKeyClassLength; DWORD NumberOfValues; DWORD MaxValueNameLength; DWORD MaxValueDataLength; DWORD SecurityDescriptorLength; FILETIME LastWriteTime; #if DBG DWORD Signature; #endif }; #define FILE_TIME_STRING_LENGTH ( 25 * sizeof( TCHAR )) #define KEY_SIGNATURE ( 0xABBABAAB ) #define HKEY_CLASSES_ROOT_STRING "HKEY_CLASSES_ROOT" #define HKEY_CURRENT_USER_STRING "HKEY_CURRENT_USER" #define HKEY_LOCAL_MACHINE_STRING "HKEY_LOCAL_MACHINE" #define HKEY_USERS_STRING "HKEY_USERS" extern KEY KeyClassesRoot; extern KEY KeyCurrentUser; extern KEY KeyLocalMachine; extern KEY KeyUsers; PKEY AllocateKey( IN PSTR MachineName, IN PKEY Parent, IN PSTR SubKeyName ); VOID DisplayData( IN PBYTE ValueData, IN DWORD ValueDataLength ); VOID DisplayKey( IN PKEY Key, IN BOOL Values, IN BOOL Data ); VOID DisplayKeys( IN PKEY Key, IN BOOL Values, IN BOOL Data, IN BOOL Recurse ); VOID DisplayKeyInformation( IN PKEY Key ); VOID DisplayMessage( IN BOOL Terminate, IN PSTR Format, IN ... ); VOID DisplayValues( IN PKEY Key, IN BOOL Data ); PSTR FormatFileTime( IN PFILETIME FileTime OPTIONAL, IN PSTR Buffer OPTIONAL ); VOID FreeKey( IN PKEY Key ); PKEY ParseKey( IN PSTR SubKeyName );