11 #define WIN32_LEAN_AND_MEAN 32 #define PATH_MAX MAX_PATH 35 #if !defined(C_ASSERT) 36 #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1] 40 #define DIR_SEPARATOR_CHAR '\\' 41 #define DIR_SEPARATOR_STRING "\\" 43 #define strcasecmp _stricmp 44 #define strdup _strdup 46 #define DIR_SEPARATOR_CHAR '/' 47 #define DIR_SEPARATOR_STRING "/" 65 #define NORMAL_MASK 0x000000FF 66 #define SPECIAL_MASK 0xFFFFFF00 67 #define MIN_TRACE 0x00000001 68 #define MID_TRACE 0x00000002 69 #define MAX_TRACE 0x00000003 71 #define DEBUG_MEMORY 0x00000100 78 #define DPRINT(_t_, _x_) \ 79 if ((_t_ > NORMAL_MASK) \ 80 ? (DebugTraceLevel & _t_) > NORMAL_MASK \ 81 : (DebugTraceLevel & NORMAL_MASK) >= _t_) { \ 82 printf("(%s:%d)(%s) ", __FILE__, __LINE__, __FUNCTION__); \ 87 #define ASSERT(_b_) { \ 89 printf("(%s:%d)(%s) ASSERTION: ", __FILE__, __LINE__, __FUNCTION__); \ 98 #define DPRINT(_t_, _x_) do { } while(0) 108 #define CAB_SIGNATURE 0x4643534D // "MSCF" 109 #define CAB_VERSION 0x0103 110 #define CAB_BLOCKSIZE 32768 112 #define CAB_COMP_MASK 0x00FF 113 #define CAB_COMP_NONE 0x0000 114 #define CAB_COMP_MSZIP 0x0001 115 #define CAB_COMP_QUANTUM 0x0002 116 #define CAB_COMP_LZX 0x0003 118 #define CAB_FLAG_HASPREV 0x0001 119 #define CAB_FLAG_HASNEXT 0x0002 120 #define CAB_FLAG_RESERVE 0x0004 122 #define CAB_ATTRIB_READONLY 0x0001 123 #define CAB_ATTRIB_HIDDEN 0x0002 124 #define CAB_ATTRIB_SYSTEM 0x0004 125 #define CAB_ATTRIB_VOLUME 0x0008 126 #define CAB_ATTRIB_DIRECTORY 0x0010 127 #define CAB_ATTRIB_ARCHIVE 0x0020 128 #define CAB_ATTRIB_EXECUTE 0x0040 129 #define CAB_ATTRIB_UTF_NAME 0x0080 131 #define CAB_FILE_MAX_FOLDER 0xFFFC 132 #define CAB_FILE_CONTINUED 0xFFFD 133 #define CAB_FILE_SPLIT 0xFFFE 134 #define CAB_FILE_PREV_NEXT 0xFFFF 254 #define CAB_STATUS_SUCCESS 0x00000000 255 #define CAB_STATUS_FAILURE 0x00000001 256 #define CAB_STATUS_NOMEMORY 0x00000002 257 #define CAB_STATUS_CANNOT_OPEN 0x00000003 258 #define CAB_STATUS_CANNOT_CREATE 0x00000004 259 #define CAB_STATUS_CANNOT_READ 0x00000005 260 #define CAB_STATUS_CANNOT_WRITE 0x00000006 261 #define CAB_STATUS_FILE_EXISTS 0x00000007 262 #define CAB_STATUS_INVALID_CAB 0x00000008 263 #define CAB_STATUS_NOFILE 0x00000009 264 #define CAB_STATUS_UNSUPPCOMP 0x0000000A 291 #define CS_SUCCESS 0x0000 292 #define CS_NOMEMORY 0x0001 293 #define CS_BADSTREAM 0x0002 297 #define CAB_CODEC_RAW 0x00 298 #define CAB_CODEC_LZX 0x01 299 #define CAB_CODEC_MSZIP 0x02 355 #ifndef CAB_READ_ONLY 392 #ifndef CAB_READ_ONLY 418 #ifndef CAB_READ_ONLY 473 #ifndef CAB_READ_ONLY
ULONG LocateFile(const char *FileName, PCFFILE_NODE *File)
struct _CFFOLDER * PCFFOLDER
ULONG FindFirst(PCAB_SEARCH Search)
void DestroyDataNodes(PCFFOLDER_NODE FolderNode)
virtual void OnVerboseMessage(const char *Message)
struct _CFHEADER * PCFHEADER
ULONG ScratchFilePosition
ULONG GetAttributesOnFile(PCFFILE_NODE File)
ULONG WriteFileToScratchStorage(PCFFILE_NODE FileNode)
ULONG WriteCabinetHeader(bool MoreDisks)
virtual ULONG Compress(void *OutputBuffer, void *InputBuffer, ULONG InputLength, PULONG OutputLength)=0
std::list< PCFFOLDER_NODE > FolderList
struct _CAB_SEARCH * PCAB_SEARCH
ULONG SetAttributesOnFile(char *FileName, USHORT FileAttributes)
IN PVOID IN PVOID IN USHORT IN USHORT Size
PCFFOLDER_NODE LocateFolderNode(ULONG Index)
std::list< PSEARCH_CRITERIA > CriteriaList
ULONG ComputeChecksum(void *Buffer, ULONG Size, ULONG Seed)
PCFFOLDER_NODE FolderNode
std::list< PCFFILE_NODE >::iterator Next
PCFDATA_NODE CurrentDataNode
std::string CreateCabFilename(PCFFILE_NODE Node)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
void DestroyFolderNodes()
PCFDATA_NODE NewDataNode(PCFFOLDER_NODE FolderNode)
void NormalizePath(std::string &Path)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
ULONG GetFileTimes(FILE *FileHandle, PCFFILE_NODE File)
void SetCabinetName(const char *FileName)
const char * GetDestinationPath()
void SetMaxDiskSize(ULONG Size)
virtual void OnAdd(PCFFILE Entry, const char *FileName)
virtual bool OnDiskLabel(ULONG Number, char *Label)
ULONG CommitDisk(ULONG MoreDisks)
ULONG ExtractFile(const char *FileName)
std::string CabinetReservedFile
_Check_return_opt_ _CRTIMP int __cdecl fseek(_Inout_ FILE *_File, _In_ long _Offset, _In_ int _Origin)
std::list< PCFDATA_NODE > DataList
PCFFOLDER_NODE NewFolderNode()
struct _CAB_SEARCH CAB_SEARCH
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE _In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Out_ PIO_STATUS_BLOCK _In_opt_ PLARGE_INTEGER _In_ ULONG FileAttributes
class CCFDATAStorage * ScratchFile
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
ULONG ReadBlock(void *Buffer, ULONG Size, PULONG BytesRead)
_In_ WDFCOLLECTION _In_ ULONG Index
ULONG WriteFolderEntries()
virtual void OnDiskChange(const char *CabinetName, const char *DiskLabel)
void DestroySearchCriteria()
void ConvertDateAndTime(time_t *Time, PUSHORT DosDate, PUSHORT DosTime)
void DestroyDeletedFolderNodes()
void ConvertPath(std::string &Path)
ULONG ReadDataBlocks(PCFFOLDER_NODE FolderNode)
ULONG FindNext(PCAB_SEARCH Search)
void DestroyDeletedFileNodes()
void SelectCodec(LONG Id)
virtual bool OnOverwrite(PCFFILE Entry, const char *FileName)
ULONG ReadString(char *String, LONG MaxLength)
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
WDF_CHILD_LIST_ITERATOR iterator
virtual void OnExtract(PCFFILE Entry, const char *FileName)
std::list< PCFFILE_NODE > FileList
PRTL_UNICODE_STRING_BUFFER Path
ULONG CabinetReservedFileSize
ULONG GetAbsoluteOffset(PCFFILE_NODE File)
bool SetCabinetReservedFile(const char *FileName)
void SetDestinationPath(const char *DestinationPath)
PCFFILE_NODE NewFileNode()
PCFFOLDER_NODE CurrentFolderNode
virtual ULONG Uncompress(void *OutputBuffer, void *InputBuffer, ULONG InputLength, PULONG OutputLength)=0
bool CreateSimpleCabinet()
ULONG AddFile(const std::string &FileName, const std::string &TargetFolder)
void * CabinetReservedFileBuffer
bool IsSeparator(char Char)
_Check_return_ _CRTIMP long __cdecl ftell(_Inout_ FILE *_File)
ULONG AddSearchCriteria(const std::string &SearchCriteria, const std::string &TargetFolder)
std::string GetFileName(const std::string &Path)
virtual bool OnCabinetName(ULONG Number, char *Name)
bool MatchFileNamePattern(const char *FileName, const char *Pattern)
ULONG GetCurrentDiskNumber()
ULONG InitCabinetHeader()
static PLARGE_INTEGER Time
base of all file and directory entries
bool SetCompressionCodec(const char *CodecName)
ULONG WriteDisk(ULONG MoreDisks)
ULONG CommitDataBlocks(PCFFOLDER_NODE FolderNode)