You can call the IsolationAwareCleanup function to ensure that memory associated with a manifest in an ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID resource is freed reliably, and not leaked when the DLL or EXE that contains the manifest is loaded, unloaded, and reloaded.
Because this function is not inherently thread safe, you should always call it by using an explicitly thread-safe method, for example, calling it from the DllMain function when it receives the DLL_PROCESS_DETACH notification, or from code that exists in an EXE file. The IsolationAwareCleanup function can also prevent some invalid reports from leak detection tools.
If your manifest is in an ISOLATIONAWARE_MANIFEST_RESOURCE_ID resource, you can call IsolationAwareCleanup and it does nothing.
This function has no parameters.
This function does not return a value.
To provide a manifest as a resource in a DLL or EXE, you can compile the application with the -DISOLATION_AWARE_ENABLED flag, or add the following statement to the resource header.
- #define ISOLATION_AWARE_ENABLED 1
If you add the statement, insert it before the following include statement.
- #include "Windows.h"
Then you have a choice of the following two resource IDs for your manifest:
If the resource ID for the manifest is ISOLATIONAWARE_MANIFEST_RESOURCE_ID, the loader can automatically resolve static dependencies of the manifest. During loading or unloading, the manifest is activated before calling the entry points of the DLL. The manifest can be queried using QueryActCtxW with dflag set to QUERY_ACT_CTX_FLAG_ACTCTX_IS_ADDRESS.
If there is no manifest in ISOLATIONAWARE_MANIFEST_RESOURCE_ID, side-by-side looks for a manifest in ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID. This manifest is never used by the loader. However, sometimes the memory that is associated with the manifest is not reliably freed and it is leaked. If the DLL or EXE is loaded, unloaded, and again loaded into a process, the memory that is associated with the manifest in a ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID resource is leaked. If the process ends and the DLL or EXE is then unloaded, the memory that is associated with the manifest is freed. However, some leak tracing tools may falsely report a leak.
You can call IsolationAwareCleanup by using a thread safe method to ensure that memory associated with a manifest in a ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID resource is reliably freed and not leaked when the DLL or is loaded, unloaded, and reloaded. IsolationAwareCleanup can also be called to prevent invalid reports of leaks by leak detection tools. After calling IsolationAwareCleanup, do not call functions that are affected by ISOLATION_AWARE_ENABLED.
Minimum supported client
|Windows XP [desktop apps only]|
Minimum supported server
|Windows Server 2003 [desktop apps only]|