1 /*- 2 *********************************************************************** 3 * 4 * $Id: rtimes.h,v 1.20 2014/07/18 06:40:45 mavrik Exp $ 5 * 6 *********************************************************************** 7 * 8 * Copyright 2008-2014 The FTimes Project, All Rights Reserved. 9 * 10 *********************************************************************** 11 */ 12 #ifndef _RTIMES_H_INCLUDED 13 #define _RTIMES_H_INCLUDED 14 15 /*- 16 *********************************************************************** 17 * 18 * Defines. 19 * 20 *********************************************************************** 21 */ 22 #define PROGRAM "rtimes" 23 #define VERSION "1.0.10" 24 25 #define ER -1 26 #define ER_OK 0 27 28 #define XER_OK 0 29 #define XER_Usage 1 30 #define XER_Abort 2 31 #define XER_BootStrap 3 32 #define XER_ProcessArguments 4 33 #define XER_WorkHorse 5 34 35 #define RTIMES_MAP_MODE 0x00000001 36 37 #define RTIMES_MIN_DATA_SIZE 1 38 #define RTIMES_MAX_DATA_SIZE 1073741824 /* 1 GB */ 39 40 #define MESSAGE_SIZE (1024 * sizeof(TCHAR)) 41 42 #define NEUTER_ENCODING_RTIMES 0 43 #define NEUTER_ENCODING_FULL 1 44 #define RTIMES_ERROR_LENGTH 512 45 #define RTIMES_TIME_FORMAT _T("%04d-%02d-%02d %02d:%02d:%02d.%03d") 46 #define RTIMES_TIME_FORMAT_LENGTH 24 47 48 #define RTIMES_DEFAULT_CLASS_STRING_SIZE (512 * sizeof(TCHAR)) 49 #define RTIMES_DEFAULT_DATA_SIZE 1024 50 #define RTIMES_DEFAULT_NAME_SIZE 1024 51 52 #define RTIMES_KEYNAME_SIZE ((255 + 1) * 2) /* Microsoft states that 255 "characters" is the limit. We add 1 (for the terminator) and multiply by 2 (to handle Unicode). */ 53 54 #define RTIMES_MAX_DO_OVERS 3 55 #define RTIMES_TYPE_SIZE (32 * sizeof(TCHAR)) 56 57 #define RTIMES_FLAG_KEY 0x00000001 58 #define RTIMES_FLAG_VALUE 0x00000002 59 #define RTIMES_FLAG_DEFAULT_VALUE 0x00000004 60 #define RTIMES_FLAG_REQUESTED_TRUNCATE 0x00000008 61 #define RTIMES_FLAG_MANDATORY_TRUNCATE 0x00000010 62 #define RTIMES_FLAG_OWNER_MISSING 0x00000020 63 #define RTIMES_FLAG_GROUP_MISSING 0x00000040 64 #define RTIMES_FLAG_CLASS_MISSING 0x00000080 65 #define RTIMES_FLAG_WTIME_MISSING 0x00000100 66 #define RTIMES_FLAG_DATA_MISSING 0x00000200 67 #define RTIMES_FLAG_MANDATORY_NAME_TRUNCATE 0x00000400 68 #define RTIMES_FLAG_OWNER_INVALID 0x00000800 69 #define RTIMES_FLAG_DACL_INVALID 0x00001000 70 #define RTIMES_FLAG_DACL_MISSING 0x00002000 71 #define RTIMES_FLAG_DACL_OMITTED 0x00004000 72 #define RTIMES_FLAG_GROUP_INVALID 0x00008000 73 74 /*- 75 *********************************************************************** 76 * 77 * Typedefs. 78 * 79 *********************************************************************** 80 */ 81 typedef enum _RTIMES_OPTION_IDS 82 { 83 OPT_MaxData, 84 } RTIMES_OPTION_IDS; 85 86 typedef struct _RTIMES_PROPERTIES 87 { 88 int iRunMode; 89 DWORD dwMaxData; 90 } RTIMES_PROPERTIES; 91 92 typedef struct _RTIMES_TODO_LIST 93 { 94 HKEY dwHive; 95 TCHAR atcHive[(256 * sizeof(TCHAR))]; 96 TCHAR atcKey[(256 * sizeof(TCHAR))]; 97 } RTIMES_TODO_LIST; 98 99 /*- 100 *********************************************************************** 101 * 102 * Global Variables. 103 * 104 *********************************************************************** 105 */ 106 107 /*- 108 *********************************************************************** 109 * 110 * Function Prototypes. 111 * 112 *********************************************************************** 113 */ 114 int main(int iArgumentCount, TCHAR *pptcArgumentVector[]); 115 void FormatWinxError(DWORD dwError, TCHAR **pptcMessage); 116 int RTimesBootStrap(TCHAR *ptcError); 117 int RTimesEnumerateKeys(FILE *pFile, HKEY hKey, TCHAR *ptcPath, TCHAR *ptcError); 118 int RTimesEnumerateValues(FILE *pFile, HKEY hKey, TCHAR *ptcPath, TCHAR *ptcError); 119 RTIMES_PROPERTIES *RTimesGetPropertiesReference(void); 120 int RTimesMapKey(FILE *pFile, HKEY hKey, TCHAR *ptcPath, TCHAR *ptcError); 121 int RTimesMd5ToHex(unsigned char *pucMd5, TCHAR *ptcHexHash); 122 TCHAR *RTimesNeuterEncodeData(unsigned char *pucData, int iLength, int iOptions, TCHAR *ptcError); 123 TCHAR *RTimesNewPath(TCHAR *ptcPath, TCHAR *ptcName, TCHAR *ptcDelimiter, TCHAR *ptcError); 124 RTIMES_PROPERTIES *RTimesNewProperties(TCHAR *ptcError); 125 int RTimesOptionHandler(OPTIONS_TABLE *psOption, TCHAR *ptcValue, RTIMES_PROPERTIES *psProperties, TCHAR *ptcError); 126 int RTimesProcessArguments(int iArgumentCount, TCHAR *pptcArgumentVector[], RTIMES_PROPERTIES *psProperties, TCHAR *ptcError); 127 void RTimesSetPropertiesReference(RTIMES_PROPERTIES *psProperties); 128 TCHAR *RTimesSidToString(SID *psSid, TCHAR *ptcError); 129 void RTimesUsage(void); 130 void RTimesVersion(void); 131 int RTimesWorkHorse(RTIMES_PROPERTIES *psProperties, TCHAR *ptcError); 132 void RTimesWriteValueRecord(FILE *pFile, DWORD dwFlags, DWORD dwType, BYTE *pbyteData, DWORD dwDataSize, TCHAR *ptcPath, TCHAR *ptcName); 133 int RTimesWTimeToString(FILETIME *pFileTime, TCHAR *ptcTime); 134 135 #endif /* !_RTIMES_H_INCLUDED */ 136