IPAK extractor (+ library and source)
So after making a deep analysis of .ipak files (texture container files), I got all the needed info to make an IPAK extractor. Sadly only some texture files (iwi files) can be converted to dds format, but well, I guess it will be possible in some amount of time. I have also decided to make the extracting process in a managed c++ dll, so you can use it too if you want. Next thing im going to code is a way to inject modded iwi's into ipaks. By the way, you need to have a minimum of 256MB of RAM in your computer, and I also think that iwi files dont have name now
This library has 3 functions:
Code:
static int ExtractFiles(System::IntPtr ipakDirectoryPtr, System::IntPtr extractDirectoryPtr, bool realExtract, bool skipFilePadding, bool sleepAtFinish);
static int ExtractFileID(System::IntPtr ipakDirectoryPtr, DWORD fileID, System::IntPtr extractDirectoryPtr, bool realExtract, bool skipFilePadding, bool showConsole, bool sleepAtFinish);
static int GetFileCount(System::IntPtr ipakDirectoryPtr);
- ExtractFiles extracts all files from the specified ipak
- ExtractFileID extracts the file with the specified ID from the specified ipak
- GetFileCount tells you how many files are there in an ipak
- If realExtract is true, then padding and pre-headers in an iwi file are skipped (recommended to get original iwi file)
- If skipFilePadding is true, then padding INSIDE the file is deleted, I dont know if this is good, so it is disabled by default, you could modify extractor source and enable this feature yourself
- If showConsole is true, then when the extraction process starts a console pops up with progress information
- If sleepAtFinish is true, then the console sleeps 1 second when it finished extracting
The library can also return error codes, which are the following:
Code:
#define SUCCESS 0x00000001 // success
#define ERROR_LOW_FILESIZE 0xFFFFFFF0 // if size of ipak is lower than 16 bytes
#define ERROR_WRONG_IDENTIFIER 0xFFFFFFF1 // ipak has wrong identifier
#define ERROR_WRONG_FILESIZE 0xFFFFFFF2 // ipak has wrong filesize
#define ERROR_NULLINFO_INFO_SECTION 0xFFFFFFF3 // ipak has null info about info section
#define ERROR_START_FILEMAP_FAILED 0xFFFFFFF4 // MapViewOfFile() failed
#define ERROR_NULLINFO_DATA_SECTION 0xFFFFFFF5 // ipak has null info about data section
#define ERROR_INFO_SECTION_TOO_BIG 0xFFFFFFF6 // if info section > 256mb
#define ERROR_IPAK_FILESIZE_TOO_BIG 0xFFFFFFF7 // if a file from ipak > 256mb
#define ERROR_IPAKFILE_NOTFOUND 0xFFFFFFF8 // ipak file not found
#define ERROR_FILEID_NOTFOUND 0xFFFFFFF9 // only when using ExtractFileID(), it cant find specified file
Credits: kokole, none other stated
virus scans: ipak_manager_v23.rar - Jotti's malware scan
https://www.virustotal.com/file/f741...is/1354679026/