private void LoadAppIDs(bool filterIL, bool filterAC)
{
List<IGrouping<Guid, COMCLSIDEntry>> clsidsByAppId = m_reg.ClsidsByAppId.ToList();
IDictionary<Guid, COMAppIDEntry> appids = m_reg.AppIDs;
List<TreeNode> serverNodes = new List<TreeNode>();
foreach (IGrouping<Guid, COMCLSIDEntry> pair in clsidsByAppId)
{
if (appids.ContainsKey(pair.Key))
{
COMAppIDEntry appidEnt = appids[pair.Key];
if (filterIL && String.IsNullOrWhiteSpace(COMUtilities.GetILForSD(appidEnt.AccessPermission)) &&
String.IsNullOrWhiteSpace(COMUtilities.GetILForSD(appidEnt.LaunchPermission)))
{
continue;
}
if (filterAC && !COMUtilities.SDHasAC(appidEnt.AccessPermission) && !COMUtilities.SDHasAC(appidEnt.LaunchPermission))
{
continue;
}
TreeNode node = new TreeNode(appidEnt.Name);
node.Tag = appidEnt;
StringBuilder builder = new StringBuilder();
AppendFormatLine(builder, "AppID: {0}", pair.Key);
if (!String.IsNullOrWhiteSpace(appidEnt.RunAs))
{
AppendFormatLine(builder, "RunAs: {0}", appidEnt.RunAs);
}
if (!String.IsNullOrWhiteSpace(appidEnt.LocalService))
{
AppendFormatLine(builder, "LocalService: {0}", appidEnt.LocalService);
}
string perm = appidEnt.LaunchPermissionString;
if (perm != null)
{
AppendFormatLine(builder, "Launch: {0}", LimitString(perm, 64));
}
perm = appidEnt.AccessPermissionString;
if (perm != null)
{
AppendFormatLine(builder, "Access: {0}", LimitString(perm, 64));
}
node.ToolTipText = builder.ToString();
int count = pair.Count();
TreeNode[] clsidNodes = new TreeNode[count];
string[] nodeNames = new string[count];
int j = 0;
foreach (COMCLSIDEntry ent in pair)
{
clsidNodes[j] = CreateClsidNode(ent);
nodeNames[j] = ent.Name;
j++;
}
Array.Sort(nodeNames, clsidNodes);
node.Nodes.AddRange(clsidNodes);
serverNodes.Add(node);
}
}
treeComRegistry.Nodes.AddRange(serverNodes.ToArray());
Text = "AppIDs";
}