UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
IPlatformFilePak.cpp File Reference
#include "IPlatformFilePak.h"
#include "HAL/FileManager.h"
#include "IO/PlatformIoDispatcher.h"
#include "Math/GuardedInt.h"
#include "Misc/CoreMisc.h"
#include "Misc/CommandLine.h"
#include "Async/AsyncWork.h"
#include "Serialization/MemoryReader.h"
#include "HAL/IConsoleManager.h"
#include "HAL/LowLevelMemTracker.h"
#include "Misc/CoreDelegates.h"
#include "Misc/CoreDelegatesInternal.h"
#include "Misc/App.h"
#include "Misc/ConfigCacheIni.h"
#include "Misc/SecureHash.h"
#include "Misc/ScopeLock.h"
#include "HAL/FileManagerGeneric.h"
#include "SignedArchiveReader.h"
#include "Misc/AES.h"
#include "GenericPlatform/GenericPlatformChunkInstall.h"
#include "Async/AsyncFileHandle.h"
#include "Templates/Greater.h"
#include "Serialization/ArchiveProxy.h"
#include "Serialization/MemoryWriter.h"
#include "Misc/Base64.h"
#include "HAL/DiskUtilizationTracker.h"
#include "Stats/StatsMisc.h"
#include "HAL/ThreadHeartBeat.h"
#include "ProfilingDebugging/CsvProfiler.h"
#include "Misc/EncryptionKeyManager.h"
#include "ProfilingDebugging/ScopedTimers.h"
#include "Async/MappedFileHandle.h"
#include "IoDispatcherFileBackend.h"
#include "FileIoDispatcherBackend.h"
#include "Misc/PackageName.h"
#include "Misc/PathViews.h"
#include "ProfilingDebugging/LoadTimeTracker.h"
#include "IO/IoContainerHeader.h"
#include "FilePackageStore.h"
#include "Compression/OodleDataCompression.h"
#include "IO/IoStore.h"
#include "Experimental/IO/IoStatusError.h"
#include "String/RemoveFrom.h"
#include "Algo/AnyOf.h"
#include "PakFile.h"
#include "PakFile.inl"
#include "PakIntervalTree.inl"
#include "Async/TaskGraphInterfaces.h"

Classes

class  UE::PakFile::Private::FPreventDuplicatesVisitorBase
 
class  UE::PakFile::Private::FPreventDuplicatesVisitor
 
class  UE::PakFile::Private::FPakFileDirectoryVisitorBase
 
class  UE::PakFile::Private::FPakFileDirectoryVisitor
 
class  UE::PakFile::Private::FPreventDuplicatesStatVisitor
 
class  UE::PakFile::Private::FPakFileDirectoryStatVisitor
 
class  FPakSizeRequest
 
class  IPakRequestor
 
class  FPakPrecacher
 
struct  FCachedAsyncBlock
 
class  FPakReadRequestBase
 
class  FPakReadRequest
 
class  FPakEncryptedReadRequest
 
class  FPakProcessedReadRequest
 
class  FAsyncIOCPUWorkTask
 
class  FAsyncIOSignatureCheckTask
 
class  FPakAsyncReadFileHandle
 
class  FBypassPakAsyncReadFileHandle
 
class  FMappedRegionPakProxy
 
class  FMappedFilePakProxy
 
class  FPakSimpleEncryption
 
struct  FCompressionScratchBuffers
 
class  FCompressionScratchBuffersStack
 
class  FScopedCompressionScratchBuffers
 
class  FPakCompressedReaderPolicy< EncryptionPolicy >
 
class  FPakCompressedReaderPolicy< EncryptionPolicy >::FPakUncompressTask
 
class  FPakExec
 
struct  UE::PakFile::Private::FHandleMountPaksExDelegate
 
struct  UE::PakFile::Private::FPakEntryFilenameSetKeyFuncs< bInAllowDuplicateKeys >
 

Namespaces

namespace  UE
 
namespace  UE::PakFile
 
namespace  UE::PakFile::Private
 

Macros

#define DISABLE_NONUFS_INI_WHEN_COOKED   0
 
#define ALLOW_INI_OVERRIDE_FROM_COMMANDLINE   0
 
#define HAS_PLATFORM_PAK_INSTALL_CHECK   0
 
#define ALL_PAKS_WILDCARD   "*.pak"
 
#define MOUNT_STARTUP_PAKS_WILDCARD   ALL_PAKS_WILDCARD
 
#define EXCLUDE_NONPAK_UE_EXTENSIONS   1
 
#define USE_PAK_PRECACHE   (!PLATFORM_BYPASS_PAK_PRECACHE && !IS_PROGRAM && !WITH_EDITOR)
 
#define PAK_CACHE_GRANULARITY   (1024*64)
 
#define PAK_CACHE_MAX_REQUESTS   (8)
 
#define PAK_CACHE_MAX_PRIORITY_DIFFERENCE_MERGE   (AIOP_Normal - AIOP_MIN)
 
#define PAK_EXTRA_CHECKS   DO_CHECK
 
#define CHECK_REDUNDANT_READS   (0)
 

Functions

 DEFINE_LOG_CATEGORY (LogPakFile)
 
 DEFINE_STAT (STAT_PakFile_Read)
 
 DEFINE_STAT (STAT_PakFile_NumOpenHandles)
 
 CSV_DECLARE_CATEGORY_MODULE_EXTERN (CORE_API, FileIO)
 
 CSV_DEFINE_CATEGORY (FileIOVerbose, false)
 
bool ShouldCheckPak ()
 
int32 GetPakchunkIndexFromPakFile (const FString &InFilename)
 
TPakChunkHash ComputePakChunkHash (const void *InData, int64 InDataSizeInBytes)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("PakCache Sync Decrypts (Uncompressed Path)"), STAT_PakCache_SyncDecrypts, STATGROUP_PakFile)
 
 DECLARE_FLOAT_ACCUMULATOR_STAT (TEXT("PakCache Decrypt Time"), STAT_PakCache_DecryptTime, STATGROUP_PakFile)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("PakCache Async Decrypts (Compressed Path)"), STAT_PakCache_CompressedDecrypts, STATGROUP_PakFile)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("PakCache Async Decrypts (Uncompressed Path)"), STAT_PakCache_UncompressedDecrypts, STATGROUP_PakFile)
 
void DecryptData (uint8 *InData, uint64 InDataSize, FGuid InEncryptionKeyGuid)
 
 DECLARE_MEMORY_STAT (TEXT("PakCache Current"), STAT_PakCacheMem, STATGROUP_Memory)
 
 DECLARE_MEMORY_STAT (TEXT("PakCache High Water"), STAT_PakCacheHighWater, STATGROUP_Memory)
 
 DECLARE_FLOAT_ACCUMULATOR_STAT (TEXT("PakCache Signing Chunk Hash Time"), STAT_PakCache_SigningChunkHashTime, STATGROUP_PakFile)
 
 DECLARE_MEMORY_STAT (TEXT("PakCache Signing Chunk Hash Size"), STAT_PakCache_SigningChunkHashSize, STATGROUP_PakFile)
 
uint64 GetRecursiveAllocatedSize (const FPakDirectory &Index)
 
uint64 GetRecursiveAllocatedSize (const FPakFile::FDirectoryIndex &Index)
 

Variables

int32 GPakCache_CachePerPakFile = 0
 
int32 GPakCache_UseNewTrim = 0
 
int32 GPakCache_MaxBlockMemory = 128
 
int32 GPakCache_MaxRequestsToLowerLevel = 2
 
int32 GPakCache_MaxRequestSizeToLowerLevelKB = 1024
 
int32 GPakCache_NumUnreferencedBlocksToCache = 10
 
float GPakCache_TimeToTrim = 0.0f
 
int32 GPakCache_EnableNoCaching = 0
 
FAutoConsoleTaskPriority CPrio_AsyncIOCPUWorkTaskPriority (TEXT("TaskGraph.TaskPriorities.AsyncIOCPUWork"), TEXT("Task and thread priority for decompression, decryption and signature checking of async IO from a pak file."), ENamedThreads::BackgroundThreadPriority, ENamedThreads::NormalTaskPriority, ENamedThreads::NormalTaskPriority)
 

Macro Definition Documentation

◆ ALL_PAKS_WILDCARD

#define ALL_PAKS_WILDCARD   "*.pak"

◆ ALLOW_INI_OVERRIDE_FROM_COMMANDLINE

#define ALLOW_INI_OVERRIDE_FROM_COMMANDLINE   0

◆ CHECK_REDUNDANT_READS

#define CHECK_REDUNDANT_READS   (0)

◆ DISABLE_NONUFS_INI_WHEN_COOKED

#define DISABLE_NONUFS_INI_WHEN_COOKED   0

◆ EXCLUDE_NONPAK_UE_EXTENSIONS

#define EXCLUDE_NONPAK_UE_EXTENSIONS   1

◆ HAS_PLATFORM_PAK_INSTALL_CHECK

#define HAS_PLATFORM_PAK_INSTALL_CHECK   0

◆ MOUNT_STARTUP_PAKS_WILDCARD

#define MOUNT_STARTUP_PAKS_WILDCARD   ALL_PAKS_WILDCARD

◆ PAK_CACHE_GRANULARITY

#define PAK_CACHE_GRANULARITY   (1024*64)

◆ PAK_CACHE_MAX_PRIORITY_DIFFERENCE_MERGE

#define PAK_CACHE_MAX_PRIORITY_DIFFERENCE_MERGE   (AIOP_Normal - AIOP_MIN)

◆ PAK_CACHE_MAX_REQUESTS

#define PAK_CACHE_MAX_REQUESTS   (8)

◆ PAK_EXTRA_CHECKS

#define PAK_EXTRA_CHECKS   DO_CHECK

◆ USE_PAK_PRECACHE

#define USE_PAK_PRECACHE   (!PLATFORM_BYPASS_PAK_PRECACHE && !IS_PROGRAM && !WITH_EDITOR)

Function Documentation

◆ ComputePakChunkHash()

TPakChunkHash ComputePakChunkHash ( const void InData,
int64  InDataSizeInBytes 
)

◆ CSV_DECLARE_CATEGORY_MODULE_EXTERN()

CSV_DECLARE_CATEGORY_MODULE_EXTERN ( CORE_API  ,
FileIO   
)

◆ CSV_DEFINE_CATEGORY()

CSV_DEFINE_CATEGORY ( FileIOVerbose  ,
false   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [1/3]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("PakCache Async Decrypts (Compressed Path)")  ,
STAT_PakCache_CompressedDecrypts  ,
STATGROUP_PakFile   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [2/3]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("PakCache Async Decrypts (Uncompressed Path)")  ,
STAT_PakCache_UncompressedDecrypts  ,
STATGROUP_PakFile   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [3/3]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("PakCache Sync Decrypts (Uncompressed Path)")  ,
STAT_PakCache_SyncDecrypts  ,
STATGROUP_PakFile   
)

◆ DECLARE_FLOAT_ACCUMULATOR_STAT() [1/2]

DECLARE_FLOAT_ACCUMULATOR_STAT ( TEXT("PakCache Decrypt Time" ,
STAT_PakCache_DecryptTime  ,
STATGROUP_PakFile   
)

◆ DECLARE_FLOAT_ACCUMULATOR_STAT() [2/2]

DECLARE_FLOAT_ACCUMULATOR_STAT ( TEXT("PakCache Signing Chunk Hash Time" ,
STAT_PakCache_SigningChunkHashTime  ,
STATGROUP_PakFile   
)

◆ DECLARE_MEMORY_STAT() [1/3]

DECLARE_MEMORY_STAT ( TEXT("PakCache Current" ,
STAT_PakCacheMem  ,
STATGROUP_Memory   
)

◆ DECLARE_MEMORY_STAT() [2/3]

DECLARE_MEMORY_STAT ( TEXT("PakCache High Water" ,
STAT_PakCacheHighWater  ,
STATGROUP_Memory   
)

◆ DECLARE_MEMORY_STAT() [3/3]

DECLARE_MEMORY_STAT ( TEXT("PakCache Signing Chunk Hash Size" ,
STAT_PakCache_SigningChunkHashSize  ,
STATGROUP_PakFile   
)

◆ DecryptData()

void DecryptData ( uint8 InData,
uint64  InDataSize,
FGuid  InEncryptionKeyGuid 
)

◆ DEFINE_LOG_CATEGORY()

DEFINE_LOG_CATEGORY ( LogPakFile  )

◆ DEFINE_STAT() [1/2]

DEFINE_STAT ( STAT_PakFile_NumOpenHandles  )

◆ DEFINE_STAT() [2/2]

DEFINE_STAT ( STAT_PakFile_Read  )

◆ GetPakchunkIndexFromPakFile()

int32 GetPakchunkIndexFromPakFile ( const FString &  InFilename)

◆ GetRecursiveAllocatedSize() [1/2]

uint64 GetRecursiveAllocatedSize ( const FPakDirectory Index)

◆ GetRecursiveAllocatedSize() [2/2]

uint64 GetRecursiveAllocatedSize ( const FPakFile::FDirectoryIndex Index)

◆ ShouldCheckPak()

bool ShouldCheckPak ( )

Variable Documentation

◆ CPrio_AsyncIOCPUWorkTaskPriority

FAutoConsoleTaskPriority CPrio_AsyncIOCPUWorkTaskPriority(TEXT("TaskGraph.TaskPriorities.AsyncIOCPUWork"), TEXT("Task and thread priority for decompression, decryption and signature checking of async IO from a pak file."), ENamedThreads::BackgroundThreadPriority, ENamedThreads::NormalTaskPriority, ENamedThreads::NormalTaskPriority) ( TEXT("TaskGraph.TaskPriorities.AsyncIOCPUWork")  ,
TEXT("Task and thread priority for decompression, decryption and signature checking of async IO from a pak file." ,
ENamedThreads::BackgroundThreadPriority  ,
ENamedThreads::NormalTaskPriority  ,
ENamedThreads::NormalTaskPriority   
)

◆ GPakCache_CachePerPakFile

int32 GPakCache_CachePerPakFile = 0

◆ GPakCache_EnableNoCaching

int32 GPakCache_EnableNoCaching = 0

◆ GPakCache_MaxBlockMemory

int32 GPakCache_MaxBlockMemory = 128

◆ GPakCache_MaxRequestSizeToLowerLevelKB

int32 GPakCache_MaxRequestSizeToLowerLevelKB = 1024

◆ GPakCache_MaxRequestsToLowerLevel

int32 GPakCache_MaxRequestsToLowerLevel = 2

◆ GPakCache_NumUnreferencedBlocksToCache

int32 GPakCache_NumUnreferencedBlocksToCache = 10

◆ GPakCache_TimeToTrim

float GPakCache_TimeToTrim = 0.0f

◆ GPakCache_UseNewTrim

int32 GPakCache_UseNewTrim = 0