Example #1
0
 internal COMCLSIDEntry(COMRegistry registry, ActCtxComServerRedirection com_server)
     : this(registry, com_server.Clsid)
 {
     Clsid   = com_server.Clsid;
     TypeLib = com_server.TypeLibraryId;
     Servers[COMServerType.InProcServer32] =
         new COMCLSIDServerEntry(COMServerType.InProcServer32, com_server.FullPath, com_server.ThreadingModel);
     Name   = string.IsNullOrWhiteSpace(com_server.ProgId) ? Clsid.ToString() : com_server.ProgId;
     Source = COMRegistryEntrySource.ActCtx;
 }
Example #2
0
        private H264Encoder(Activate activate)
        {
            Activate     = activate;
            FriendlyName = activate.Get(TransformAttributeKeys.MftFriendlyNameAttribute);
            Clsid        = activate.Get(TransformAttributeKeys.MftTransformClsidAttribute);
            Flags        = (TransformEnumFlag)activate.Get(TransformAttributeKeys.TransformFlagsAttribute);
            var list       = new List <string>();
            var inputTypes = activate.Get(TransformAttributeKeys.MftInputTypesAttributes);

            for (int j = 0; j < inputTypes.Length; j += 32)                                                                           // two guids
            {
                var majorType = new Guid(Enumerable.Range(0, 16).Select(index => Marshal.ReadByte(inputTypes, j + index)).ToArray()); // Should be video in this context
                var subType   = new Guid(Enumerable.Range(0, 16).Select(index => Marshal.ReadByte(inputTypes, j + 16 + index)).ToArray());
                list.Add(GetFourCC(subType));
            }

            list.Sort();
            InputTypes = list;
            try
            {
                using (var tf = activate.ActivateObject <Transform>())
                {
                    IsBuiltin         = IsBuiltinEncoder(tf);
                    IsDirect3D11Aware = IsDirect3D11AwareEncoder(tf);
                    IsHardwareBased   = IsHardwareBasedEncoder(tf);
                }
            }
            catch
            {
                // do nothing
            }

            using (var key = Registry.ClassesRoot.OpenSubKey(Path.Combine("CLSID", Clsid.ToString("B"), "InprocServer32")))
            {
                if (key != null)
                {
                    DllPath = key.GetValue(null) as string;
                }
            }
        }
Example #3
0
        private void LoadFromKey(RegistryKey key)
        {
            HashSet <Guid> categories = new HashSet <Guid>();
            object         name       = key.GetValue(null);

            Name = null;
            if (name != null)
            {
                string s = name.ToString().Trim();

                if (s.Length > 0)
                {
                    Name = name.ToString();
                }
            }

            bool fake_name = false;

            if (Name == null)
            {
                fake_name = true;
                Name      = Clsid.FormatGuidDefault();
            }

            Dictionary <COMServerType, COMCLSIDServerEntry> servers = new Dictionary <COMServerType, COMCLSIDServerEntry>();
            COMCLSIDServerEntry inproc_server = ReadServerKey(servers, key, COMServerType.InProcServer32);

            ReadServerKey(servers, key, COMServerType.LocalServer32);
            ReadServerKey(servers, key, COMServerType.InProcHandler32);
            Servers = new ReadOnlyDictionary <COMServerType, COMCLSIDServerEntry>(servers);

            if (fake_name && inproc_server != null && inproc_server.HasDotNet)
            {
                Name = string.Format("{0}, {1}", inproc_server.DotNet.ClassName, inproc_server.DotNet.AssemblyName);
            }

            AppID = COMUtilities.ReadGuid(key, null, "AppID");
            if (AppID == Guid.Empty)
            {
                AppID = COMUtilities.ReadGuid(Registry.ClassesRoot,
                                              string.Format(@"AppID\{0}", COMUtilities.GetFileName(DefaultServer)), "AppID");
            }

            if (AppID != Guid.Empty && !servers.ContainsKey(COMServerType.LocalServer32))
            {
                servers.Add(COMServerType.LocalServer32, new COMCLSIDServerEntry(COMServerType.LocalServer32, "<APPID HOSTED>"));
            }

            TypeLib = COMUtilities.ReadGuid(key, "TypeLib", null);
            if (key.HasSubkey("Control"))
            {
                categories.Add(COMCategory.CATID_Control);
            }

            if (key.HasSubkey("Insertable"))
            {
                categories.Add(COMCategory.CATID_Insertable);
            }

            if (key.HasSubkey("DocObject"))
            {
                categories.Add(COMCategory.CATID_Document);
            }

            using (RegistryKey catkey = key.OpenSubKey("Implemented Categories"))
            {
                if (catkey != null)
                {
                    string[] subKeys = catkey.GetSubKeyNames();
                    foreach (string s in subKeys)
                    {
                        if (Guid.TryParse(s, out Guid g))
                        {
                            categories.Add(g);
                        }
                    }
                }
            }

            Categories = categories.ToList().AsReadOnly();
            TreatAs    = COMUtilities.ReadGuid(key, "TreatAs", null);

            using (RegistryKey elev_key = key.OpenSubKey("Elevation"),
                   vso_key = key.OpenSubKey("VirtualServerObjects"))
            {
                if (elev_key != null)
                {
                    using (var base_key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
                                                                  Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Default))
                    {
                        int auto_approval = COMUtilities.ReadInt(base_key,
                                                                 @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\UAC\COMAutoApprovalList", Clsid.ToString("B"));
                        Elevation = new COMCLSIDElevationEntry(elev_key, vso_key, auto_approval != 0);
                    }
                }
            }

            ActivatableFromApp = _app_activatable.Contains(Clsid);
            using (RegistryKey trustkey = Registry.LocalMachine.OpenSubKey(@"Software\Classes\Unmarshalers\System\" + Clsid.ToString("B")))
            {
                TrustedMarshaller = trustkey != null ? true : categories.Contains(COMCategory.CATID_TrustedMarshaler);
            }

            Source = key.GetSource();
        }
Example #4
0
        private void LoadFromKey(RegistryKey key)
        {
            object name = key.GetValue(null);

            Name = null;
            if (name != null)
            {
                string s = name.ToString().Trim();

                if (s.Length > 0)
                {
                    Name = name.ToString();
                }
            }

            if (Name == null)
            {
                Name = Clsid.ToString("B");
            }

            RegistryKey serverKey = key.OpenSubKey("InProcServer32");

            try
            {
                ServerType = COMServerType.InProcServer32;
                if (serverKey == null)
                {
                    serverKey  = key.OpenSubKey("LocalServer32");
                    ServerType = COMServerType.LocalServer32;
                }

                if ((serverKey != null) && (serverKey.GetValue(null) != null))
                {
                    CmdLine = serverKey.GetValue(null).ToString();
                    Server  = ProcessFileName(CmdLine, ServerType == COMServerType.LocalServer32);
                    string threading_model = serverKey.GetValue("ThreadingModel") as string;
                    if (threading_model != null)
                    {
                        switch (threading_model.ToLower())
                        {
                        case "both":
                            ThreadingModel = COMThreadingModel.Both;
                            break;

                        case "free":
                            ThreadingModel = COMThreadingModel.Free;
                            break;

                        case "neutral":
                            ThreadingModel = COMThreadingModel.Neutral;
                            break;

                        case "apartment":
                        default:
                            ThreadingModel = COMThreadingModel.Apartment;
                            break;
                        }
                    }
                    else if (ServerType == COMServerType.LocalServer32)
                    {
                        ThreadingModel = COMThreadingModel.Both;
                    }

                    try
                    {
                        // Expand out any short filenames
                        if (Server.Contains("~") && !IsInvalidFileName(Server))
                        {
                            Server = Path.GetFullPath(Server);
                        }
                    }
                    catch (IOException)
                    {
                    }
                    catch (SecurityException)
                    {
                    }
                    catch (ArgumentException)
                    {
                    }
                }
                else
                {
                    Server     = String.Empty;
                    ServerType = COMServerType.UnknownServer;
                }
            }
            finally
            {
                if (serverKey != null)
                {
                    serverKey.Close();
                }
            }

            AppID = Guid.Empty;

            try
            {
                object appid = key.GetValue("AppID");
                if ((appid != null) && (appid.ToString().Length > 0))
                {
                    Guid appid_guid;
                    if (Guid.TryParse(appid.ToString(), out appid_guid))
                    {
                        if (appid_guid != Guid.Empty)
                        {
                            if (ServerType == COMServerType.UnknownServer)
                            {
                                ServerType = COMServerType.LocalServer32;
                            }
                            AppID = appid_guid;
                        }
                    }
                }
            }
            catch (FormatException e)
            {
                System.Diagnostics.Debug.WriteLine(e.ToString());
            }

            TypeLib = COMUtilities.ReadGuidFromKey(key, "TypeLib", null);
            if (key.HasSubkey("Control"))
            {
                m_categories.Add(ControlCategory);
            }

            if (key.HasSubkey("Insertable"))
            {
                m_categories.Add(InsertableCategory);
            }

            if (key.HasSubkey("DocObject"))
            {
                m_categories.Add(DocumentCategory);
            }

            using (RegistryKey categories = key.OpenSubKey("Implemented Categories"))
            {
                if (categories != null)
                {
                    string[] subKeys = categories.GetSubKeyNames();
                    foreach (string s in subKeys)
                    {
                        Guid g;

                        if (Guid.TryParse(s, out g))
                        {
                            m_categories.Add(g);
                        }
                    }
                }
            }

            TreatAs = COMUtilities.ReadGuidFromKey(key, "TreatAs", null);
        }