public static void ReadCache(ArrayList alAssems, String name, uint nFlag)
{
SafeFusionHandle aEnum = null;
SafeFusionHandle aNameEnum = null;
SafeFusionHandle AppCtx = SafeFusionHandle.InvalidHandle;
int hr;
if (name != null) {
hr = Win32Native.CreateAssemblyNameObject(out aNameEnum, name, CANOF.PARSE_DISPLAY_NAME, IntPtr.Zero);
if (hr != 0)
Marshal.ThrowExceptionForHR(hr);
}
using (aNameEnum) {
hr = Win32Native.CreateAssemblyEnum(out aEnum, AppCtx, aNameEnum, nFlag, IntPtr.Zero);
if (hr != 0)
Marshal.ThrowExceptionForHR(hr);
using (aEnum) {
for (;;) using (SafeFusionHandle aAppCtx = new SafeFusionHandle(), aName = new SafeFusionHandle())
{
if (!GetNextAssembly(aEnum, aAppCtx, aName, 0))
break;
String sDisplayName = GetDisplayName(aName, 0);
if (sDisplayName == null)
continue;
alAssems.Add(sDisplayName);
}
} // using (aEnum)
} // using (aNameEnum)
}