CodeTV.GraphBuilderBDATimeShifting.ConfigureTimeShiftingRegistry C# (CSharp) Method

ConfigureTimeShiftingRegistry() protected method

protected ConfigureTimeShiftingRegistry ( ) : void
return void
        protected void ConfigureTimeShiftingRegistry()
        {
            //http://msdn.microsoft.com/en-us/library/windows/desktop/dd694948%28v=vs.85%29.aspx

            UIntPtr HKEY_CURRENT_USER = (UIntPtr)0x80000001;
            //unchecked
            //{
            //    HKEY_CURRENT_USER = (UIntPtr)0x80000001;
            //}

            // Create the StreamBufferConfig object.
            StreamBufferConfig streamBufferConfig = new StreamBufferConfig();
            IStreamBufferConfigure streamBufferConfigure = streamBufferConfig as IStreamBufferConfigure;

            // Create a new registry key to hold our settings.
            streamBufferConfigHKey = IntPtr.Zero;
            IntPtr p = Marshal.AllocCoTaskMem(4);
            Marshal.WriteIntPtr(p, IntPtr.Zero);
            try
            {
                int lRes = RegCreateKey(HKEY_CURRENT_USER, MainForm.RegistryBaseKey + "\\SBE", p);
                streamBufferConfigHKey = Marshal.ReadIntPtr(p);
            }
            finally
            {
                Marshal.FreeCoTaskMem(p);
            }

            // Set the registry key.
            IStreamBufferInitialize streamBufferInitialize = streamBufferConfigure as IStreamBufferInitialize;
            int hr = streamBufferInitialize.SetHKEY(streamBufferConfigHKey);
            DsError.ThrowExceptionForHR(hr);

            //http://msdn.microsoft.com/en-us/library/windows/desktop/dd694977%28v=vs.85%29.aspx
            //For Windows Vista or later the IStreamBufferSink::LockProfile method requires administrator privileges,
            // unless you first call IStreamBufferConfigure3::SetNamespace with the value NULL.
            IStreamBufferConfigure3 streamBufferConfigure3 = streamBufferConfig as IStreamBufferConfigure3;
            if (streamBufferConfigure3 != null)
            {
                hr = streamBufferConfigure3.SetNamespace(null);
                DsError.ThrowExceptionForHR(hr);
            }

            // Set the TimeShifting configuration
            //hr = streamBufferConfigure.SetDirectory("C:\\MyDirectory");
            string directory = Settings.VideosFolder;
            string directoryPath = FileUtils.GetAbsolutePath(directory as string);
            hr = streamBufferConfigure.SetDirectory(directoryPath);
            DsError.ThrowExceptionForHR(hr);

            hr = streamBufferConfigure.SetBackingFileDuration(600); // Min 15 seconds
            //TODO not working anymore!!
            hr = streamBufferConfigure.SetBackingFileCount(
                Math.Min(100, Math.Max(4, Settings.TimeShiftingBufferLengthMin / 10)),  // 4-100
                Math.Min(102, Math.Max(6, Settings.TimeShiftingBufferLengthMax / 10))); // 6-102
        }