FIXED statement in EXP for 4% smaller EXE without .reloc table

I found FIXED looking at the strings in the Linker ClaLPE.DLL for undocumented stuff …

I also see ISOLATION_AWARE which I have not tried to make work, just did some Googling. I think it might be related to ISOLATIONAWARE_MANIFEST_RESOURCE_ID which allows a DLL to have its own MANIFEST that is different than the EXE (Application) MANIFEST.

E.g. Some code I work on has Visual Styles turned OFF in most EXEs. This may allow one DLL to have a MANIFEST to turn Styles ON so it can use the new v6 Common Controls DLL that has the new TaskDialog().

ISOLATIONAWARE_MANIFEST_RESOURCE_ID is used primarily for DLLs. It should be used if the dll wants private dependencies other than the process default. For example, if an dll depends on comctl32.dll version 6.0.0.0. It should have a resource of type RT_MANIFEST, ID ISOLATIONAWARE_MANIFEST_RESOURCE_ID to depend on comctl32.dll version 6.0.0.0, so that even if the process executable wants comctl32.dll version 5.1, the dll itself will still use the right version of comctl32.dll.

When LoadLibrary is called, before loading the dependencies of the dll, the NT library loader checks to see if the dll has a resource of type RT_MANIFEST, ID ISOLATIONAWARE_MANIFEST_RESOURCE_ID. If it does, the loader calls CreateActCtx with the resource, and use the generated activation context to probe the dll’s static dependencies. This is reason why the dll can have private dependencies with the ISOLATIONAWARE_MANIFEST_RESOURCE_ID resource.

1 Like