TL;DR Don’t use GetImageConfigInformation.
GetImageConfigInformation is hard coded that the Image Config Directory is 64 bytes.
It will not work in most environments.
Don’t use GetImageConfigInformation. This API is waste.
BOOL IMAGEAPI GetImageConfigInformation(
PLOADED_IMAGE LoadedImage,
PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
)
{
if (!LoadedImage || !ImageConfigInformation)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (LoadedImage->FileHeader->OptionalHeader.Magic != IMAGE_NT_OPTIONAL_HDR_MAGIC)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
ULONG LoadConfigDirectorySize;
PIMAGE_LOAD_CONFIG_DIRECTORY LoadConfigDirectoryAddress
= ImageDirectoryEntryToDataEx(
LoadedImage->MappedAddress,
FALSE,
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG,
&LoadConfigDirectorySize,
NULL
);
if (!LoadConfigDirectoryAddress)
{
SetLastError(ERROR_INVALID_DATA);
return FALSE;
}
if (LoadConfigDirectorySize != 64)
{
SetLastError(ERROR_INVALID_DATA);
return FALSE;
}
if (LoadConfigDirectoryAddress->Size > 0 && LoadConfigDirectoryAddress->Size < 64)
{
SetLastError(ERROR_INVALID_DATA);
return FALSE;
}
memcpy(ImageConfigInformation, LoadConfigDirectoryAddress, 64);
return TRUE;
}