#include #include #include #include #include #include #include #include void tx_table_file(struct game_data *game, wchar_t *buf) { // Get temp directory path wchar_t tempDir[MAX_PATH]; GetTempPathW(MAX_PATH, tempDir); // Memorymap the base module HANDLE baseFile = CreateFileA(game->base_module_name, FILE_READ_ACCESS, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (!baseFile) { msg_err_a("Could not open file: %s", game->base_module_name); } HANDLE hBaseMap = CreateFileMappingA(baseFile, NULL, PAGE_READONLY, 0, 0, NULL); char *baseMap = MapViewOfFile(hBaseMap, FILE_MAP_READ, 0, 0, 0); if (!baseMap) { msg_err_a("Could not create file mapping for %s", game->base_module_name); } // Checksum the TXS section IMAGE_SECTION_HEADER *txsSection = pe_find_section(baseMap, game->txs_section_name); uint32_t txsChecksum = crc32c(0, baseMap + txsSection->PointerToRawData, txsSection->SizeOfRawData); // Format the path wsprintfW(buf, L"%sjadeite\\" JADEITE_VERSION "\\%hs.%x.dat", tempDir, game->base_module_name, txsChecksum); // Cleanup UnmapViewOfFile(baseMap); CloseHandle(hBaseMap); CloseHandle(baseFile); }