internal FireDTVSourceFilterInfo(uint deviceHandle, IntPtr activeWindow)
        {
            _windowHandle = activeWindow;
            _handle       = deviceHandle;

            StringBuilder displayName = new StringBuilder(256);
            uint          returnCode  = FireDTVAPI.FS_GetDisplayString(Handle, displayName);

            if ((FireDTVConstants.FireDTVStatusCodes)returnCode != FireDTVConstants.FireDTVStatusCodes.Success)
            {
                throw new FireDTVException((FireDTVConstants.FireDTVStatusCodes)returnCode,
                                           "Unable to get Device Display Name!");
            }
            _name = displayName.ToString();

            StringBuilder GuidString = new StringBuilder(256);

            returnCode = FireDTVAPI.FS_GetGUIDString(Handle, GuidString);
            if ((FireDTVConstants.FireDTVStatusCodes)returnCode != FireDTVConstants.FireDTVStatusCodes.Success)
            {
                throw new FireDTVException((FireDTVConstants.FireDTVStatusCodes)returnCode, "Unable to get GUID String!");
            }
            _GUID = GuidString.ToString();

            string DriverFriend;

            returnCode = FireDTVAPI.FS_GetFriendlyString(Handle, out DriverFriend);
            if ((FireDTVConstants.FireDTVStatusCodes)returnCode != FireDTVConstants.FireDTVStatusCodes.Success)
            {
                throw new FireDTVException((FireDTVConstants.FireDTVStatusCodes)returnCode,
                                           "Unable to get Device Friendly Name!");
            }
            _friendlyName = DriverFriend;

            FireDTVConstants.FireDTV_DRIVER_VERSION version = new FireDTVConstants.FireDTV_DRIVER_VERSION();
            returnCode = FireDTVAPI.FS_GetDriverVersion(Handle, ref version);
            if ((FireDTVConstants.FireDTVStatusCodes)returnCode != FireDTVConstants.FireDTVStatusCodes.Success)
            {
                throw new FireDTVException((FireDTVConstants.FireDTVStatusCodes)returnCode, "Unable to get Driver Version!");
            }
            _driverVersion = Encoding.ASCII.GetString(version.DriverVersion);

            returnCode = FireDTVAPI.FS_GetFirmwareVersion(Handle, ref _firmwareVersion);
            if ((FireDTVConstants.FireDTVStatusCodes)returnCode != FireDTVConstants.FireDTVStatusCodes.Success)
            {
                throw new FireDTVException((FireDTVConstants.FireDTVStatusCodes)returnCode,
                                           "Unable to get Firmware Hardware Version!");
            }

            returnCode = FireDTVAPI.FS_GetSystemInfo(Handle, ref _systemInfo);
            if ((FireDTVConstants.FireDTVStatusCodes)returnCode != FireDTVConstants.FireDTVStatusCodes.Success)
            {
                throw new FireDTVException((FireDTVConstants.FireDTVStatusCodes)returnCode, "Unable to get System Information!");
            }


            RegisterNotifications();
        }
 internal static extern uint FS_GetDriverVersion(uint DeviceHandle,
                                                 ref FireDTVConstants.FireDTV_DRIVER_VERSION pDriverVersion);