1 /*- 2 *********************************************************************** 3 * 4 * $Id: ftimes-xpa.h,v 1.4 2014/07/18 06:40:45 mavrik Exp $ 5 * 6 *********************************************************************** 7 * 8 * Copyright 2009-2014 The FTimes Project, All Rights Reserved. 9 * 10 *********************************************************************** 11 */ 12 #ifndef _FTIMES_XPA_H_INCLUDED 13 #define _FTIMES_XPA_H_INCLUDED 14 15 /*- 16 *********************************************************************** 17 * 18 * Defines 19 * 20 *********************************************************************** 21 */ 22 #define PROGRAM_NAME "ftimes-xpa" 23 #define VERSION "1.0.0" 24 #define FTIMES_XPA_VERSION_0_1 0x00000001 /* Major.Minor */ 25 #define FTIMES_XPA_VERSION FTIMES_XPA_VERSION_0_1 26 27 #define ER -1 28 #define ER_OK 0 29 30 #define XER_OK 0 31 #define XER_Usage 1 32 #define XER_Abort 2 33 #define XER_BootStrap 3 34 #define XER_ProcessArguments 4 35 36 #define FTIMES_XPA_EXTENDED_PATH_PREFIX "\\\\?\\" 37 38 #define FTIMES_XPA_CHUNK_TYPE_NULL 0x58504100 39 #define FTIMES_XPA_CHUNK_TYPE_HEAD 0x58504101 40 #define FTIMES_XPA_CHUNK_TYPE_HKVP 0x58504102 41 #define FTIMES_XPA_CHUNK_TYPE_DATA 0x58504103 42 #define FTIMES_XPA_CHUNK_TYPE_DKVP 0x58504104 43 #define FTIMES_XPA_CHUNK_TYPE_JOIN 0x58504105 44 #define FTIMES_XPA_CHUNK_TYPE_TKVP 0x585041fe 45 #define FTIMES_XPA_CHUNK_TYPE_TAIL 0x585041ff 46 47 #define FTIMES_XPA_KEY_ID_NAME 0 48 #define FTIMES_XPA_KEY_ID_MD5 1 49 #define FTIMES_XPA_KEY_ID_SHA1 2 50 #define FTIMES_XPA_KEY_ID_DATA_SIZE 3 51 #define FTIMES_XPA_KEY_ID_EXPECTED_SIZE 4 52 #define FTIMES_XPA_KEY_ID_REPORTED_SIZE 5 53 #define FTIMES_XPA_KEY_ID_HEAD_FLAGS 6 54 #define FTIMES_XPA_KEY_ID_TAIL_FLAGS 7 55 56 #define FTIMES_XPA_MEMBER_HEAD_FLAG_OPEN_ERROR 0x00010000 57 58 #define FTIMES_XPA_MEMBER_TAIL_FLAG_READ_ERROR 0x00010000 59 60 #define FTIMES_XPA_KIVL_SIZE 4 /* KIVL --> Key ID / Value Length */ 61 #define FTIMES_XPA_MAX_VALUE_LENGTH 1048576 62 63 #define FTIMES_XPA_ARCHIVE_MODE 0x00000001 64 65 #define FTIMES_XPA_DEFAULT_BLOCKSIZE 32768 66 #define FTIMES_XPA_MIN_BLOCKSIZE 1 67 #define FTIMES_XPA_MAX_BLOCKSIZE 0x10000000 /* 2^28 = 268435456 */ 68 69 /*- 70 *********************************************************************** 71 * 72 * Typedefs 73 * 74 *********************************************************************** 75 */ 76 typedef struct _FTIMES_XPA_HANDLE 77 { 78 char *pcDecodedName; 79 FILE *pFile; 80 #ifdef WIN32 81 char *pcFileA; 82 HANDLE hFile; 83 int iFile; 84 wchar_t *pcFileW; 85 #endif 86 } FTIMES_XPA_HANDLE; 87 88 typedef struct _FTIMES_XPA_HEADER 89 { 90 APP_UI32 ui32Magic; 91 APP_UI32 ui32Version; 92 APP_UI32 ui32ThisChunkSize; 93 APP_UI32 ui32LastChunkSize; 94 APP_UI32 ui32ChunkId; 95 } FTIMES_XPA_HEADER; 96 #define FTIMES_XPA_HEADER_SIZE_0_1 20 97 #define FTIMES_XPA_HEADER_SIZE FTIMES_XPA_HEADER_SIZE_0_1 98 99 typedef enum _FTIMES_XPA_OPTION_IDS 100 { 101 OPT_Blocksize, 102 OPT_ListFile, 103 } FTIMES_XPA_OPTION_IDS; 104 105 typedef struct _FTIMES_XPA_PROPERTIES 106 { 107 char *pcListFile; 108 char **ppcFileVector; 109 int iRunMode; 110 int iFileCount; 111 APP_UI32 ui32Blocksize; 112 unsigned char *pucData; 113 } FTIMES_XPA_PROPERTIES; 114 115 /*- 116 *********************************************************************** 117 * 118 * Function Prototypes 119 * 120 *********************************************************************** 121 */ 122 void FTimesXpaAbort(); 123 void FTimesXpaAddMember(char *pcEncodedName, unsigned char *pucData, APP_UI32 ui32Blocksize, char *pcError); 124 #ifdef WINNT 125 BOOL FTimesXpaAdjustPrivileges(LPCTSTR lpcPrivilege); 126 #endif 127 int FTimesXpaBootStrap(char *pcError); 128 char *FTimesXpaDecodeString(char *pcEncoded, char *pcError); 129 #ifdef WINNT 130 void FTimesXpaFormatWinxError(DWORD dwError, TCHAR **pptcMessage); 131 #endif 132 void FTimesXpaFreeHandle(FTIMES_XPA_HANDLE *psHandle); 133 void FTimesXpaFreeProperties(FTIMES_XPA_PROPERTIES *psProperties); 134 FTIMES_XPA_HANDLE *FTimesXpaGetHandle(char *pcEncodedName, char *pcError); 135 FTIMES_XPA_PROPERTIES *FTimesXpaGetPropertiesReference(void); 136 FTIMES_XPA_PROPERTIES *FTimesXpaNewProperties(char *ptcError); 137 int FTimesXpaOptionHandler(OPTIONS_TABLE *psOption, char *pcValue, FTIMES_XPA_PROPERTIES *psProperties, char *pcError); 138 int FTimesXpaProcessArguments(int iArgumentCount, char *ppcArgumentVector[], FTIMES_XPA_PROPERTIES *psProperties, char *pcError); 139 #ifdef WINNT 140 int FTimesXpaSetPrivileges(char *pcError); 141 #endif 142 void FTimesXpaSetPropertiesReference(FTIMES_XPA_PROPERTIES *psProperties); 143 void FTimesXpaUsage(void); 144 wchar_t *FTimesXpaUtf8ToWide(char *pcString, int iUtf8Size, char *pcError); 145 void FTimesXpaVersion(void); 146 int FTimesXpaWriteData(FILE *pFile, unsigned char *pucData, int iLength, char *pcError); 147 int FTimesXpaWriteHeader(FILE *pFile, FTIMES_XPA_HEADER *psFileHeader, char *pcError); 148 int FTimesXpaWriteKvp(FILE *pFile, int iKeyId, void *pvValue, int iValueLength, char *pcError); 149 150 #endif /* !_FTIMES_XPA_H_INCLUDED */ 151