pub const ANALOG_AUXIN_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0x742ef867_09e1_40a3_82d3_9669ba35325f);
pub const ANALOG_FM_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0x7728087b_2bb9_4e30_8078_449476e59dbb);
pub const ANALOG_TV_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0xb820d87e_e0e3_478f_8a38_4e13f7b3df42);
pub const ATSCChannelTuneRequest: windows_core::GUID = windows_core::GUID::from_u128(0x0369b4e6_45b6_11d3_b650_00c04f79498e);
pub const ATSCComponentType: windows_core::GUID = windows_core::GUID::from_u128(0xa8dcf3d5_0780_4ef4_8a83_2cffaacb8ace);
pub const ATSCLocator: windows_core::GUID = windows_core::GUID::from_u128(0x8872ff1b_98fa_4d7a_8d93_c9f1055f85bb);
pub const ATSCTuningSpace: windows_core::GUID = windows_core::GUID::from_u128(0xa2e30750_6c3d_11d3_b653_00c04f79498e);
pub const ATSC_EIT_TID: u32 = 203u32;
pub const ATSC_ETM_LOCATION_IN_PTC_FOR_EVENT: u32 = 2u32;
pub const ATSC_ETM_LOCATION_IN_PTC_FOR_PSIP: u32 = 1u32;
pub const ATSC_ETM_LOCATION_NOT_PRESENT: u32 = 0u32;
pub const ATSC_ETM_LOCATION_RESERVED: u32 = 3u32;
pub const ATSC_ETT_TID: u32 = 204u32;
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct ATSC_FILTER_OPTIONS {
    pub fSpecifyEtmId: windows_core::BOOL,
    pub EtmId: u32,
}
pub const ATSC_MGT_PID: u32 = 8187u32;
pub const ATSC_MGT_TID: u32 = 199u32;
pub const ATSC_PIT_TID: u32 = 208u32;
pub const ATSC_RRT_PID: u32 = 8187u32;
pub const ATSC_RRT_TID: u32 = 202u32;
pub const ATSC_STT_PID: u32 = 8187u32;
pub const ATSC_STT_TID: u32 = 205u32;
pub const ATSC_TERRESTRIAL_TV_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0x0dad2fdd_5fd7_11d3_8f50_00c04f7971e2);
pub const ATSC_VCT_CABL_TID: u32 = 201u32;
pub const ATSC_VCT_PID: u32 = 8187u32;
pub const ATSC_VCT_TERR_TID: u32 = 200u32;
pub const AgeBased: EnTvRat_System = EnTvRat_System(9i32);
pub const AnalogAudioComponentType: windows_core::GUID = windows_core::GUID::from_u128(0x28ab0005_e845_4ffa_aa9b_f4665236141c);
pub const AnalogLocator: windows_core::GUID = windows_core::GUID::from_u128(0x49638b91_48ab_48b7_a47a_7d0e75a08ede);
pub const AnalogRadioTuningSpace: windows_core::GUID = windows_core::GUID::from_u128(0x8a674b4c_1f63_11d3_b64c_00c04f79498e);
pub const AnalogTVTuningSpace: windows_core::GUID = windows_core::GUID::from_u128(0x8a674b4d_1f63_11d3_b64c_00c04f79498e);
pub const AudioType_Commentary: u32 = 5u32;
pub const AudioType_Dialogue: u32 = 4u32;
pub const AudioType_Emergency: u32 = 6u32;
pub const AudioType_Hearing_Impaired: u32 = 3u32;
pub const AudioType_Music_And_Effects: u32 = 1u32;
pub const AudioType_Reserved: i32 = -1i32;
pub const AudioType_Standard: u32 = 0u32;
pub const AudioType_Visually_Impaired: u32 = 2u32;
pub const AudioType_Voiceover: u32 = 7u32;
pub const AuxInTuningSpace: windows_core::GUID = windows_core::GUID::from_u128(0xf9769a06_7aca_4e39_9cfb_97bb35f0e77e);
pub const BDANETWORKTYPE_ATSC: windows_core::GUID = windows_core::GUID::from_u128(0x71985f51_1ca1_11d3_9cc8_00c04f7971e0);
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct BDA_DEBUG_DATA {
    pub lResult: i32,
    pub uuidDebugDataType: windows_core::GUID,
    pub ulDataSize: u32,
    pub argbDebugData: [u8; 1],
}
impl Default for BDA_DEBUG_DATA {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const BDA_DEBUG_DATA_AVAILABLE: windows_core::GUID = windows_core::GUID::from_u128(0x69c24f54_9983_497e_b415_282be4c555fb);
pub const BDA_DEBUG_DATA_TYPE_STRING: windows_core::GUID = windows_core::GUID::from_u128(0xa806e767_de5c_430c_80bf_a21ebe06c748);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct BDA_DigitalSignalStandard(pub i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct BDA_EVENT_DATA {
    pub lResult: i32,
    pub ulEventID: u32,
    pub uuidEventType: windows_core::GUID,
    pub ulEventDataLength: u32,
    pub argbEventData: [u8; 1],
}
impl Default for BDA_EVENT_DATA {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct BDA_LockType(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct BDA_SignalType(pub i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct BDA_TRANSPORT_INFO {
    pub ulcbPhyiscalPacket: u32,
    pub ulcbPhyiscalFrame: u32,
    pub ulcbPhyiscalFrameAlignment: u32,
    pub AvgTimePerFrame: i64,
}
pub const BSKYB_TERRESTRIAL_TV_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0x9e9e46c6_3aba_4f08_ad0e_cc5ac8148c2b);
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct BadSampleInfo {
    pub hrReason: windows_core::HRESULT,
}
pub const Bda_DigitalStandard_ATSC: BDA_DigitalSignalStandard = BDA_DigitalSignalStandard(8i32);
pub const Bda_DigitalStandard_DVB_C: BDA_DigitalSignalStandard = BDA_DigitalSignalStandard(4i32);
pub const Bda_DigitalStandard_DVB_S: BDA_DigitalSignalStandard = BDA_DigitalSignalStandard(2i32);
pub const Bda_DigitalStandard_DVB_T: BDA_DigitalSignalStandard = BDA_DigitalSignalStandard(1i32);
pub const Bda_DigitalStandard_ISDB_C: BDA_DigitalSignalStandard = BDA_DigitalSignalStandard(64i32);
pub const Bda_DigitalStandard_ISDB_S: BDA_DigitalSignalStandard = BDA_DigitalSignalStandard(32i32);
pub const Bda_DigitalStandard_ISDB_T: BDA_DigitalSignalStandard = BDA_DigitalSignalStandard(16i32);
pub const Bda_DigitalStandard_None: BDA_DigitalSignalStandard = BDA_DigitalSignalStandard(0i32);
pub const Bda_LockType_Complete: BDA_LockType = BDA_LockType(128i32);
pub const Bda_LockType_DecoderDemod: BDA_LockType = BDA_LockType(2i32);
pub const Bda_LockType_None: BDA_LockType = BDA_LockType(0i32);
pub const Bda_LockType_PLL: BDA_LockType = BDA_LockType(1i32);
pub const Bda_SignalType_Analog: BDA_SignalType = BDA_SignalType(1i32);
pub const Bda_SignalType_Digital: BDA_SignalType = BDA_SignalType(2i32);
pub const Bda_SignalType_Unknown: BDA_SignalType = BDA_SignalType(0i32);
pub const BfAttrNone: BfEnTvRat_GenericAttributes = BfEnTvRat_GenericAttributes(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct BfEnTvRat_Attributes_CAE_TV(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct BfEnTvRat_Attributes_CAF_TV(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct BfEnTvRat_Attributes_MPAA(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct BfEnTvRat_Attributes_US_TV(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct BfEnTvRat_GenericAttributes(pub i32);
pub const BfIsAttr_1: BfEnTvRat_GenericAttributes = BfEnTvRat_GenericAttributes(2i32);
pub const BfIsAttr_2: BfEnTvRat_GenericAttributes = BfEnTvRat_GenericAttributes(4i32);
pub const BfIsAttr_3: BfEnTvRat_GenericAttributes = BfEnTvRat_GenericAttributes(8i32);
pub const BfIsAttr_4: BfEnTvRat_GenericAttributes = BfEnTvRat_GenericAttributes(16i32);
pub const BfIsAttr_5: BfEnTvRat_GenericAttributes = BfEnTvRat_GenericAttributes(32i32);
pub const BfIsAttr_6: BfEnTvRat_GenericAttributes = BfEnTvRat_GenericAttributes(64i32);
pub const BfIsAttr_7: BfEnTvRat_GenericAttributes = BfEnTvRat_GenericAttributes(128i32);
pub const BfIsBlocked: BfEnTvRat_GenericAttributes = BfEnTvRat_GenericAttributes(1i32);
pub const BfValidAttrSubmask: BfEnTvRat_GenericAttributes = BfEnTvRat_GenericAttributes(255i32);
pub const BroadcastEventService: windows_core::GUID = windows_core::GUID::from_u128(0x0b3ffb92_0919_4934_9d5b_619c719d0202);
pub const CAE_IsBlocked: BfEnTvRat_Attributes_CAE_TV = BfEnTvRat_Attributes_CAE_TV(1i32);
pub const CAE_TV_14: EnTvRat_CAE_TV = EnTvRat_CAE_TV(5i32);
pub const CAE_TV_18: EnTvRat_CAE_TV = EnTvRat_CAE_TV(6i32);
pub const CAE_TV_C: EnTvRat_CAE_TV = EnTvRat_CAE_TV(1i32);
pub const CAE_TV_C8: EnTvRat_CAE_TV = EnTvRat_CAE_TV(2i32);
pub const CAE_TV_Exempt: EnTvRat_CAE_TV = EnTvRat_CAE_TV(0i32);
pub const CAE_TV_G: EnTvRat_CAE_TV = EnTvRat_CAE_TV(3i32);
pub const CAE_TV_PG: EnTvRat_CAE_TV = EnTvRat_CAE_TV(4i32);
pub const CAE_TV_Reserved: EnTvRat_CAE_TV = EnTvRat_CAE_TV(7i32);
pub const CAE_ValidAttrSubmask: BfEnTvRat_Attributes_CAE_TV = BfEnTvRat_Attributes_CAE_TV(1i32);
pub const CAF_IsBlocked: BfEnTvRat_Attributes_CAF_TV = BfEnTvRat_Attributes_CAF_TV(1i32);
pub const CAF_TV_13: EnTvRat_CAF_TV = EnTvRat_CAF_TV(3i32);
pub const CAF_TV_16: EnTvRat_CAF_TV = EnTvRat_CAF_TV(4i32);
pub const CAF_TV_18: EnTvRat_CAF_TV = EnTvRat_CAF_TV(5i32);
pub const CAF_TV_8: EnTvRat_CAF_TV = EnTvRat_CAF_TV(2i32);
pub const CAF_TV_Exempt: EnTvRat_CAF_TV = EnTvRat_CAF_TV(0i32);
pub const CAF_TV_G: EnTvRat_CAF_TV = EnTvRat_CAF_TV(1i32);
pub const CAF_TV_Reserved: EnTvRat_CAF_TV = EnTvRat_CAF_TV(7i32);
pub const CAF_TV_Reserved6: EnTvRat_CAF_TV = EnTvRat_CAF_TV(6i32);
pub const CAF_ValidAttrSubmask: BfEnTvRat_Attributes_CAF_TV = BfEnTvRat_Attributes_CAF_TV(1i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct CAPTURE_STREAMTIME {
    pub StreamTime: i64,
}
pub const CLSID_CPCAFiltersCategory: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4fc_0049_4e2b_98fb_9537f6ce516d);
pub const CLSID_DTFilterEncProperties: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c482_0049_4e2b_98fb_9537f6ce516d);
pub const CLSID_DTFilterTagProperties: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c492_0049_4e2b_98fb_9537f6ce516d);
pub const CLSID_ETFilterEncProperties: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c481_0049_4e2b_98fb_9537f6ce516d);
pub const CLSID_ETFilterTagProperties: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c491_0049_4e2b_98fb_9537f6ce516d);
pub const CLSID_Mpeg2TableFilter: windows_core::GUID = windows_core::GUID::from_u128(0x752845f1_758f_4c83_a043_4270c593308e);
pub const CLSID_PTFilter: windows_core::GUID = windows_core::GUID::from_u128(0x9cd31617_b303_4f96_8330_2eb173ea4dc6);
pub const CLSID_XDSCodecProperties: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c483_0049_4e2b_98fb_9537f6ce516d);
pub const CLSID_XDSCodecTagProperties: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c493_0049_4e2b_98fb_9537f6ce516d);
pub const COMPONENT_TAG_CAPTION_MAX: u32 = 55u32;
pub const COMPONENT_TAG_CAPTION_MIN: u32 = 48u32;
pub const COMPONENT_TAG_SUPERIMPOSE_MAX: u32 = 63u32;
pub const COMPONENT_TAG_SUPERIMPOSE_MIN: u32 = 56u32;
pub const CONTENT: RecordingType = RecordingType(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct COPPEventBlockReason(pub i32);
pub const COPP_Activate: COPPEventBlockReason = COPPEventBlockReason(8i32);
pub const COPP_AeroGlassOff: COPPEventBlockReason = COPPEventBlockReason(5i32);
pub const COPP_BadCertificate: COPPEventBlockReason = COPPEventBlockReason(3i32);
pub const COPP_BadDriver: COPPEventBlockReason = COPPEventBlockReason(0i32);
pub const COPP_DigitalAudioUnprotected: COPPEventBlockReason = COPPEventBlockReason(9i32);
pub const COPP_ForbiddenVideo: COPPEventBlockReason = COPPEventBlockReason(7i32);
pub const COPP_InvalidBusProtection: COPPEventBlockReason = COPPEventBlockReason(4i32);
pub const COPP_NoCardHDCPSupport: COPPEventBlockReason = COPPEventBlockReason(1i32);
pub const COPP_NoMonitorHDCPSupport: COPPEventBlockReason = COPPEventBlockReason(2i32);
pub const COPP_RogueApp: COPPEventBlockReason = COPPEventBlockReason(6i32);
pub const COPP_Unknown: COPPEventBlockReason = COPPEventBlockReason(-1i32);
pub const CPEVENT_BITSHIFT_COPP: CPEventBitShift = CPEventBitShift(1i32);
pub const CPEVENT_BITSHIFT_DOWNRES: CPEventBitShift = CPEventBitShift(5i32);
pub const CPEVENT_BITSHIFT_LICENSE: CPEventBitShift = CPEventBitShift(2i32);
pub const CPEVENT_BITSHIFT_NO_PLAYREADY: CPEventBitShift = CPEventBitShift(9i32);
pub const CPEVENT_BITSHIFT_PENDING_CERTIFICATE: CPEventBitShift = CPEventBitShift(8i32);
pub const CPEVENT_BITSHIFT_RATINGS: CPEventBitShift = CPEventBitShift(0i32);
pub const CPEVENT_BITSHIFT_ROLLBACK: CPEventBitShift = CPEventBitShift(3i32);
pub const CPEVENT_BITSHIFT_SAC: CPEventBitShift = CPEventBitShift(4i32);
pub const CPEVENT_BITSHIFT_STUBLIB: CPEventBitShift = CPEventBitShift(6i32);
pub const CPEVENT_BITSHIFT_UNTRUSTEDGRAPH: CPEventBitShift = CPEventBitShift(7i32);
pub const CPEVENT_COPP: CPEvents = CPEvents(2i32);
pub const CPEVENT_DOWNRES: CPEvents = CPEvents(6i32);
pub const CPEVENT_LICENSE: CPEvents = CPEvents(3i32);
pub const CPEVENT_NONE: CPEvents = CPEvents(0i32);
pub const CPEVENT_PROTECTWINDOWED: CPEvents = CPEvents(9i32);
pub const CPEVENT_RATINGS: CPEvents = CPEvents(1i32);
pub const CPEVENT_ROLLBACK: CPEvents = CPEvents(4i32);
pub const CPEVENT_SAC: CPEvents = CPEvents(5i32);
pub const CPEVENT_STUBLIB: CPEvents = CPEvents(7i32);
pub const CPEVENT_UNTRUSTEDGRAPH: CPEvents = CPEvents(8i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct CPEventBitShift(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct CPEvents(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct CPRecordingStatus(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct CRID_LOCATION(pub i32);
pub const CRID_LOCATION_DVB_RESERVED1: CRID_LOCATION = CRID_LOCATION(2i32);
pub const CRID_LOCATION_DVB_RESERVED2: CRID_LOCATION = CRID_LOCATION(3i32);
pub const CRID_LOCATION_IN_CIT: CRID_LOCATION = CRID_LOCATION(1i32);
pub const CRID_LOCATION_IN_DESCRIPTOR: CRID_LOCATION = CRID_LOCATION(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct CROSSBAR_DEFAULT_FLAGS(pub i32);
pub const CXDSData: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4f4_0049_4e2b_98fb_9537f6ce516d);
pub const Canadian_English: EnTvRat_System = EnTvRat_System(2i32);
pub const Canadian_French: EnTvRat_System = EnTvRat_System(3i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct ChannelChangeInfo {
    pub state: ChannelChangeSpanningEvent_State,
    pub TimeStamp: u64,
}
pub const ChannelChangeSpanningEvent_End: ChannelChangeSpanningEvent_State = ChannelChangeSpanningEvent_State(2i32);
pub const ChannelChangeSpanningEvent_Start: ChannelChangeSpanningEvent_State = ChannelChangeSpanningEvent_State(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct ChannelChangeSpanningEvent_State(pub i32);
pub const ChannelIDTuneRequest: windows_core::GUID = windows_core::GUID::from_u128(0x3a9428a7_31a4_45e9_9efb_e055bf7bb3db);
pub const ChannelIDTuningSpace: windows_core::GUID = windows_core::GUID::from_u128(0xcc829a2f_3365_463f_af13_81dbb6f3a555);
#[repr(C)]
#[derive(Clone, Copy)]
pub struct ChannelInfo {
    pub lFrequency: i32,
    pub Anonymous: ChannelInfo_0,
}
impl Default for ChannelInfo {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[derive(Clone, Copy)]
pub union ChannelInfo_0 {
    pub DVB: ChannelInfo_0_0,
    pub DC: ChannelInfo_0_1,
    pub ATSC: ChannelInfo_0_2,
}
impl Default for ChannelInfo_0 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct ChannelInfo_0_2 {
    pub lProgNumber: i32,
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct ChannelInfo_0_1 {
    pub lProgNumber: i32,
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct ChannelInfo_0_0 {
    pub lONID: i32,
    pub lTSID: i32,
    pub lSID: i32,
}
pub const ChannelTuneRequest: windows_core::GUID = windows_core::GUID::from_u128(0x0369b4e5_45b6_11d3_b650_00c04f79498e);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct ChannelType(pub i32);
pub const ChannelTypeAudio: ChannelType = ChannelType(4i32);
pub const ChannelTypeCaptions: ChannelType = ChannelType(32i32);
pub const ChannelTypeData: ChannelType = ChannelType(128i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct ChannelTypeInfo {
    pub channelType: ChannelType,
    pub timeStamp: u64,
}
pub const ChannelTypeNone: ChannelType = ChannelType(0i32);
pub const ChannelTypeOther: ChannelType = ChannelType(1i32);
pub const ChannelTypeSubtitles: ChannelType = ChannelType(16i32);
pub const ChannelTypeSuperimpose: ChannelType = ChannelType(64i32);
pub const ChannelTypeText: ChannelType = ChannelType(8i32);
pub const ChannelTypeVideo: ChannelType = ChannelType(2i32);
pub const Component: windows_core::GUID = windows_core::GUID::from_u128(0x59dc47a8_116c_11d3_9d8e_00c04f72d980);
pub const ComponentType: windows_core::GUID = windows_core::GUID::from_u128(0x823535a0_0318_11d3_9d8e_00c04f72d980);
pub const ComponentTypes: windows_core::GUID = windows_core::GUID::from_u128(0xa1a2b1c4_0e3a_11d3_9d8e_00c04f72d980);
pub const Components: windows_core::GUID = windows_core::GUID::from_u128(0x809b6661_94c4_49e6_b6ec_3f0f862215aa);
pub const CreatePropBagOnRegKey: windows_core::GUID = windows_core::GUID::from_u128(0x8a674b49_1f63_11d3_b64c_00c04f79498e);
pub const DEF_MODE_PROFILE: CROSSBAR_DEFAULT_FLAGS = CROSSBAR_DEFAULT_FLAGS(1i32);
pub const DEF_MODE_STREAMS: CROSSBAR_DEFAULT_FLAGS = CROSSBAR_DEFAULT_FLAGS(2i32);
pub const DESC_LINKAGE_CA_REPLACEMENT: DESC_LINKAGE_TYPE = DESC_LINKAGE_TYPE(3i32);
pub const DESC_LINKAGE_COMPLETE_NET_BOUQUET_SI: DESC_LINKAGE_TYPE = DESC_LINKAGE_TYPE(4i32);
pub const DESC_LINKAGE_DATA: DESC_LINKAGE_TYPE = DESC_LINKAGE_TYPE(6i32);
pub const DESC_LINKAGE_EPG: DESC_LINKAGE_TYPE = DESC_LINKAGE_TYPE(2i32);
pub const DESC_LINKAGE_INFORMATION: DESC_LINKAGE_TYPE = DESC_LINKAGE_TYPE(1i32);
pub const DESC_LINKAGE_REPLACEMENT: DESC_LINKAGE_TYPE = DESC_LINKAGE_TYPE(5i32);
pub const DESC_LINKAGE_RESERVED0: DESC_LINKAGE_TYPE = DESC_LINKAGE_TYPE(0i32);
pub const DESC_LINKAGE_RESERVED1: DESC_LINKAGE_TYPE = DESC_LINKAGE_TYPE(7i32);
pub const DESC_LINKAGE_RESERVED2: DESC_LINKAGE_TYPE = DESC_LINKAGE_TYPE(255i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct DESC_LINKAGE_TYPE(pub i32);
pub const DESC_LINKAGE_USER: DESC_LINKAGE_TYPE = DESC_LINKAGE_TYPE(8i32);
pub const DIGITAL_CABLE_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0x143827ab_f77b_498d_81ca_5a007aec28bf);
pub const DIRECT_TV_SATELLITE_TV_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0x93b66fb5_93d4_4323_921c_c1f52df61d3f);
pub const DISPID_CHTUNER_ACTR_MINOR_CHANNEL: DISPID_TUNER = DISPID_TUNER(201i32);
pub const DISPID_CHTUNER_ATVAC_CHANNEL: DISPID_TUNER = DISPID_TUNER(101i32);
pub const DISPID_CHTUNER_ATVDC_CONTENT: DISPID_TUNER = DISPID_TUNER(102i32);
pub const DISPID_CHTUNER_ATVDC_SYSTEM: DISPID_TUNER = DISPID_TUNER(101i32);
pub const DISPID_CHTUNER_CIDTR_CHANNELID: DISPID_TUNER = DISPID_TUNER(101i32);
pub const DISPID_CHTUNER_CTR_CHANNEL: DISPID_TUNER = DISPID_TUNER(101i32);
pub const DISPID_CHTUNER_DCTR_MAJOR_CHANNEL: DISPID_TUNER = DISPID_TUNER(301i32);
pub const DISPID_CHTUNER_DCTR_SRCID: DISPID_TUNER = DISPID_TUNER(302i32);
pub const DISPID_DVBTUNER_DVBC_ATTRIBUTESVALID: DISPID_TUNER = DISPID_TUNER(101i32);
pub const DISPID_DVBTUNER_DVBC_COMPONENTTYPE: DISPID_TUNER = DISPID_TUNER(104i32);
pub const DISPID_DVBTUNER_DVBC_PID: DISPID_TUNER = DISPID_TUNER(102i32);
pub const DISPID_DVBTUNER_DVBC_TAG: DISPID_TUNER = DISPID_TUNER(103i32);
pub const DISPID_DVBTUNER_ONID: DISPID_TUNER = DISPID_TUNER(101i32);
pub const DISPID_DVBTUNER_SID: DISPID_TUNER = DISPID_TUNER(103i32);
pub const DISPID_DVBTUNER_TSID: DISPID_TUNER = DISPID_TUNER(102i32);
pub const DISPID_MP2TUNERFACTORY_CREATETUNEREQUEST: DISPID_TUNER = DISPID_TUNER(1i32);
pub const DISPID_MP2TUNER_PROGNO: DISPID_TUNER = DISPID_TUNER(102i32);
pub const DISPID_MP2TUNER_TSID: DISPID_TUNER = DISPID_TUNER(101i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct DISPID_TUNER(pub i32);
pub const DISPID_TUNER_ATSCCT_FLAGS: DISPID_TUNER = DISPID_TUNER(300i32);
pub const DISPID_TUNER_CT_CATEGORY: DISPID_TUNER = DISPID_TUNER(1i32);
pub const DISPID_TUNER_CT_CLONE: DISPID_TUNER = DISPID_TUNER(9i32);
pub const DISPID_TUNER_CT_MEDIAFORMATTYPE: DISPID_TUNER = DISPID_TUNER(6i32);
pub const DISPID_TUNER_CT_MEDIAMAJORTYPE: DISPID_TUNER = DISPID_TUNER(2i32);
pub const DISPID_TUNER_CT_MEDIASUBTYPE: DISPID_TUNER = DISPID_TUNER(4i32);
pub const DISPID_TUNER_CT_MEDIATYPE: DISPID_TUNER = DISPID_TUNER(8i32);
pub const DISPID_TUNER_CT__MEDIAFORMATTYPE: DISPID_TUNER = DISPID_TUNER(7i32);
pub const DISPID_TUNER_CT__MEDIAMAJORTYPE: DISPID_TUNER = DISPID_TUNER(3i32);
pub const DISPID_TUNER_CT__MEDIASUBTYPE: DISPID_TUNER = DISPID_TUNER(5i32);
pub const DISPID_TUNER_C_ANALOG_AUDIO: DISPID_TUNER = DISPID_TUNER(201i32);
pub const DISPID_TUNER_C_CLONE: DISPID_TUNER = DISPID_TUNER(5i32);
pub const DISPID_TUNER_C_DESCRIPTION: DISPID_TUNER = DISPID_TUNER(4i32);
pub const DISPID_TUNER_C_LANGID: DISPID_TUNER = DISPID_TUNER(3i32);
pub const DISPID_TUNER_C_MP2_PCRPID: DISPID_TUNER = DISPID_TUNER(102i32);
pub const DISPID_TUNER_C_MP2_PID: DISPID_TUNER = DISPID_TUNER(101i32);
pub const DISPID_TUNER_C_MP2_PROGNO: DISPID_TUNER = DISPID_TUNER(103i32);
pub const DISPID_TUNER_C_STATUS: DISPID_TUNER = DISPID_TUNER(2i32);
pub const DISPID_TUNER_C_TYPE: DISPID_TUNER = DISPID_TUNER(1i32);
pub const DISPID_TUNER_LCT_LANGID: DISPID_TUNER = DISPID_TUNER(100i32);
pub const DISPID_TUNER_L_ANALOG_STANDARD: DISPID_TUNER = DISPID_TUNER(601i32);
pub const DISPID_TUNER_L_ATSC_MP2_PROGNO: DISPID_TUNER = DISPID_TUNER(203i32);
pub const DISPID_TUNER_L_ATSC_PHYS_CHANNEL: DISPID_TUNER = DISPID_TUNER(201i32);
pub const DISPID_TUNER_L_ATSC_TSID: DISPID_TUNER = DISPID_TUNER(202i32);
pub const DISPID_TUNER_L_CARRFREQ: DISPID_TUNER = DISPID_TUNER(1i32);
pub const DISPID_TUNER_L_CLONE: DISPID_TUNER = DISPID_TUNER(8i32);
pub const DISPID_TUNER_L_DTV_O_MAJOR_CHANNEL: DISPID_TUNER = DISPID_TUNER(701i32);
pub const DISPID_TUNER_L_DVBS2_DISEQ_LNB_SOURCE: DISPID_TUNER = DISPID_TUNER(406i32);
pub const DISPID_TUNER_L_DVBS2_PILOT: DISPID_TUNER = DISPID_TUNER(412i32);
pub const DISPID_TUNER_L_DVBS2_ROLLOFF: DISPID_TUNER = DISPID_TUNER(411i32);
pub const DISPID_TUNER_L_DVBS_AZIMUTH: DISPID_TUNER = DISPID_TUNER(404i32);
pub const DISPID_TUNER_L_DVBS_ELEVATION: DISPID_TUNER = DISPID_TUNER(405i32);
pub const DISPID_TUNER_L_DVBS_ORBITAL: DISPID_TUNER = DISPID_TUNER(403i32);
pub const DISPID_TUNER_L_DVBS_POLARISATION: DISPID_TUNER = DISPID_TUNER(401i32);
pub const DISPID_TUNER_L_DVBS_WEST: DISPID_TUNER = DISPID_TUNER(402i32);
pub const DISPID_TUNER_L_DVBT2_PHYSICALLAYERPIPEID: DISPID_TUNER = DISPID_TUNER(351i32);
pub const DISPID_TUNER_L_DVBT_BANDWIDTH: DISPID_TUNER = DISPID_TUNER(301i32);
pub const DISPID_TUNER_L_DVBT_GUARDINTERVAL: DISPID_TUNER = DISPID_TUNER(304i32);
pub const DISPID_TUNER_L_DVBT_HALPHA: DISPID_TUNER = DISPID_TUNER(305i32);
pub const DISPID_TUNER_L_DVBT_INUSE: DISPID_TUNER = DISPID_TUNER(307i32);
pub const DISPID_TUNER_L_DVBT_LPINNERFECMETHOD: DISPID_TUNER = DISPID_TUNER(302i32);
pub const DISPID_TUNER_L_DVBT_LPINNERFECRATE: DISPID_TUNER = DISPID_TUNER(303i32);
pub const DISPID_TUNER_L_DVBT_TRANSMISSIONMODE: DISPID_TUNER = DISPID_TUNER(306i32);
pub const DISPID_TUNER_L_INNERFECMETHOD: DISPID_TUNER = DISPID_TUNER(2i32);
pub const DISPID_TUNER_L_INNERFECRATE: DISPID_TUNER = DISPID_TUNER(3i32);
pub const DISPID_TUNER_L_MOD: DISPID_TUNER = DISPID_TUNER(6i32);
pub const DISPID_TUNER_L_OUTERFECMETHOD: DISPID_TUNER = DISPID_TUNER(4i32);
pub const DISPID_TUNER_L_OUTERFECRATE: DISPID_TUNER = DISPID_TUNER(5i32);
pub const DISPID_TUNER_L_SYMRATE: DISPID_TUNER = DISPID_TUNER(7i32);
pub const DISPID_TUNER_MP2CT_TYPE: DISPID_TUNER = DISPID_TUNER(200i32);
pub const DISPID_TUNER_TR_CLONE: DISPID_TUNER = DISPID_TUNER(3i32);
pub const DISPID_TUNER_TR_COMPONENTS: DISPID_TUNER = DISPID_TUNER(2i32);
pub const DISPID_TUNER_TR_LOCATOR: DISPID_TUNER = DISPID_TUNER(4i32);
pub const DISPID_TUNER_TR_TUNINGSPACE: DISPID_TUNER = DISPID_TUNER(1i32);
pub const DISPID_TUNER_TS_AR_COUNTRYCODE: DISPID_TUNER = DISPID_TUNER(104i32);
pub const DISPID_TUNER_TS_AR_MAXFREQUENCY: DISPID_TUNER = DISPID_TUNER(102i32);
pub const DISPID_TUNER_TS_AR_MINFREQUENCY: DISPID_TUNER = DISPID_TUNER(101i32);
pub const DISPID_TUNER_TS_AR_STEP: DISPID_TUNER = DISPID_TUNER(103i32);
pub const DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL: DISPID_TUNER = DISPID_TUNER(202i32);
pub const DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL: DISPID_TUNER = DISPID_TUNER(204i32);
pub const DISPID_TUNER_TS_ATSC_MINMINORCHANNEL: DISPID_TUNER = DISPID_TUNER(201i32);
pub const DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL: DISPID_TUNER = DISPID_TUNER(203i32);
pub const DISPID_TUNER_TS_ATV_COUNTRYCODE: DISPID_TUNER = DISPID_TUNER(104i32);
pub const DISPID_TUNER_TS_ATV_INPUTTYPE: DISPID_TUNER = DISPID_TUNER(103i32);
pub const DISPID_TUNER_TS_ATV_MAXCHANNEL: DISPID_TUNER = DISPID_TUNER(102i32);
pub const DISPID_TUNER_TS_ATV_MINCHANNEL: DISPID_TUNER = DISPID_TUNER(101i32);
pub const DISPID_TUNER_TS_AUX_COUNTRYCODE: DISPID_TUNER = DISPID_TUNER(101i32);
pub const DISPID_TUNER_TS_CLONE: DISPID_TUNER = DISPID_TUNER(12i32);
pub const DISPID_TUNER_TS_CLSID: DISPID_TUNER = DISPID_TUNER(3i32);
pub const DISPID_TUNER_TS_CREATETUNEREQUEST: DISPID_TUNER = DISPID_TUNER(6i32);
pub const DISPID_TUNER_TS_DC_MAXMAJORCHANNEL: DISPID_TUNER = DISPID_TUNER(302i32);
pub const DISPID_TUNER_TS_DC_MAXSOURCEID: DISPID_TUNER = DISPID_TUNER(304i32);
pub const DISPID_TUNER_TS_DC_MINMAJORCHANNEL: DISPID_TUNER = DISPID_TUNER(301i32);
pub const DISPID_TUNER_TS_DC_MINSOURCEID: DISPID_TUNER = DISPID_TUNER(303i32);
pub const DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES: DISPID_TUNER = DISPID_TUNER(9i32);
pub const DISPID_TUNER_TS_DEFLOCATOR: DISPID_TUNER = DISPID_TUNER(11i32);
pub const DISPID_TUNER_TS_DVB2_NETWORK_ID: DISPID_TUNER = DISPID_TUNER(102i32);
pub const DISPID_TUNER_TS_DVBS2_HI_OSC_FREQ_OVERRIDE: DISPID_TUNER = DISPID_TUNER(408i32);
pub const DISPID_TUNER_TS_DVBS2_LNB_SWITCH_FREQ_OVERRIDE: DISPID_TUNER = DISPID_TUNER(409i32);
pub const DISPID_TUNER_TS_DVBS2_LOW_OSC_FREQ_OVERRIDE: DISPID_TUNER = DISPID_TUNER(407i32);
pub const DISPID_TUNER_TS_DVBS2_SPECTRAL_INVERSION_OVERRIDE: DISPID_TUNER = DISPID_TUNER(410i32);
pub const DISPID_TUNER_TS_DVBS_HI_OSC_FREQ: DISPID_TUNER = DISPID_TUNER(1002i32);
pub const DISPID_TUNER_TS_DVBS_INPUT_RANGE: DISPID_TUNER = DISPID_TUNER(1004i32);
pub const DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ: DISPID_TUNER = DISPID_TUNER(1003i32);
pub const DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ: DISPID_TUNER = DISPID_TUNER(1001i32);
pub const DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION: DISPID_TUNER = DISPID_TUNER(1005i32);
pub const DISPID_TUNER_TS_DVB_SYSTEMTYPE: DISPID_TUNER = DISPID_TUNER(101i32);
pub const DISPID_TUNER_TS_ENUMCATEGORYGUIDS: DISPID_TUNER = DISPID_TUNER(7i32);
pub const DISPID_TUNER_TS_ENUMDEVICEMONIKERS: DISPID_TUNER = DISPID_TUNER(8i32);
pub const DISPID_TUNER_TS_FREQMAP: DISPID_TUNER = DISPID_TUNER(10i32);
pub const DISPID_TUNER_TS_FRIENDLYNAME: DISPID_TUNER = DISPID_TUNER(2i32);
pub const DISPID_TUNER_TS_NETWORKTYPE: DISPID_TUNER = DISPID_TUNER(4i32);
pub const DISPID_TUNER_TS_UNIQUENAME: DISPID_TUNER = DISPID_TUNER(1i32);
pub const DISPID_TUNER_TS__NETWORKTYPE: DISPID_TUNER = DISPID_TUNER(5i32);
pub const DOWNRES_Always: DownResEventParam = DownResEventParam(0i32);
pub const DOWNRES_InWindowOnly: DownResEventParam = DownResEventParam(1i32);
pub const DOWNRES_Undefined: DownResEventParam = DownResEventParam(2i32);
pub const DSATTRIB_BadSampleInfo: windows_core::GUID = windows_core::GUID::from_u128(0xe4846dda_5838_42b4_b897_6f7e5faa2f2f);
pub const DSATTRIB_WMDRMProtectionInfo: windows_core::GUID = windows_core::GUID::from_u128(0x40749583_6b9d_4eec_b43c_67a1801e1a9b);
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct DSHOW_STREAM_DESC {
    pub VersionNo: u32,
    pub StreamId: u32,
    pub Default: windows_core::BOOL,
    pub Creation: windows_core::BOOL,
    pub Reserved: u32,
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct DSMCC_ELEMENT {
    pub pid: u16,
    pub bComponentTag: u8,
    pub dwCarouselId: u32,
    pub dwTransactionId: u32,
    pub pNext: *mut DSMCC_ELEMENT,
}
impl Default for DSMCC_ELEMENT {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct DSMCC_FILTER_OPTIONS {
    pub fSpecifyProtocol: windows_core::BOOL,
    pub Protocol: u8,
    pub fSpecifyType: windows_core::BOOL,
    pub Type: u8,
    pub fSpecifyMessageId: windows_core::BOOL,
    pub MessageId: u16,
    pub fSpecifyTransactionId: windows_core::BOOL,
    pub fUseTrxIdMessageIdMask: windows_core::BOOL,
    pub TransactionId: u32,
    pub fSpecifyModuleVersion: windows_core::BOOL,
    pub ModuleVersion: u8,
    pub fSpecifyBlockNumber: windows_core::BOOL,
    pub BlockNumber: u16,
    pub fGetModuleCall: windows_core::BOOL,
    pub NumberOfBlocksInModule: u16,
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct DSMCC_SECTION {
    pub TableId: u8,
    pub Header: DSMCC_SECTION_0,
    pub TableIdExtension: u16,
    pub Version: DSMCC_SECTION_1,
    pub SectionNumber: u8,
    pub LastSectionNumber: u8,
    pub ProtocolDiscriminator: u8,
    pub DsmccType: u8,
    pub MessageId: u16,
    pub TransactionId: u32,
    pub Reserved: u8,
    pub AdaptationLength: u8,
    pub MessageLength: u16,
    pub RemainingData: [u8; 1],
}
impl Default for DSMCC_SECTION {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub union DSMCC_SECTION_0 {
    pub S: MPEG_HEADER_BITS_MIDL,
    pub W: u16,
}
impl Default for DSMCC_SECTION_0 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[derive(Clone, Copy)]
pub union DSMCC_SECTION_1 {
    pub S: MPEG_HEADER_VERSION_BITS_MIDL,
    pub B: u8,
}
impl Default for DSMCC_SECTION_1 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const DTFilter: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4f2_0049_4e2b_98fb_9537f6ce516d);
pub const DTV_CardStatus_Error: u32 = 2u32;
pub const DTV_CardStatus_FirmwareDownload: u32 = 3u32;
pub const DTV_CardStatus_Inserted: u32 = 0u32;
pub const DTV_CardStatus_Removed: u32 = 1u32;
pub const DTV_Entitlement_CanDecrypt: u32 = 0u32;
pub const DTV_Entitlement_NotEntitled: u32 = 1u32;
pub const DTV_Entitlement_TechnicalFailure: u32 = 2u32;
pub const DTV_MMIMessage_Close: u32 = 1u32;
pub const DTV_MMIMessage_Open: u32 = 0u32;
pub const DVBCLocator: windows_core::GUID = windows_core::GUID::from_u128(0xc531d9fd_9685_4028_8b68_6e1232079f1e);
pub const DVBSLocator: windows_core::GUID = windows_core::GUID::from_u128(0x1df7d126_4050_47f0_a7cf_4c4ca9241333);
pub const DVBSTuningSpace: windows_core::GUID = windows_core::GUID::from_u128(0xb64016f3_c9a2_4066_96f0_bd9563314726);
pub const DVBS_SCAN_TABLE_MAX_SIZE: u32 = 400u32;
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct DVBScramblingControlSpanningEvent {
    pub ulPID: u32,
    pub fScrambled: windows_core::BOOL,
}
pub const DVBTLocator: windows_core::GUID = windows_core::GUID::from_u128(0x9cd64701_bdf3_4d14_8e03_f12983d86664);
pub const DVBTLocator2: windows_core::GUID = windows_core::GUID::from_u128(0xefe3fa02_45d7_4920_be96_53fa7f35b0e6);
pub const DVBTuneRequest: windows_core::GUID = windows_core::GUID::from_u128(0x15d6504a_5494_499c_886c_973c9e53b9f1);
pub const DVBTuningSpace: windows_core::GUID = windows_core::GUID::from_u128(0xc6b14b32_76aa_4a86_a7ac_5c79aaf58da7);
pub const DVB_BAT_PID: u32 = 17u32;
pub const DVB_BAT_TID: u32 = 74u32;
pub const DVB_CABLE_TV_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0xdc0c0fe7_0485_4266_b93f_68fbf80ed834);
pub const DVB_DIT_PID: u32 = 30u32;
pub const DVB_DIT_TID: u32 = 126u32;
pub const DVB_EIT_ACTUAL_TID: u32 = 78u32;
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct DVB_EIT_FILTER_OPTIONS {
    pub fSpecifySegment: windows_core::BOOL,
    pub bSegment: u8,
}
pub const DVB_EIT_OTHER_TID: u32 = 79u32;
pub const DVB_EIT_PID: u32 = 18u32;
pub const DVB_NIT_ACTUAL_TID: u32 = 64u32;
pub const DVB_NIT_OTHER_TID: u32 = 65u32;
pub const DVB_NIT_PID: u32 = 16u32;
pub const DVB_RST_PID: u32 = 19u32;
pub const DVB_RST_TID: u32 = 113u32;
pub const DVB_SATELLITE_TV_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0xfa4b375a_45b4_4d45_8440_263957b11623);
pub const DVB_SDT_ACTUAL_TID: u32 = 66u32;
pub const DVB_SDT_OTHER_TID: u32 = 70u32;
pub const DVB_SDT_PID: u32 = 17u32;
pub const DVB_SIT_PID: u32 = 31u32;
pub const DVB_SIT_TID: u32 = 127u32;
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct DVB_STRCONV_MODE(pub i32);
pub const DVB_ST_PID_16: u32 = 16u32;
pub const DVB_ST_PID_17: u32 = 17u32;
pub const DVB_ST_PID_18: u32 = 18u32;
pub const DVB_ST_PID_19: u32 = 19u32;
pub const DVB_ST_PID_20: u32 = 20u32;
pub const DVB_ST_TID: u32 = 114u32;
pub const DVB_TDT_PID: u32 = 20u32;
pub const DVB_TDT_TID: u32 = 112u32;
pub const DVB_TERRESTRIAL_TV_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0x216c62df_6d7f_4e9a_8571_05f14edb766a);
pub const DVB_TOT_PID: u32 = 20u32;
pub const DVB_TOT_TID: u32 = 115u32;
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct DVDFilterState(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct DVDMenuIDConstants(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct DVDSPExt(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct DVDTextStringType(pub i32);
#[repr(C)]
#[cfg(feature = "Win32_Media_MediaFoundation")]
#[derive(Clone, Debug, Default, PartialEq)]
pub struct DVR_STREAM_DESC {
    pub Version: u32,
    pub StreamId: u32,
    pub Default: windows_core::BOOL,
    pub Creation: windows_core::BOOL,
    pub Reserved: u32,
    pub guidSubMediaType: windows_core::GUID,
    pub guidFormatType: windows_core::GUID,
    pub MediaType: super::super::MediaFoundation::AM_MEDIA_TYPE,
}
pub const DigitalCableLocator: windows_core::GUID = windows_core::GUID::from_u128(0x03c06416_d127_407a_ab4c_fdd279abbe5d);
pub const DigitalCableTuneRequest: windows_core::GUID = windows_core::GUID::from_u128(0x26ec0b63_aa90_458a_8df4_5659f2c8a18a);
pub const DigitalCableTuningSpace: windows_core::GUID = windows_core::GUID::from_u128(0xd9bb4cee_b87a_47f1_ac92_b08d9c7813fc);
pub const DigitalLocator: windows_core::GUID = windows_core::GUID::from_u128(0x6e50cc0d_c19b_4bf6_810b_5bd60761f5cc);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct DisplaySizeList(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct DownResEventParam(pub i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct DualMonoInfo {
    pub LangID1: u16,
    pub LangID2: u16,
    pub lISOLangCode1: i32,
    pub lISOLangCode2: i32,
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct DvbParentalRatingDescriptor {
    pub ulNumParams: u32,
    pub pParams: [DvbParentalRatingParam; 1],
}
impl Default for DvbParentalRatingDescriptor {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct DvbParentalRatingParam {
    pub szCountryCode: [i8; 4],
    pub bRating: u8,
}
impl Default for DvbParentalRatingParam {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const ECHOSTAR_SATELLITE_TV_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0xc4f6b31b_c6bf_4759_886f_a7386dca27a0);
pub const ENCDEC_CPEVENT: EncDecEvents = EncDecEvents(0i32);
pub const ENCDEC_RECORDING_STATUS: EncDecEvents = EncDecEvents(1i32);
pub const ESEventFactory: windows_core::GUID = windows_core::GUID::from_u128(0x8e8a07da_71f8_40c1_a929_5e3a868ac2c6);
pub const ESEventService: windows_core::GUID = windows_core::GUID::from_u128(0xc20447fc_ec60_475e_813f_d2b0a6decefe);
pub const ETFilter: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4f1_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_ARIBcontentSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x3a954083_93d0_463e_90b2_0742c496edf0);
pub const EVENTID_AudioDescriptorSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x107bd41c_a6da_4691_8369_11b2cdaa288e);
pub const EVENTID_AudioTypeSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x501cbfbe_b849_42ce_9be9_3db869fb82b3);
pub const EVENTID_BDAConditionalAccessTAG: windows_core::GUID = windows_core::GUID::from_u128(0xefc3a459_ae8b_4b4a_8fe9_79a0d097f3ea);
pub const EVENTID_BDAEventingServicePendingEvent: windows_core::GUID = windows_core::GUID::from_u128(0x5ca51711_5ddc_41a6_9430_e41b8b3bbc5b);
pub const EVENTID_BDA_CASBroadcastMMI: windows_core::GUID = windows_core::GUID::from_u128(0x676876f0_1132_404c_a7ca_e72069a9d54f);
pub const EVENTID_BDA_CASCloseMMI: windows_core::GUID = windows_core::GUID::from_u128(0x5d0f550f_de2e_479d_8345_ec0e9557e8a2);
pub const EVENTID_BDA_CASOpenMMI: windows_core::GUID = windows_core::GUID::from_u128(0x85dac915_e593_410d_8471_d6812105f28e);
pub const EVENTID_BDA_CASReleaseTuner: windows_core::GUID = windows_core::GUID::from_u128(0x20c1a16b_441f_49a5_bb5c_e9a04495c6c1);
pub const EVENTID_BDA_CASRequestTuner: windows_core::GUID = windows_core::GUID::from_u128(0xcf39a9d8_f5d3_4685_be57_ed81dba46b27);
pub const EVENTID_BDA_DiseqCResponseAvailable: windows_core::GUID = windows_core::GUID::from_u128(0xefa628f8_1f2c_4b67_9ea5_acf6fa9a1f36);
pub const EVENTID_BDA_EncoderSignalLock: windows_core::GUID = windows_core::GUID::from_u128(0x5ec90eb9_39fa_4cfc_b93f_00bb11077f5e);
pub const EVENTID_BDA_FdcStatus: windows_core::GUID = windows_core::GUID::from_u128(0x05f25366_d0eb_43d2_bc3c_682b863df142);
pub const EVENTID_BDA_FdcTableSection: windows_core::GUID = windows_core::GUID::from_u128(0x6a0cd757_4ce3_4e5b_9444_7187b87152c5);
pub const EVENTID_BDA_GPNVValueUpdate: windows_core::GUID = windows_core::GUID::from_u128(0xff75c68c_f416_4e7e_bf17_6d55c5df1575);
pub const EVENTID_BDA_GuideDataAvailable: windows_core::GUID = windows_core::GUID::from_u128(0x98db717a_478a_4cd4_92d0_95f66b89e5b1);
pub const EVENTID_BDA_GuideDataError: windows_core::GUID = windows_core::GUID::from_u128(0xac33c448_6f73_4fd7_b341_594c360d8d74);
pub const EVENTID_BDA_GuideServiceInformationUpdated: windows_core::GUID = windows_core::GUID::from_u128(0xa1c3ea2b_175f_4458_b735_507d22db23a6);
pub const EVENTID_BDA_IsdbCASResponse: windows_core::GUID = windows_core::GUID::from_u128(0xd4cb1966_41bc_4ced_9a20_fdceac78f70d);
pub const EVENTID_BDA_LbigsCloseConnectionHandle: windows_core::GUID = windows_core::GUID::from_u128(0xc2f08b99_65ef_4314_9671_e99d4cce0bae);
pub const EVENTID_BDA_LbigsOpenConnection: windows_core::GUID = windows_core::GUID::from_u128(0x356207b2_6f31_4eb0_a271_b3fa6bb7680f);
pub const EVENTID_BDA_LbigsSendData: windows_core::GUID = windows_core::GUID::from_u128(0x1123277b_f1c6_4154_8b0d_48e6157059aa);
pub const EVENTID_BDA_RatingPinReset: windows_core::GUID = windows_core::GUID::from_u128(0xc6e048c0_c574_4c26_bcda_2f4d35eb5e85);
pub const EVENTID_BDA_TransprtStreamSelectorInfo: windows_core::GUID = windows_core::GUID::from_u128(0xc40f9f85_09d0_489c_9e9c_0abbb56951b0);
pub const EVENTID_BDA_TunerNoSignal: windows_core::GUID = windows_core::GUID::from_u128(0xe29b382b_1edd_4930_bc46_682fd72d2dfb);
pub const EVENTID_BDA_TunerSignalLock: windows_core::GUID = windows_core::GUID::from_u128(0x1872e740_f573_429b_a00e_d9c1e408af09);
pub const EVENTID_BDA_UpdateDrmStatus: windows_core::GUID = windows_core::GUID::from_u128(0x65a6f681_1462_473b_88ce_cb731427bdb5);
pub const EVENTID_BDA_UpdateScanState: windows_core::GUID = windows_core::GUID::from_u128(0x55702b50_7b49_42b8_a82f_4afb691b0628);
pub const EVENTID_CADenialCountChanged: windows_core::GUID = windows_core::GUID::from_u128(0x2a65c528_2249_4070_ac16_00390cdfb2dd);
pub const EVENTID_CASFailureSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0xead831ae_5529_4d1f_afce_0d8cd1257d30);
pub const EVENTID_CSDescriptorSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0xefe779d9_97f0_4786_800d_95cf505ddc66);
pub const EVENTID_CandidatePostTuneData: windows_core::GUID = windows_core::GUID::from_u128(0x9f02d3d0_9f06_4369_9f1e_3ad6ca19807e);
pub const EVENTID_CardStatusChanged: windows_core::GUID = windows_core::GUID::from_u128(0xa265faea_f874_4b38_9ff7_c53d02969996);
pub const EVENTID_ChannelChangeSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x9067c5e5_4c5c_4205_86c8_7afe20fe1efa);
pub const EVENTID_ChannelInfoSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x41f36d80_4132_4cc2_b121_01a43219d81b);
pub const EVENTID_ChannelTypeSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x72ab1d51_87d2_489b_ba11_0e08dc210243);
pub const EVENTID_CtxADescriptorSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x3ab4a2e6_4247_4b34_896c_30afa5d21c24);
pub const EVENTID_DFNWithNoActualAVData: windows_core::GUID = windows_core::GUID::from_u128(0xf5689ffe_55f9_4bb3_96be_ae971c63bae0);
pub const EVENTID_DRMParingStatusChanged: windows_core::GUID = windows_core::GUID::from_u128(0x000906f5_f0d1_41d6_a7df_4028697669f6);
pub const EVENTID_DRMParingStepComplete: windows_core::GUID = windows_core::GUID::from_u128(0x5b2ebf78_b752_4420_b41e_a472dc95828e);
pub const EVENTID_DTFilterCOPPBlock: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4ea_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_DTFilterCOPPUnblock: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4e8_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_DTFilterDataFormatFailure: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4ed_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_DTFilterDataFormatOK: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4ec_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_DTFilterRatingChange: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4e2_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_DTFilterRatingsBlock: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4e3_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_DTFilterRatingsUnblock: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4e4_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_DTFilterXDSPacket: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4e5_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_DVBScramblingControlSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x4bd4e1c4_90a1_4109_8236_27f00e7dcc5b);
pub const EVENTID_DemultiplexerFilterDiscontinuity: windows_core::GUID = windows_core::GUID::from_u128(0x16155770_aed5_475c_bb98_95a33070df0c);
pub const EVENTID_DualMonoSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0xa9a29b56_a84b_488c_89d5_0d4e7657c8ce);
pub const EVENTID_DvbParentalRatingDescriptor: windows_core::GUID = windows_core::GUID::from_u128(0x2a67a58d_eca5_4eac_abcb_e734d3776d0a);
pub const EVENTID_EASMessageReceived: windows_core::GUID = windows_core::GUID::from_u128(0xd10df9d5_c261_4b85_9e8a_517b3299cab2);
pub const EVENTID_ETDTFilterLicenseFailure: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4ef_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_ETDTFilterLicenseOK: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4ee_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_ETFilterCopyNever: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4f0_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_ETFilterCopyOnce: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4eb_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_ETFilterEncryptionOff: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4e7_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_ETFilterEncryptionOn: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4e6_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_EmmMessageSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x6bf00268_4f7e_4294_aa87_e9e953e43f14);
pub const EVENTID_EncDecFilterError: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4e9_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_EncDecFilterEvent: windows_core::GUID = windows_core::GUID::from_u128(0x4a1b465b_0fb9_4159_afbd_e33006a0f9f4);
pub const EVENTID_EntitlementChanged: windows_core::GUID = windows_core::GUID::from_u128(0x9071ad5d_2359_4c95_8694_afa81d70bfd5);
pub const EVENTID_FormatNotSupportedEvent: windows_core::GUID = windows_core::GUID::from_u128(0x24b2280a_b2aa_4777_bf65_63f35e7b024a);
pub const EVENTID_LanguageSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0xe292666d_9c02_448d_aa8d_781a93fdc395);
pub const EVENTID_MMIMessage: windows_core::GUID = windows_core::GUID::from_u128(0x052c29af_09a4_4b93_890f_bd6a348968a4);
pub const EVENTID_NewSignalAcquired: windows_core::GUID = windows_core::GUID::from_u128(0xc87ec52d_cd18_404a_a076_c02a273d3de7);
pub const EVENTID_PBDAParentalControlEvent: windows_core::GUID = windows_core::GUID::from_u128(0xf947aa85_fb52_48e8_b9c5_e1e1f411a51a);
pub const EVENTID_PIDListSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x47fc8f65_e2bb_4634_9cef_fdbfe6261d5c);
pub const EVENTID_PSITable: windows_core::GUID = windows_core::GUID::from_u128(0x1b9c3703_d447_4e16_97bb_01799fc031ed);
pub const EVENTID_RRTSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0xf6cfc8f4_da93_4f2f_bff8_ba1ee6fca3a2);
pub const EVENTID_SBE2RecControlStarted: windows_core::GUID = windows_core::GUID::from_u128(0x8966a89e_f83e_4c0e_bc3b_bfa7649e04cb);
pub const EVENTID_SBE2RecControlStopped: windows_core::GUID = windows_core::GUID::from_u128(0x454b1ec8_0c9b_4caa_b1a1_1e7a2666f6c3);
pub const EVENTID_STBChannelNumber: windows_core::GUID = windows_core::GUID::from_u128(0x17c4d730_d0f0_413a_8c99_500469de35ad);
pub const EVENTID_ServiceTerminated: windows_core::GUID = windows_core::GUID::from_u128(0x0a1d591c_e0d2_4f8e_8960_2335bef45ccb);
pub const EVENTID_SignalAndServiceStatusSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x8068c5cb_3c04_492b_b47d_0308820dce51);
pub const EVENTID_SignalStatusChanged: windows_core::GUID = windows_core::GUID::from_u128(0x6d9cfaf2_702d_4b01_8dff_6892ad20d191);
pub const EVENTID_StreamIDSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0xcaf1ab68_e153_4d41_a6b3_a7c998db75ee);
pub const EVENTID_StreamTypeSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x82af2ebc_30a6_4264_a80b_ad2e1372ac60);
pub const EVENTID_SubtitleSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x5dcec048_d0b9_4163_872c_4f32223be88a);
pub const EVENTID_TeletextSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x9599d950_5f33_4617_af7c_1e54b510daa3);
pub const EVENTID_TuneFailureEvent: windows_core::GUID = windows_core::GUID::from_u128(0xd97287b2_2dfd_436a_9485_99d7d4ab5a69);
pub const EVENTID_TuneFailureSpanningEvent: windows_core::GUID = windows_core::GUID::from_u128(0x6f8aa455_5ee1_48ab_a27c_4c8d70b9aeba);
pub const EVENTID_TuningChanged: windows_core::GUID = windows_core::GUID::from_u128(0x9d7e6235_4b7d_425d_a6d1_d717c33b9c4c);
pub const EVENTID_TuningChanging: windows_core::GUID = windows_core::GUID::from_u128(0x83183c03_c09e_45c4_a719_807a94952bf9);
pub const EVENTID_XDSCodecDuplicateXDSRating: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4df_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_XDSCodecNewXDSPacket: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4e1_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTID_XDSCodecNewXDSRating: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4e0_0049_4e2b_98fb_9537f6ce516d);
pub const EVENTTYPE_CASDescrambleFailureEvent: windows_core::GUID = windows_core::GUID::from_u128(0xb2127d42_7be5_4f4b_9130_6679899f4f4b);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct EnTag_Mode(pub i32);
pub const EnTag_Once: EnTag_Mode = EnTag_Mode(1i32);
pub const EnTag_Remove: EnTag_Mode = EnTag_Mode(0i32);
pub const EnTag_Repeat: EnTag_Mode = EnTag_Mode(2i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct EnTvRat_CAE_TV(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct EnTvRat_CAF_TV(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct EnTvRat_GenericLevel(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct EnTvRat_MPAA(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct EnTvRat_System(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct EnTvRat_US_TV(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct EncDecEvents(pub i32);
pub const EvalRat: windows_core::GUID = windows_core::GUID::from_u128(0xc5c5c5f1_3abc_11d6_b25b_00c04fa0c026);
pub const FORMATNOTSUPPORTED_CLEAR: FormatNotSupportedEvents = FormatNotSupportedEvents(0i32);
pub const FORMATNOTSUPPORTED_NOTSUPPORTED: FormatNotSupportedEvents = FormatNotSupportedEvents(1i32);
pub const FORMATTYPE_CPFilters_Processed: windows_core::GUID = windows_core::GUID::from_u128(0x6739b36f_1d5f_4ac2_8192_28bb0e73d16a);
pub const FORMATTYPE_ETDTFilter_Tagged: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4d1_0049_4e2b_98fb_9537f6ce516d);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct FormatNotSupportedEvents(pub i32);
pub const FrameMode: PositionModeList = PositionModeList(0i32);
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IATSCChannelTuneRequest, IATSCChannelTuneRequest_Vtbl, 0x0369b4e1_45b6_11d3_b650_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IATSCChannelTuneRequest {
    type Target = IChannelTuneRequest;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IATSCChannelTuneRequest, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuneRequest, IChannelTuneRequest);
#[cfg(feature = "Win32_System_Com")]
impl IATSCChannelTuneRequest {
    pub unsafe fn MinorChannel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MinorChannel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMinorChannel(&self, minorchannel: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMinorChannel)(windows_core::Interface::as_raw(self), minorchannel).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IATSCChannelTuneRequest_Vtbl {
    pub base__: IChannelTuneRequest_Vtbl,
    pub MinorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMinorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IATSCChannelTuneRequest_Impl: IChannelTuneRequest_Impl {
    fn MinorChannel(&self) -> windows_core::Result<i32>;
    fn SetMinorChannel(&self, minorchannel: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IATSCChannelTuneRequest_Vtbl {
    pub const fn new<Identity: IATSCChannelTuneRequest_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn MinorChannel<Identity: IATSCChannelTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, minorchannel: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSCChannelTuneRequest_Impl::MinorChannel(this) {
                    Ok(ok__) => {
                        minorchannel.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMinorChannel<Identity: IATSCChannelTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, minorchannel: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSCChannelTuneRequest_Impl::SetMinorChannel(this, core::mem::transmute_copy(&minorchannel)).into()
            }
        }
        Self {
            base__: IChannelTuneRequest_Vtbl::new::<Identity, OFFSET>(),
            MinorChannel: MinorChannel::<Identity, OFFSET>,
            SetMinorChannel: SetMinorChannel::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IATSCChannelTuneRequest as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuneRequest as windows_core::Interface>::IID || iid == &<IChannelTuneRequest as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IATSCChannelTuneRequest {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IATSCComponentType, IATSCComponentType_Vtbl, 0xfc189e4d_7bd4_4125_b3b3_3a76a332cc96);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IATSCComponentType {
    type Target = IMPEG2ComponentType;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IATSCComponentType, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IComponentType, ILanguageComponentType, IMPEG2ComponentType);
#[cfg(feature = "Win32_System_Com")]
impl IATSCComponentType {
    pub unsafe fn Flags(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Flags)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetFlags(&self, flags: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetFlags)(windows_core::Interface::as_raw(self), flags).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IATSCComponentType_Vtbl {
    pub base__: IMPEG2ComponentType_Vtbl,
    pub Flags: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetFlags: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IATSCComponentType_Impl: IMPEG2ComponentType_Impl {
    fn Flags(&self) -> windows_core::Result<i32>;
    fn SetFlags(&self, flags: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IATSCComponentType_Vtbl {
    pub const fn new<Identity: IATSCComponentType_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Flags<Identity: IATSCComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, flags: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSCComponentType_Impl::Flags(this) {
                    Ok(ok__) => {
                        flags.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetFlags<Identity: IATSCComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, flags: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSCComponentType_Impl::SetFlags(this, core::mem::transmute_copy(&flags)).into()
            }
        }
        Self { base__: IMPEG2ComponentType_Vtbl::new::<Identity, OFFSET>(), Flags: Flags::<Identity, OFFSET>, SetFlags: SetFlags::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IATSCComponentType as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IComponentType as windows_core::Interface>::IID || iid == &<ILanguageComponentType as windows_core::Interface>::IID || iid == &<IMPEG2ComponentType as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IATSCComponentType {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IATSCLocator, IATSCLocator_Vtbl, 0xbf8d986f_8c2b_4131_94d7_4d3d9fcc21ef);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IATSCLocator {
    type Target = IDigitalLocator;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IATSCLocator, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ILocator, IDigitalLocator);
#[cfg(feature = "Win32_System_Com")]
impl IATSCLocator {
    pub unsafe fn PhysicalChannel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).PhysicalChannel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetPhysicalChannel(&self, physicalchannel: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetPhysicalChannel)(windows_core::Interface::as_raw(self), physicalchannel).ok() }
    }
    pub unsafe fn TSID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TSID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetTSID(&self, tsid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetTSID)(windows_core::Interface::as_raw(self), tsid).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IATSCLocator_Vtbl {
    pub base__: IDigitalLocator_Vtbl,
    pub PhysicalChannel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetPhysicalChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub TSID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetTSID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IATSCLocator_Impl: IDigitalLocator_Impl {
    fn PhysicalChannel(&self) -> windows_core::Result<i32>;
    fn SetPhysicalChannel(&self, physicalchannel: i32) -> windows_core::Result<()>;
    fn TSID(&self) -> windows_core::Result<i32>;
    fn SetTSID(&self, tsid: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IATSCLocator_Vtbl {
    pub const fn new<Identity: IATSCLocator_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn PhysicalChannel<Identity: IATSCLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, physicalchannel: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSCLocator_Impl::PhysicalChannel(this) {
                    Ok(ok__) => {
                        physicalchannel.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetPhysicalChannel<Identity: IATSCLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, physicalchannel: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSCLocator_Impl::SetPhysicalChannel(this, core::mem::transmute_copy(&physicalchannel)).into()
            }
        }
        unsafe extern "system" fn TSID<Identity: IATSCLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tsid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSCLocator_Impl::TSID(this) {
                    Ok(ok__) => {
                        tsid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetTSID<Identity: IATSCLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tsid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSCLocator_Impl::SetTSID(this, core::mem::transmute_copy(&tsid)).into()
            }
        }
        Self {
            base__: IDigitalLocator_Vtbl::new::<Identity, OFFSET>(),
            PhysicalChannel: PhysicalChannel::<Identity, OFFSET>,
            SetPhysicalChannel: SetPhysicalChannel::<Identity, OFFSET>,
            TSID: TSID::<Identity, OFFSET>,
            SetTSID: SetTSID::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IATSCLocator as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ILocator as windows_core::Interface>::IID || iid == &<IDigitalLocator as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IATSCLocator {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IATSCLocator2, IATSCLocator2_Vtbl, 0x612aa885_66cf_4090_ba0a_566f5312e4ca);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IATSCLocator2 {
    type Target = IATSCLocator;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IATSCLocator2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ILocator, IDigitalLocator, IATSCLocator);
#[cfg(feature = "Win32_System_Com")]
impl IATSCLocator2 {
    pub unsafe fn ProgramNumber(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ProgramNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetProgramNumber(&self, programnumber: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetProgramNumber)(windows_core::Interface::as_raw(self), programnumber).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IATSCLocator2_Vtbl {
    pub base__: IATSCLocator_Vtbl,
    pub ProgramNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetProgramNumber: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IATSCLocator2_Impl: IATSCLocator_Impl {
    fn ProgramNumber(&self) -> windows_core::Result<i32>;
    fn SetProgramNumber(&self, programnumber: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IATSCLocator2_Vtbl {
    pub const fn new<Identity: IATSCLocator2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn ProgramNumber<Identity: IATSCLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, programnumber: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSCLocator2_Impl::ProgramNumber(this) {
                    Ok(ok__) => {
                        programnumber.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetProgramNumber<Identity: IATSCLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, programnumber: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSCLocator2_Impl::SetProgramNumber(this, core::mem::transmute_copy(&programnumber)).into()
            }
        }
        Self {
            base__: IATSCLocator_Vtbl::new::<Identity, OFFSET>(),
            ProgramNumber: ProgramNumber::<Identity, OFFSET>,
            SetProgramNumber: SetProgramNumber::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IATSCLocator2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ILocator as windows_core::Interface>::IID || iid == &<IDigitalLocator as windows_core::Interface>::IID || iid == &<IATSCLocator as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IATSCLocator2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IATSCTuningSpace, IATSCTuningSpace_Vtbl, 0x0369b4e2_45b6_11d3_b650_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IATSCTuningSpace {
    type Target = IAnalogTVTuningSpace;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IATSCTuningSpace, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuningSpace, IAnalogTVTuningSpace);
#[cfg(feature = "Win32_System_Com")]
impl IATSCTuningSpace {
    pub unsafe fn MinMinorChannel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MinMinorChannel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMinMinorChannel(&self, newminminorchannelval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMinMinorChannel)(windows_core::Interface::as_raw(self), newminminorchannelval).ok() }
    }
    pub unsafe fn MaxMinorChannel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MaxMinorChannel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMaxMinorChannel(&self, newmaxminorchannelval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMaxMinorChannel)(windows_core::Interface::as_raw(self), newmaxminorchannelval).ok() }
    }
    pub unsafe fn MinPhysicalChannel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MinPhysicalChannel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMinPhysicalChannel(&self, newminphysicalchannelval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMinPhysicalChannel)(windows_core::Interface::as_raw(self), newminphysicalchannelval).ok() }
    }
    pub unsafe fn MaxPhysicalChannel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MaxPhysicalChannel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMaxPhysicalChannel(&self, newmaxphysicalchannelval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMaxPhysicalChannel)(windows_core::Interface::as_raw(self), newmaxphysicalchannelval).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IATSCTuningSpace_Vtbl {
    pub base__: IAnalogTVTuningSpace_Vtbl,
    pub MinMinorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMinMinorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub MaxMinorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMaxMinorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub MinPhysicalChannel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMinPhysicalChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub MaxPhysicalChannel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMaxPhysicalChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IATSCTuningSpace_Impl: IAnalogTVTuningSpace_Impl {
    fn MinMinorChannel(&self) -> windows_core::Result<i32>;
    fn SetMinMinorChannel(&self, newminminorchannelval: i32) -> windows_core::Result<()>;
    fn MaxMinorChannel(&self) -> windows_core::Result<i32>;
    fn SetMaxMinorChannel(&self, newmaxminorchannelval: i32) -> windows_core::Result<()>;
    fn MinPhysicalChannel(&self) -> windows_core::Result<i32>;
    fn SetMinPhysicalChannel(&self, newminphysicalchannelval: i32) -> windows_core::Result<()>;
    fn MaxPhysicalChannel(&self) -> windows_core::Result<i32>;
    fn SetMaxPhysicalChannel(&self, newmaxphysicalchannelval: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IATSCTuningSpace_Vtbl {
    pub const fn new<Identity: IATSCTuningSpace_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn MinMinorChannel<Identity: IATSCTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, minminorchannelval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSCTuningSpace_Impl::MinMinorChannel(this) {
                    Ok(ok__) => {
                        minminorchannelval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMinMinorChannel<Identity: IATSCTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newminminorchannelval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSCTuningSpace_Impl::SetMinMinorChannel(this, core::mem::transmute_copy(&newminminorchannelval)).into()
            }
        }
        unsafe extern "system" fn MaxMinorChannel<Identity: IATSCTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, maxminorchannelval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSCTuningSpace_Impl::MaxMinorChannel(this) {
                    Ok(ok__) => {
                        maxminorchannelval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMaxMinorChannel<Identity: IATSCTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newmaxminorchannelval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSCTuningSpace_Impl::SetMaxMinorChannel(this, core::mem::transmute_copy(&newmaxminorchannelval)).into()
            }
        }
        unsafe extern "system" fn MinPhysicalChannel<Identity: IATSCTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, minphysicalchannelval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSCTuningSpace_Impl::MinPhysicalChannel(this) {
                    Ok(ok__) => {
                        minphysicalchannelval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMinPhysicalChannel<Identity: IATSCTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newminphysicalchannelval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSCTuningSpace_Impl::SetMinPhysicalChannel(this, core::mem::transmute_copy(&newminphysicalchannelval)).into()
            }
        }
        unsafe extern "system" fn MaxPhysicalChannel<Identity: IATSCTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, maxphysicalchannelval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSCTuningSpace_Impl::MaxPhysicalChannel(this) {
                    Ok(ok__) => {
                        maxphysicalchannelval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMaxPhysicalChannel<Identity: IATSCTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newmaxphysicalchannelval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSCTuningSpace_Impl::SetMaxPhysicalChannel(this, core::mem::transmute_copy(&newmaxphysicalchannelval)).into()
            }
        }
        Self {
            base__: IAnalogTVTuningSpace_Vtbl::new::<Identity, OFFSET>(),
            MinMinorChannel: MinMinorChannel::<Identity, OFFSET>,
            SetMinMinorChannel: SetMinMinorChannel::<Identity, OFFSET>,
            MaxMinorChannel: MaxMinorChannel::<Identity, OFFSET>,
            SetMaxMinorChannel: SetMaxMinorChannel::<Identity, OFFSET>,
            MinPhysicalChannel: MinPhysicalChannel::<Identity, OFFSET>,
            SetMinPhysicalChannel: SetMinPhysicalChannel::<Identity, OFFSET>,
            MaxPhysicalChannel: MaxPhysicalChannel::<Identity, OFFSET>,
            SetMaxPhysicalChannel: SetMaxPhysicalChannel::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IATSCTuningSpace as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuningSpace as windows_core::Interface>::IID || iid == &<IAnalogTVTuningSpace as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IATSCTuningSpace {}
windows_core::imp::define_interface!(IATSC_EIT, IATSC_EIT_Vtbl, 0xd7c212d7_76a2_4b4b_aa56_846879a80096);
windows_core::imp::interface_hierarchy!(IATSC_EIT, windows_core::IUnknown);
impl IATSC_EIT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSourceId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSourceId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetProtocolVersion(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetProtocolVersion)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordEventId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordEventId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordStartTime(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_DATE_AND_TIME> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordStartTime)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordEtmLocation(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordEtmLocation)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDuration(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_TIME> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDuration)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordTitleText(&self, dwrecordindex: u32, pdwlength: *mut u32, pptext: *mut *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordTitleText)(windows_core::Interface::as_raw(self), dwrecordindex, pdwlength as _, pptext as _).ok() }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IATSC_EIT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSourceId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetProtocolVersion: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordEventId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordStartTime: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT,
    pub GetRecordEtmLocation: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordDuration: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut MPEG_TIME) -> windows_core::HRESULT,
    pub GetRecordTitleText: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32, *mut *mut u8) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IATSC_EIT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetSourceId(&self) -> windows_core::Result<u16>;
    fn GetProtocolVersion(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordEventId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordStartTime(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_DATE_AND_TIME>;
    fn GetRecordEtmLocation(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordDuration(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_TIME>;
    fn GetRecordTitleText(&self, dwrecordindex: u32, pdwlength: *mut u32, pptext: *mut *mut u8) -> windows_core::Result<()>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
}
impl IATSC_EIT_Vtbl {
    pub const fn new<Identity: IATSC_EIT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_EIT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_EIT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSourceId<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_EIT_Impl::GetSourceId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetProtocolVersion<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_EIT_Impl::GetProtocolVersion(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_EIT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordEventId<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_EIT_Impl::GetRecordEventId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordStartTime<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pmdtval: *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_EIT_Impl::GetRecordStartTime(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pmdtval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordEtmLocation<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_EIT_Impl::GetRecordEtmLocation(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDuration<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pmdval: *mut MPEG_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_EIT_Impl::GetRecordDuration(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pmdval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordTitleText<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwlength: *mut u32, pptext: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_EIT_Impl::GetRecordTitleText(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&pdwlength), core::mem::transmute_copy(&pptext)).into()
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_EIT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_EIT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IATSC_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_EIT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetSourceId: GetSourceId::<Identity, OFFSET>,
            GetProtocolVersion: GetProtocolVersion::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordEventId: GetRecordEventId::<Identity, OFFSET>,
            GetRecordStartTime: GetRecordStartTime::<Identity, OFFSET>,
            GetRecordEtmLocation: GetRecordEtmLocation::<Identity, OFFSET>,
            GetRecordDuration: GetRecordDuration::<Identity, OFFSET>,
            GetRecordTitleText: GetRecordTitleText::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IATSC_EIT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IATSC_EIT {}
windows_core::imp::define_interface!(IATSC_ETT, IATSC_ETT_Vtbl, 0x5a142cc9_b8cf_4a86_a040_e9cadf3ef3e7);
windows_core::imp::interface_hierarchy!(IATSC_ETT, windows_core::IUnknown);
impl IATSC_ETT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetProtocolVersion(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetProtocolVersion)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetEtmId(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEtmId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetExtendedMessageText(&self, pdwlength: *mut u32, pptext: *mut *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetExtendedMessageText)(windows_core::Interface::as_raw(self), pdwlength as _, pptext as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IATSC_ETT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetProtocolVersion: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetEtmId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetExtendedMessageText: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32, *mut *mut u8) -> windows_core::HRESULT,
}
pub trait IATSC_ETT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetProtocolVersion(&self) -> windows_core::Result<u8>;
    fn GetEtmId(&self) -> windows_core::Result<u32>;
    fn GetExtendedMessageText(&self, pdwlength: *mut u32, pptext: *mut *mut u8) -> windows_core::Result<()>;
}
impl IATSC_ETT_Vtbl {
    pub const fn new<Identity: IATSC_ETT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IATSC_ETT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_ETT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IATSC_ETT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_ETT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetProtocolVersion<Identity: IATSC_ETT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_ETT_Impl::GetProtocolVersion(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEtmId<Identity: IATSC_ETT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_ETT_Impl::GetEtmId(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetExtendedMessageText<Identity: IATSC_ETT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwlength: *mut u32, pptext: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_ETT_Impl::GetExtendedMessageText(this, core::mem::transmute_copy(&pdwlength), core::mem::transmute_copy(&pptext)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetProtocolVersion: GetProtocolVersion::<Identity, OFFSET>,
            GetEtmId: GetEtmId::<Identity, OFFSET>,
            GetExtendedMessageText: GetExtendedMessageText::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IATSC_ETT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IATSC_ETT {}
windows_core::imp::define_interface!(IATSC_MGT, IATSC_MGT_Vtbl, 0x8877dabd_c137_4073_97e3_779407a5d87a);
windows_core::imp::interface_hierarchy!(IATSC_MGT, windows_core::IUnknown);
impl IATSC_MGT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetProtocolVersion(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetProtocolVersion)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordType(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordType)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordTypePid(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordTypePid)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordVersionNumber(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordVersionNumber)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self, pdwval: *const u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), pdwval).ok() }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IATSC_MGT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetProtocolVersion: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordType: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordTypePid: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *const u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IATSC_MGT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetProtocolVersion(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordType(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordTypePid(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordVersionNumber(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetCountOfTableDescriptors(&self, pdwval: *const u32) -> windows_core::Result<()>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
}
impl IATSC_MGT_Vtbl {
    pub const fn new<Identity: IATSC_MGT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_MGT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_MGT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetProtocolVersion<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_MGT_Impl::GetProtocolVersion(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_MGT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordType<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_MGT_Impl::GetRecordType(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordTypePid<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, ppidval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_MGT_Impl::GetRecordTypePid(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        ppidval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordVersionNumber<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_MGT_Impl::GetRecordVersionNumber(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_MGT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_MGT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_MGT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *const u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_MGT_Impl::GetCountOfTableDescriptors(this, core::mem::transmute_copy(&pdwval)).into()
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_MGT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: IATSC_MGT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_MGT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetProtocolVersion: GetProtocolVersion::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordType: GetRecordType::<Identity, OFFSET>,
            GetRecordTypePid: GetRecordTypePid::<Identity, OFFSET>,
            GetRecordVersionNumber: GetRecordVersionNumber::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IATSC_MGT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IATSC_MGT {}
windows_core::imp::define_interface!(IATSC_STT, IATSC_STT_Vtbl, 0x6bf42423_217d_4d6f_81e1_3a7b360ec896);
windows_core::imp::interface_hierarchy!(IATSC_STT, windows_core::IUnknown);
impl IATSC_STT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetProtocolVersion(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetProtocolVersion)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSystemTime(&self) -> windows_core::Result<MPEG_DATE_AND_TIME> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSystemTime)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetGpsUtcOffset(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetGpsUtcOffset)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDaylightSavings(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDaylightSavings)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IATSC_STT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetProtocolVersion: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSystemTime: unsafe extern "system" fn(*mut core::ffi::c_void, *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT,
    pub GetGpsUtcOffset: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetDaylightSavings: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IATSC_STT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetProtocolVersion(&self) -> windows_core::Result<u8>;
    fn GetSystemTime(&self) -> windows_core::Result<MPEG_DATE_AND_TIME>;
    fn GetGpsUtcOffset(&self) -> windows_core::Result<u8>;
    fn GetDaylightSavings(&self) -> windows_core::Result<u16>;
    fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
}
impl IATSC_STT_Vtbl {
    pub const fn new<Identity: IATSC_STT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IATSC_STT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_STT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetProtocolVersion<Identity: IATSC_STT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_STT_Impl::GetProtocolVersion(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSystemTime<Identity: IATSC_STT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pmdtsystemtime: *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_STT_Impl::GetSystemTime(this) {
                    Ok(ok__) => {
                        pmdtsystemtime.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetGpsUtcOffset<Identity: IATSC_STT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_STT_Impl::GetGpsUtcOffset(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDaylightSavings<Identity: IATSC_STT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_STT_Impl::GetDaylightSavings(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: IATSC_STT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_STT_Impl::GetCountOfTableDescriptors(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: IATSC_STT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_STT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: IATSC_STT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_STT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetProtocolVersion: GetProtocolVersion::<Identity, OFFSET>,
            GetSystemTime: GetSystemTime::<Identity, OFFSET>,
            GetGpsUtcOffset: GetGpsUtcOffset::<Identity, OFFSET>,
            GetDaylightSavings: GetDaylightSavings::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IATSC_STT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IATSC_STT {}
windows_core::imp::define_interface!(IATSC_VCT, IATSC_VCT_Vtbl, 0x26879a18_32f9_46c6_91f0_fb6479270e8c);
windows_core::imp::interface_hierarchy!(IATSC_VCT, windows_core::IUnknown);
impl IATSC_VCT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTransportStreamId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTransportStreamId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetProtocolVersion(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetProtocolVersion)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordName(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::PWSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordName)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordMajorChannelNumber(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordMajorChannelNumber)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordMinorChannelNumber(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordMinorChannelNumber)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordModulationMode(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordModulationMode)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCarrierFrequency(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCarrierFrequency)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordTransportStreamId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordTransportStreamId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordProgramNumber(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordProgramNumber)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordEtmLocation(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordEtmLocation)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordIsAccessControlledBitSet(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordIsAccessControlledBitSet)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordIsHiddenBitSet(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordIsHiddenBitSet)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordIsPathSelectBitSet(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordIsPathSelectBitSet)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordIsOutOfBandBitSet(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordIsOutOfBandBitSet)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordIsHideGuideBitSet(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordIsHideGuideBitSet)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordServiceType(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordServiceType)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordSourceId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordSourceId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self, pdwval: *const u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), pdwval).ok() }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IATSC_VCT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTransportStreamId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetProtocolVersion: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordName: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut windows_core::PWSTR) -> windows_core::HRESULT,
    pub GetRecordMajorChannelNumber: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordMinorChannelNumber: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordModulationMode: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCarrierFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordTransportStreamId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordProgramNumber: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordEtmLocation: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordIsAccessControlledBitSet: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetRecordIsHiddenBitSet: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetRecordIsPathSelectBitSet: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetRecordIsOutOfBandBitSet: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetRecordIsHideGuideBitSet: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetRecordServiceType: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordSourceId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *const u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IATSC_VCT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetTransportStreamId(&self) -> windows_core::Result<u16>;
    fn GetProtocolVersion(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordName(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::PWSTR>;
    fn GetRecordMajorChannelNumber(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordMinorChannelNumber(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordModulationMode(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordCarrierFrequency(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordTransportStreamId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordProgramNumber(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordEtmLocation(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordIsAccessControlledBitSet(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL>;
    fn GetRecordIsHiddenBitSet(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL>;
    fn GetRecordIsPathSelectBitSet(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL>;
    fn GetRecordIsOutOfBandBitSet(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL>;
    fn GetRecordIsHideGuideBitSet(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL>;
    fn GetRecordServiceType(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordSourceId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetCountOfTableDescriptors(&self, pdwval: *const u32) -> windows_core::Result<()>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
}
impl IATSC_VCT_Vtbl {
    pub const fn new<Identity: IATSC_VCT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_VCT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTransportStreamId<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetTransportStreamId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetProtocolVersion<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetProtocolVersion(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordName<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwsname: *mut windows_core::PWSTR) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordName(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwsname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordMajorChannelNumber<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordMajorChannelNumber(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordMinorChannelNumber<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordMinorChannelNumber(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordModulationMode<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordModulationMode(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCarrierFrequency<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordCarrierFrequency(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordTransportStreamId<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordTransportStreamId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordProgramNumber<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordProgramNumber(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordEtmLocation<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordEtmLocation(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordIsAccessControlledBitSet<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordIsAccessControlledBitSet(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordIsHiddenBitSet<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordIsHiddenBitSet(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordIsPathSelectBitSet<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordIsPathSelectBitSet(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordIsOutOfBandBitSet<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordIsOutOfBandBitSet(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordIsHideGuideBitSet<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordIsHideGuideBitSet(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordServiceType<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordServiceType(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordSourceId<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordSourceId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_VCT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *const u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_VCT_Impl::GetCountOfTableDescriptors(this, core::mem::transmute_copy(&pdwval)).into()
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IATSC_VCT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: IATSC_VCT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IATSC_VCT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetTransportStreamId: GetTransportStreamId::<Identity, OFFSET>,
            GetProtocolVersion: GetProtocolVersion::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordName: GetRecordName::<Identity, OFFSET>,
            GetRecordMajorChannelNumber: GetRecordMajorChannelNumber::<Identity, OFFSET>,
            GetRecordMinorChannelNumber: GetRecordMinorChannelNumber::<Identity, OFFSET>,
            GetRecordModulationMode: GetRecordModulationMode::<Identity, OFFSET>,
            GetRecordCarrierFrequency: GetRecordCarrierFrequency::<Identity, OFFSET>,
            GetRecordTransportStreamId: GetRecordTransportStreamId::<Identity, OFFSET>,
            GetRecordProgramNumber: GetRecordProgramNumber::<Identity, OFFSET>,
            GetRecordEtmLocation: GetRecordEtmLocation::<Identity, OFFSET>,
            GetRecordIsAccessControlledBitSet: GetRecordIsAccessControlledBitSet::<Identity, OFFSET>,
            GetRecordIsHiddenBitSet: GetRecordIsHiddenBitSet::<Identity, OFFSET>,
            GetRecordIsPathSelectBitSet: GetRecordIsPathSelectBitSet::<Identity, OFFSET>,
            GetRecordIsOutOfBandBitSet: GetRecordIsOutOfBandBitSet::<Identity, OFFSET>,
            GetRecordIsHideGuideBitSet: GetRecordIsHideGuideBitSet::<Identity, OFFSET>,
            GetRecordServiceType: GetRecordServiceType::<Identity, OFFSET>,
            GetRecordSourceId: GetRecordSourceId::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IATSC_VCT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IATSC_VCT {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IAnalogAudioComponentType, IAnalogAudioComponentType_Vtbl, 0x2cfeb2a8_1787_4a24_a941_c6eaec39c842);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IAnalogAudioComponentType {
    type Target = IComponentType;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IAnalogAudioComponentType, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IComponentType);
#[cfg(feature = "Win32_System_Com")]
impl IAnalogAudioComponentType {
    pub unsafe fn AnalogAudioMode(&self) -> windows_core::Result<super::TVAudioMode> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AnalogAudioMode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetAnalogAudioMode(&self, mode: super::TVAudioMode) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetAnalogAudioMode)(windows_core::Interface::as_raw(self), mode).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IAnalogAudioComponentType_Vtbl {
    pub base__: IComponentType_Vtbl,
    pub AnalogAudioMode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::TVAudioMode) -> windows_core::HRESULT,
    pub SetAnalogAudioMode: unsafe extern "system" fn(*mut core::ffi::c_void, super::TVAudioMode) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IAnalogAudioComponentType_Impl: IComponentType_Impl {
    fn AnalogAudioMode(&self) -> windows_core::Result<super::TVAudioMode>;
    fn SetAnalogAudioMode(&self, mode: super::TVAudioMode) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IAnalogAudioComponentType_Vtbl {
    pub const fn new<Identity: IAnalogAudioComponentType_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn AnalogAudioMode<Identity: IAnalogAudioComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mode: *mut super::TVAudioMode) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAnalogAudioComponentType_Impl::AnalogAudioMode(this) {
                    Ok(ok__) => {
                        mode.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetAnalogAudioMode<Identity: IAnalogAudioComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mode: super::TVAudioMode) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAnalogAudioComponentType_Impl::SetAnalogAudioMode(this, core::mem::transmute_copy(&mode)).into()
            }
        }
        Self {
            base__: IComponentType_Vtbl::new::<Identity, OFFSET>(),
            AnalogAudioMode: AnalogAudioMode::<Identity, OFFSET>,
            SetAnalogAudioMode: SetAnalogAudioMode::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IAnalogAudioComponentType as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IComponentType as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IAnalogAudioComponentType {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IAnalogLocator, IAnalogLocator_Vtbl, 0x34d1f26b_e339_430d_abce_738cb48984dc);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IAnalogLocator {
    type Target = ILocator;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IAnalogLocator, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ILocator);
#[cfg(feature = "Win32_System_Com")]
impl IAnalogLocator {
    pub unsafe fn VideoStandard(&self) -> windows_core::Result<super::AnalogVideoStandard> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).VideoStandard)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetVideoStandard(&self, avs: super::AnalogVideoStandard) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetVideoStandard)(windows_core::Interface::as_raw(self), avs).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IAnalogLocator_Vtbl {
    pub base__: ILocator_Vtbl,
    pub VideoStandard: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::AnalogVideoStandard) -> windows_core::HRESULT,
    pub SetVideoStandard: unsafe extern "system" fn(*mut core::ffi::c_void, super::AnalogVideoStandard) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IAnalogLocator_Impl: ILocator_Impl {
    fn VideoStandard(&self) -> windows_core::Result<super::AnalogVideoStandard>;
    fn SetVideoStandard(&self, avs: super::AnalogVideoStandard) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IAnalogLocator_Vtbl {
    pub const fn new<Identity: IAnalogLocator_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn VideoStandard<Identity: IAnalogLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, avs: *mut super::AnalogVideoStandard) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAnalogLocator_Impl::VideoStandard(this) {
                    Ok(ok__) => {
                        avs.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetVideoStandard<Identity: IAnalogLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, avs: super::AnalogVideoStandard) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAnalogLocator_Impl::SetVideoStandard(this, core::mem::transmute_copy(&avs)).into()
            }
        }
        Self {
            base__: ILocator_Vtbl::new::<Identity, OFFSET>(),
            VideoStandard: VideoStandard::<Identity, OFFSET>,
            SetVideoStandard: SetVideoStandard::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IAnalogLocator as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ILocator as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IAnalogLocator {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IAnalogRadioTuningSpace, IAnalogRadioTuningSpace_Vtbl, 0x2a6e293b_2595_11d3_b64c_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IAnalogRadioTuningSpace {
    type Target = ITuningSpace;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IAnalogRadioTuningSpace, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuningSpace);
#[cfg(feature = "Win32_System_Com")]
impl IAnalogRadioTuningSpace {
    pub unsafe fn MinFrequency(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MinFrequency)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMinFrequency(&self, newminfrequencyval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMinFrequency)(windows_core::Interface::as_raw(self), newminfrequencyval).ok() }
    }
    pub unsafe fn MaxFrequency(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MaxFrequency)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMaxFrequency(&self, newmaxfrequencyval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMaxFrequency)(windows_core::Interface::as_raw(self), newmaxfrequencyval).ok() }
    }
    pub unsafe fn Step(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Step)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetStep(&self, newstepval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetStep)(windows_core::Interface::as_raw(self), newstepval).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IAnalogRadioTuningSpace_Vtbl {
    pub base__: ITuningSpace_Vtbl,
    pub MinFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMinFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub MaxFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMaxFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub Step: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetStep: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IAnalogRadioTuningSpace_Impl: ITuningSpace_Impl {
    fn MinFrequency(&self) -> windows_core::Result<i32>;
    fn SetMinFrequency(&self, newminfrequencyval: i32) -> windows_core::Result<()>;
    fn MaxFrequency(&self) -> windows_core::Result<i32>;
    fn SetMaxFrequency(&self, newmaxfrequencyval: i32) -> windows_core::Result<()>;
    fn Step(&self) -> windows_core::Result<i32>;
    fn SetStep(&self, newstepval: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IAnalogRadioTuningSpace_Vtbl {
    pub const fn new<Identity: IAnalogRadioTuningSpace_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn MinFrequency<Identity: IAnalogRadioTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, minfrequencyval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAnalogRadioTuningSpace_Impl::MinFrequency(this) {
                    Ok(ok__) => {
                        minfrequencyval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMinFrequency<Identity: IAnalogRadioTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newminfrequencyval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAnalogRadioTuningSpace_Impl::SetMinFrequency(this, core::mem::transmute_copy(&newminfrequencyval)).into()
            }
        }
        unsafe extern "system" fn MaxFrequency<Identity: IAnalogRadioTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, maxfrequencyval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAnalogRadioTuningSpace_Impl::MaxFrequency(this) {
                    Ok(ok__) => {
                        maxfrequencyval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMaxFrequency<Identity: IAnalogRadioTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newmaxfrequencyval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAnalogRadioTuningSpace_Impl::SetMaxFrequency(this, core::mem::transmute_copy(&newmaxfrequencyval)).into()
            }
        }
        unsafe extern "system" fn Step<Identity: IAnalogRadioTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, stepval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAnalogRadioTuningSpace_Impl::Step(this) {
                    Ok(ok__) => {
                        stepval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetStep<Identity: IAnalogRadioTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newstepval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAnalogRadioTuningSpace_Impl::SetStep(this, core::mem::transmute_copy(&newstepval)).into()
            }
        }
        Self {
            base__: ITuningSpace_Vtbl::new::<Identity, OFFSET>(),
            MinFrequency: MinFrequency::<Identity, OFFSET>,
            SetMinFrequency: SetMinFrequency::<Identity, OFFSET>,
            MaxFrequency: MaxFrequency::<Identity, OFFSET>,
            SetMaxFrequency: SetMaxFrequency::<Identity, OFFSET>,
            Step: Step::<Identity, OFFSET>,
            SetStep: SetStep::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IAnalogRadioTuningSpace as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuningSpace as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IAnalogRadioTuningSpace {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IAnalogRadioTuningSpace2, IAnalogRadioTuningSpace2_Vtbl, 0x39dd45da_2da8_46ba_8a8a_87e2b73d983a);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IAnalogRadioTuningSpace2 {
    type Target = IAnalogRadioTuningSpace;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IAnalogRadioTuningSpace2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuningSpace, IAnalogRadioTuningSpace);
#[cfg(feature = "Win32_System_Com")]
impl IAnalogRadioTuningSpace2 {
    pub unsafe fn CountryCode(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CountryCode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetCountryCode(&self, newcountrycodeval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCountryCode)(windows_core::Interface::as_raw(self), newcountrycodeval).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IAnalogRadioTuningSpace2_Vtbl {
    pub base__: IAnalogRadioTuningSpace_Vtbl,
    pub CountryCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetCountryCode: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IAnalogRadioTuningSpace2_Impl: IAnalogRadioTuningSpace_Impl {
    fn CountryCode(&self) -> windows_core::Result<i32>;
    fn SetCountryCode(&self, newcountrycodeval: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IAnalogRadioTuningSpace2_Vtbl {
    pub const fn new<Identity: IAnalogRadioTuningSpace2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn CountryCode<Identity: IAnalogRadioTuningSpace2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, countrycodeval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAnalogRadioTuningSpace2_Impl::CountryCode(this) {
                    Ok(ok__) => {
                        countrycodeval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCountryCode<Identity: IAnalogRadioTuningSpace2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newcountrycodeval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAnalogRadioTuningSpace2_Impl::SetCountryCode(this, core::mem::transmute_copy(&newcountrycodeval)).into()
            }
        }
        Self {
            base__: IAnalogRadioTuningSpace_Vtbl::new::<Identity, OFFSET>(),
            CountryCode: CountryCode::<Identity, OFFSET>,
            SetCountryCode: SetCountryCode::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IAnalogRadioTuningSpace2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuningSpace as windows_core::Interface>::IID || iid == &<IAnalogRadioTuningSpace as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IAnalogRadioTuningSpace2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IAnalogTVTuningSpace, IAnalogTVTuningSpace_Vtbl, 0x2a6e293c_2595_11d3_b64c_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IAnalogTVTuningSpace {
    type Target = ITuningSpace;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IAnalogTVTuningSpace, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuningSpace);
#[cfg(feature = "Win32_System_Com")]
impl IAnalogTVTuningSpace {
    pub unsafe fn MinChannel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MinChannel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMinChannel(&self, newminchannelval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMinChannel)(windows_core::Interface::as_raw(self), newminchannelval).ok() }
    }
    pub unsafe fn MaxChannel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MaxChannel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMaxChannel(&self, newmaxchannelval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMaxChannel)(windows_core::Interface::as_raw(self), newmaxchannelval).ok() }
    }
    pub unsafe fn InputType(&self) -> windows_core::Result<super::TunerInputType> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).InputType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetInputType(&self, newinputtypeval: super::TunerInputType) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetInputType)(windows_core::Interface::as_raw(self), newinputtypeval).ok() }
    }
    pub unsafe fn CountryCode(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CountryCode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetCountryCode(&self, newcountrycodeval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCountryCode)(windows_core::Interface::as_raw(self), newcountrycodeval).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IAnalogTVTuningSpace_Vtbl {
    pub base__: ITuningSpace_Vtbl,
    pub MinChannel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMinChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub MaxChannel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMaxChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub InputType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::TunerInputType) -> windows_core::HRESULT,
    pub SetInputType: unsafe extern "system" fn(*mut core::ffi::c_void, super::TunerInputType) -> windows_core::HRESULT,
    pub CountryCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetCountryCode: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IAnalogTVTuningSpace_Impl: ITuningSpace_Impl {
    fn MinChannel(&self) -> windows_core::Result<i32>;
    fn SetMinChannel(&self, newminchannelval: i32) -> windows_core::Result<()>;
    fn MaxChannel(&self) -> windows_core::Result<i32>;
    fn SetMaxChannel(&self, newmaxchannelval: i32) -> windows_core::Result<()>;
    fn InputType(&self) -> windows_core::Result<super::TunerInputType>;
    fn SetInputType(&self, newinputtypeval: super::TunerInputType) -> windows_core::Result<()>;
    fn CountryCode(&self) -> windows_core::Result<i32>;
    fn SetCountryCode(&self, newcountrycodeval: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IAnalogTVTuningSpace_Vtbl {
    pub const fn new<Identity: IAnalogTVTuningSpace_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn MinChannel<Identity: IAnalogTVTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, minchannelval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAnalogTVTuningSpace_Impl::MinChannel(this) {
                    Ok(ok__) => {
                        minchannelval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMinChannel<Identity: IAnalogTVTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newminchannelval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAnalogTVTuningSpace_Impl::SetMinChannel(this, core::mem::transmute_copy(&newminchannelval)).into()
            }
        }
        unsafe extern "system" fn MaxChannel<Identity: IAnalogTVTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, maxchannelval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAnalogTVTuningSpace_Impl::MaxChannel(this) {
                    Ok(ok__) => {
                        maxchannelval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMaxChannel<Identity: IAnalogTVTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newmaxchannelval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAnalogTVTuningSpace_Impl::SetMaxChannel(this, core::mem::transmute_copy(&newmaxchannelval)).into()
            }
        }
        unsafe extern "system" fn InputType<Identity: IAnalogTVTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, inputtypeval: *mut super::TunerInputType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAnalogTVTuningSpace_Impl::InputType(this) {
                    Ok(ok__) => {
                        inputtypeval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetInputType<Identity: IAnalogTVTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newinputtypeval: super::TunerInputType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAnalogTVTuningSpace_Impl::SetInputType(this, core::mem::transmute_copy(&newinputtypeval)).into()
            }
        }
        unsafe extern "system" fn CountryCode<Identity: IAnalogTVTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, countrycodeval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAnalogTVTuningSpace_Impl::CountryCode(this) {
                    Ok(ok__) => {
                        countrycodeval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCountryCode<Identity: IAnalogTVTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newcountrycodeval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAnalogTVTuningSpace_Impl::SetCountryCode(this, core::mem::transmute_copy(&newcountrycodeval)).into()
            }
        }
        Self {
            base__: ITuningSpace_Vtbl::new::<Identity, OFFSET>(),
            MinChannel: MinChannel::<Identity, OFFSET>,
            SetMinChannel: SetMinChannel::<Identity, OFFSET>,
            MaxChannel: MaxChannel::<Identity, OFFSET>,
            SetMaxChannel: SetMaxChannel::<Identity, OFFSET>,
            InputType: InputType::<Identity, OFFSET>,
            SetInputType: SetInputType::<Identity, OFFSET>,
            CountryCode: CountryCode::<Identity, OFFSET>,
            SetCountryCode: SetCountryCode::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IAnalogTVTuningSpace as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuningSpace as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IAnalogTVTuningSpace {}
windows_core::imp::define_interface!(IAtscContentAdvisoryDescriptor, IAtscContentAdvisoryDescriptor_Vtbl, 0xff76e60c_0283_43ea_ba32_b422238547ee);
windows_core::imp::interface_hierarchy!(IAtscContentAdvisoryDescriptor, windows_core::IUnknown);
impl IAtscContentAdvisoryDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRatingRegionCount(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRatingRegionCount)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordRatingRegion(&self, bindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordRatingRegion)(windows_core::Interface::as_raw(self), bindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordRatedDimensions(&self, bindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordRatedDimensions)(windows_core::Interface::as_raw(self), bindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordRatingDimension(&self, bindexouter: u8, bindexinner: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordRatingDimension)(windows_core::Interface::as_raw(self), bindexouter, bindexinner, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordRatingValue(&self, bindexouter: u8, bindexinner: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordRatingValue)(windows_core::Interface::as_raw(self), bindexouter, bindexinner, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordRatingDescriptionText(&self, bindex: u8, pblength: *mut u8, pptext: *mut *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordRatingDescriptionText)(windows_core::Interface::as_raw(self), bindex, pblength as _, pptext as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IAtscContentAdvisoryDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRatingRegionCount: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordRatingRegion: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordRatedDimensions: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordRatingDimension: unsafe extern "system" fn(*mut core::ffi::c_void, u8, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordRatingValue: unsafe extern "system" fn(*mut core::ffi::c_void, u8, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordRatingDescriptionText: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8, *mut *mut u8) -> windows_core::HRESULT,
}
pub trait IAtscContentAdvisoryDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetRatingRegionCount(&self) -> windows_core::Result<u8>;
    fn GetRecordRatingRegion(&self, bindex: u8) -> windows_core::Result<u8>;
    fn GetRecordRatedDimensions(&self, bindex: u8) -> windows_core::Result<u8>;
    fn GetRecordRatingDimension(&self, bindexouter: u8, bindexinner: u8) -> windows_core::Result<u8>;
    fn GetRecordRatingValue(&self, bindexouter: u8, bindexinner: u8) -> windows_core::Result<u8>;
    fn GetRecordRatingDescriptionText(&self, bindex: u8, pblength: *mut u8, pptext: *mut *mut u8) -> windows_core::Result<()>;
}
impl IAtscContentAdvisoryDescriptor_Vtbl {
    pub const fn new<Identity: IAtscContentAdvisoryDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IAtscContentAdvisoryDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscContentAdvisoryDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IAtscContentAdvisoryDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscContentAdvisoryDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRatingRegionCount<Identity: IAtscContentAdvisoryDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscContentAdvisoryDescriptor_Impl::GetRatingRegionCount(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordRatingRegion<Identity: IAtscContentAdvisoryDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscContentAdvisoryDescriptor_Impl::GetRecordRatingRegion(this, core::mem::transmute_copy(&bindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordRatedDimensions<Identity: IAtscContentAdvisoryDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscContentAdvisoryDescriptor_Impl::GetRecordRatedDimensions(this, core::mem::transmute_copy(&bindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordRatingDimension<Identity: IAtscContentAdvisoryDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindexouter: u8, bindexinner: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscContentAdvisoryDescriptor_Impl::GetRecordRatingDimension(this, core::mem::transmute_copy(&bindexouter), core::mem::transmute_copy(&bindexinner)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordRatingValue<Identity: IAtscContentAdvisoryDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindexouter: u8, bindexinner: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscContentAdvisoryDescriptor_Impl::GetRecordRatingValue(this, core::mem::transmute_copy(&bindexouter), core::mem::transmute_copy(&bindexinner)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordRatingDescriptionText<Identity: IAtscContentAdvisoryDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, pblength: *mut u8, pptext: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAtscContentAdvisoryDescriptor_Impl::GetRecordRatingDescriptionText(this, core::mem::transmute_copy(&bindex), core::mem::transmute_copy(&pblength), core::mem::transmute_copy(&pptext)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetRatingRegionCount: GetRatingRegionCount::<Identity, OFFSET>,
            GetRecordRatingRegion: GetRecordRatingRegion::<Identity, OFFSET>,
            GetRecordRatedDimensions: GetRecordRatedDimensions::<Identity, OFFSET>,
            GetRecordRatingDimension: GetRecordRatingDimension::<Identity, OFFSET>,
            GetRecordRatingValue: GetRecordRatingValue::<Identity, OFFSET>,
            GetRecordRatingDescriptionText: GetRecordRatingDescriptionText::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IAtscContentAdvisoryDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IAtscContentAdvisoryDescriptor {}
windows_core::imp::define_interface!(IAtscPsipParser, IAtscPsipParser_Vtbl, 0xb2c98995_5eb2_4fb1_b406_f3e8e2026a9a);
windows_core::imp::interface_hierarchy!(IAtscPsipParser, windows_core::IUnknown);
impl IAtscPsipParser {
    pub unsafe fn Initialize<P0>(&self, punkmpeg2data: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::IUnknown>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), punkmpeg2data.param().abi()).ok() }
    }
    pub unsafe fn GetPAT(&self) -> windows_core::Result<IPAT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPAT)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetCAT(&self, dwtimeout: u32) -> windows_core::Result<ICAT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCAT)(windows_core::Interface::as_raw(self), dwtimeout, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetPMT(&self, pid: u16, pwprogramnumber: *const u16) -> windows_core::Result<IPMT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPMT)(windows_core::Interface::as_raw(self), pid, pwprogramnumber, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTSDT(&self) -> windows_core::Result<ITSDT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTSDT)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetMGT(&self) -> windows_core::Result<IATSC_MGT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetMGT)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetVCT(&self, tableid: u8, fgetnexttable: bool) -> windows_core::Result<IATSC_VCT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVCT)(windows_core::Interface::as_raw(self), tableid, fgetnexttable.into(), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetEIT(&self, pid: u16, pwsourceid: *const u16, dwtimeout: u32) -> windows_core::Result<IATSC_EIT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEIT)(windows_core::Interface::as_raw(self), pid, pwsourceid, dwtimeout, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetETT(&self, pid: u16, wsourceid: *const u16, pweventid: *const u16) -> windows_core::Result<IATSC_ETT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetETT)(windows_core::Interface::as_raw(self), pid, wsourceid, pweventid, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetSTT(&self) -> windows_core::Result<IATSC_STT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSTT)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetEAS(&self, pid: u16) -> windows_core::Result<ISCTE_EAS> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEAS)(windows_core::Interface::as_raw(self), pid, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IAtscPsipParser_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetPAT: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCAT: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetPMT: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTSDT: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetMGT: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVCT: unsafe extern "system" fn(*mut core::ffi::c_void, u8, windows_core::BOOL, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetEIT: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *const u16, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetETT: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *const u16, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetSTT: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetEAS: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IAtscPsipParser_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, punkmpeg2data: windows_core::Ref<'_, windows_core::IUnknown>) -> windows_core::Result<()>;
    fn GetPAT(&self) -> windows_core::Result<IPAT>;
    fn GetCAT(&self, dwtimeout: u32) -> windows_core::Result<ICAT>;
    fn GetPMT(&self, pid: u16, pwprogramnumber: *const u16) -> windows_core::Result<IPMT>;
    fn GetTSDT(&self) -> windows_core::Result<ITSDT>;
    fn GetMGT(&self) -> windows_core::Result<IATSC_MGT>;
    fn GetVCT(&self, tableid: u8, fgetnexttable: windows_core::BOOL) -> windows_core::Result<IATSC_VCT>;
    fn GetEIT(&self, pid: u16, pwsourceid: *const u16, dwtimeout: u32) -> windows_core::Result<IATSC_EIT>;
    fn GetETT(&self, pid: u16, wsourceid: *const u16, pweventid: *const u16) -> windows_core::Result<IATSC_ETT>;
    fn GetSTT(&self) -> windows_core::Result<IATSC_STT>;
    fn GetEAS(&self, pid: u16) -> windows_core::Result<ISCTE_EAS>;
}
impl IAtscPsipParser_Vtbl {
    pub const fn new<Identity: IAtscPsipParser_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IAtscPsipParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, punkmpeg2data: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAtscPsipParser_Impl::Initialize(this, core::mem::transmute_copy(&punkmpeg2data)).into()
            }
        }
        unsafe extern "system" fn GetPAT<Identity: IAtscPsipParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pppat: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscPsipParser_Impl::GetPAT(this) {
                    Ok(ok__) => {
                        pppat.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCAT<Identity: IAtscPsipParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwtimeout: u32, ppcat: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscPsipParser_Impl::GetCAT(this, core::mem::transmute_copy(&dwtimeout)) {
                    Ok(ok__) => {
                        ppcat.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPMT<Identity: IAtscPsipParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: u16, pwprogramnumber: *const u16, pppmt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscPsipParser_Impl::GetPMT(this, core::mem::transmute_copy(&pid), core::mem::transmute_copy(&pwprogramnumber)) {
                    Ok(ok__) => {
                        pppmt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTSDT<Identity: IAtscPsipParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pptsdt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscPsipParser_Impl::GetTSDT(this) {
                    Ok(ok__) => {
                        pptsdt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetMGT<Identity: IAtscPsipParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppmgt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscPsipParser_Impl::GetMGT(this) {
                    Ok(ok__) => {
                        ppmgt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetVCT<Identity: IAtscPsipParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tableid: u8, fgetnexttable: windows_core::BOOL, ppvct: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscPsipParser_Impl::GetVCT(this, core::mem::transmute_copy(&tableid), core::mem::transmute_copy(&fgetnexttable)) {
                    Ok(ok__) => {
                        ppvct.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEIT<Identity: IAtscPsipParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: u16, pwsourceid: *const u16, dwtimeout: u32, ppeit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscPsipParser_Impl::GetEIT(this, core::mem::transmute_copy(&pid), core::mem::transmute_copy(&pwsourceid), core::mem::transmute_copy(&dwtimeout)) {
                    Ok(ok__) => {
                        ppeit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetETT<Identity: IAtscPsipParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: u16, wsourceid: *const u16, pweventid: *const u16, ppett: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscPsipParser_Impl::GetETT(this, core::mem::transmute_copy(&pid), core::mem::transmute_copy(&wsourceid), core::mem::transmute_copy(&pweventid)) {
                    Ok(ok__) => {
                        ppett.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSTT<Identity: IAtscPsipParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppstt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscPsipParser_Impl::GetSTT(this) {
                    Ok(ok__) => {
                        ppstt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEAS<Identity: IAtscPsipParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: u16, ppeas: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAtscPsipParser_Impl::GetEAS(this, core::mem::transmute_copy(&pid)) {
                    Ok(ok__) => {
                        ppeas.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetPAT: GetPAT::<Identity, OFFSET>,
            GetCAT: GetCAT::<Identity, OFFSET>,
            GetPMT: GetPMT::<Identity, OFFSET>,
            GetTSDT: GetTSDT::<Identity, OFFSET>,
            GetMGT: GetMGT::<Identity, OFFSET>,
            GetVCT: GetVCT::<Identity, OFFSET>,
            GetEIT: GetEIT::<Identity, OFFSET>,
            GetETT: GetETT::<Identity, OFFSET>,
            GetSTT: GetSTT::<Identity, OFFSET>,
            GetEAS: GetEAS::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IAtscPsipParser as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IAtscPsipParser {}
windows_core::imp::define_interface!(IAttributeGet, IAttributeGet_Vtbl, 0x52dbd1ec_e48f_4528_9232_f442a68f0ae1);
windows_core::imp::interface_hierarchy!(IAttributeGet, windows_core::IUnknown);
impl IAttributeGet {
    pub unsafe fn GetCount(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCount)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetAttribIndexed(&self, lindex: i32, pguidattribute: *mut windows_core::GUID, pbattribute: *mut u8, pdwattributelength: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetAttribIndexed)(windows_core::Interface::as_raw(self), lindex, pguidattribute as _, pbattribute as _, pdwattributelength as _).ok() }
    }
    pub unsafe fn GetAttrib(&self, guidattribute: windows_core::GUID, pbattribute: *mut u8, pdwattributelength: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetAttrib)(windows_core::Interface::as_raw(self), core::mem::transmute(guidattribute), pbattribute as _, pdwattributelength as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IAttributeGet_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetCount: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub GetAttribIndexed: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut windows_core::GUID, *mut u8, *mut u32) -> windows_core::HRESULT,
    pub GetAttrib: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::GUID, *mut u8, *mut u32) -> windows_core::HRESULT,
}
pub trait IAttributeGet_Impl: windows_core::IUnknownImpl {
    fn GetCount(&self) -> windows_core::Result<i32>;
    fn GetAttribIndexed(&self, lindex: i32, pguidattribute: *mut windows_core::GUID, pbattribute: *mut u8, pdwattributelength: *mut u32) -> windows_core::Result<()>;
    fn GetAttrib(&self, guidattribute: &windows_core::GUID, pbattribute: *mut u8, pdwattributelength: *mut u32) -> windows_core::Result<()>;
}
impl IAttributeGet_Vtbl {
    pub const fn new<Identity: IAttributeGet_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetCount<Identity: IAttributeGet_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, plcount: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAttributeGet_Impl::GetCount(this) {
                    Ok(ok__) => {
                        plcount.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetAttribIndexed<Identity: IAttributeGet_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lindex: i32, pguidattribute: *mut windows_core::GUID, pbattribute: *mut u8, pdwattributelength: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAttributeGet_Impl::GetAttribIndexed(this, core::mem::transmute_copy(&lindex), core::mem::transmute_copy(&pguidattribute), core::mem::transmute_copy(&pbattribute), core::mem::transmute_copy(&pdwattributelength)).into()
            }
        }
        unsafe extern "system" fn GetAttrib<Identity: IAttributeGet_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guidattribute: windows_core::GUID, pbattribute: *mut u8, pdwattributelength: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAttributeGet_Impl::GetAttrib(this, core::mem::transmute(&guidattribute), core::mem::transmute_copy(&pbattribute), core::mem::transmute_copy(&pdwattributelength)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetCount: GetCount::<Identity, OFFSET>,
            GetAttribIndexed: GetAttribIndexed::<Identity, OFFSET>,
            GetAttrib: GetAttrib::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IAttributeGet as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IAttributeGet {}
windows_core::imp::define_interface!(IAttributeSet, IAttributeSet_Vtbl, 0x583ec3cc_4960_4857_982b_41a33ea0a006);
windows_core::imp::interface_hierarchy!(IAttributeSet, windows_core::IUnknown);
impl IAttributeSet {
    pub unsafe fn SetAttrib(&self, guidattribute: windows_core::GUID, pbattribute: *const u8, dwattributelength: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetAttrib)(windows_core::Interface::as_raw(self), core::mem::transmute(guidattribute), pbattribute, dwattributelength).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IAttributeSet_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub SetAttrib: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::GUID, *const u8, u32) -> windows_core::HRESULT,
}
pub trait IAttributeSet_Impl: windows_core::IUnknownImpl {
    fn SetAttrib(&self, guidattribute: &windows_core::GUID, pbattribute: *const u8, dwattributelength: u32) -> windows_core::Result<()>;
}
impl IAttributeSet_Vtbl {
    pub const fn new<Identity: IAttributeSet_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetAttrib<Identity: IAttributeSet_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guidattribute: windows_core::GUID, pbattribute: *const u8, dwattributelength: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAttributeSet_Impl::SetAttrib(this, core::mem::transmute(&guidattribute), core::mem::transmute_copy(&pbattribute), core::mem::transmute_copy(&dwattributelength)).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), SetAttrib: SetAttrib::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IAttributeSet as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IAttributeSet {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IAuxInTuningSpace, IAuxInTuningSpace_Vtbl, 0xe48244b8_7e17_4f76_a763_5090ff1e2f30);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IAuxInTuningSpace {
    type Target = ITuningSpace;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IAuxInTuningSpace, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuningSpace);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IAuxInTuningSpace_Vtbl {
    pub base__: ITuningSpace_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IAuxInTuningSpace_Impl: ITuningSpace_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IAuxInTuningSpace_Vtbl {
    pub const fn new<Identity: IAuxInTuningSpace_Impl, const OFFSET: isize>() -> Self {
        Self { base__: ITuningSpace_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IAuxInTuningSpace as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuningSpace as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IAuxInTuningSpace {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IAuxInTuningSpace2, IAuxInTuningSpace2_Vtbl, 0xb10931ed_8bfe_4ab0_9dce_e469c29a9729);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IAuxInTuningSpace2 {
    type Target = IAuxInTuningSpace;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IAuxInTuningSpace2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuningSpace, IAuxInTuningSpace);
#[cfg(feature = "Win32_System_Com")]
impl IAuxInTuningSpace2 {
    pub unsafe fn CountryCode(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CountryCode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetCountryCode(&self, newcountrycodeval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCountryCode)(windows_core::Interface::as_raw(self), newcountrycodeval).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IAuxInTuningSpace2_Vtbl {
    pub base__: IAuxInTuningSpace_Vtbl,
    pub CountryCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetCountryCode: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IAuxInTuningSpace2_Impl: IAuxInTuningSpace_Impl {
    fn CountryCode(&self) -> windows_core::Result<i32>;
    fn SetCountryCode(&self, newcountrycodeval: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IAuxInTuningSpace2_Vtbl {
    pub const fn new<Identity: IAuxInTuningSpace2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn CountryCode<Identity: IAuxInTuningSpace2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, countrycodeval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IAuxInTuningSpace2_Impl::CountryCode(this) {
                    Ok(ok__) => {
                        countrycodeval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCountryCode<Identity: IAuxInTuningSpace2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newcountrycodeval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IAuxInTuningSpace2_Impl::SetCountryCode(this, core::mem::transmute_copy(&newcountrycodeval)).into()
            }
        }
        Self {
            base__: IAuxInTuningSpace_Vtbl::new::<Identity, OFFSET>(),
            CountryCode: CountryCode::<Identity, OFFSET>,
            SetCountryCode: SetCountryCode::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IAuxInTuningSpace2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuningSpace as windows_core::Interface>::IID || iid == &<IAuxInTuningSpace as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IAuxInTuningSpace2 {}
windows_core::imp::define_interface!(IBDAComparable, IBDAComparable_Vtbl, 0xb34505e0_2f0e_497b_80bc_d43f3b24ed7f);
windows_core::imp::interface_hierarchy!(IBDAComparable, windows_core::IUnknown);
impl IBDAComparable {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn CompareExact<P0>(&self, compareto: P0) -> windows_core::Result<i32>
    where
        P0: windows_core::Param<super::super::super::System::Com::IDispatch>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CompareExact)(windows_core::Interface::as_raw(self), compareto.param().abi(), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn CompareEquivalent<P0>(&self, compareto: P0, dwflags: u32) -> windows_core::Result<i32>
    where
        P0: windows_core::Param<super::super::super::System::Com::IDispatch>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CompareEquivalent)(windows_core::Interface::as_raw(self), compareto.param().abi(), dwflags, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn HashExact(&self) -> windows_core::Result<i64> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).HashExact)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn HashExactIncremental(&self, partialresult: i64) -> windows_core::Result<i64> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).HashExactIncremental)(windows_core::Interface::as_raw(self), partialresult, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn HashEquivalent(&self, dwflags: u32) -> windows_core::Result<i64> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).HashEquivalent)(windows_core::Interface::as_raw(self), dwflags, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn HashEquivalentIncremental(&self, partialresult: i64, dwflags: u32) -> windows_core::Result<i64> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).HashEquivalentIncremental)(windows_core::Interface::as_raw(self), partialresult, dwflags, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IBDAComparable_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub CompareExact: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    CompareExact: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub CompareEquivalent: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, u32, *mut i32) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    CompareEquivalent: usize,
    pub HashExact: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i64) -> windows_core::HRESULT,
    pub HashExactIncremental: unsafe extern "system" fn(*mut core::ffi::c_void, i64, *mut i64) -> windows_core::HRESULT,
    pub HashEquivalent: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut i64) -> windows_core::HRESULT,
    pub HashEquivalentIncremental: unsafe extern "system" fn(*mut core::ffi::c_void, i64, u32, *mut i64) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IBDAComparable_Impl: windows_core::IUnknownImpl {
    fn CompareExact(&self, compareto: windows_core::Ref<'_, super::super::super::System::Com::IDispatch>) -> windows_core::Result<i32>;
    fn CompareEquivalent(&self, compareto: windows_core::Ref<'_, super::super::super::System::Com::IDispatch>, dwflags: u32) -> windows_core::Result<i32>;
    fn HashExact(&self) -> windows_core::Result<i64>;
    fn HashExactIncremental(&self, partialresult: i64) -> windows_core::Result<i64>;
    fn HashEquivalent(&self, dwflags: u32) -> windows_core::Result<i64>;
    fn HashEquivalentIncremental(&self, partialresult: i64, dwflags: u32) -> windows_core::Result<i64>;
}
#[cfg(feature = "Win32_System_Com")]
impl IBDAComparable_Vtbl {
    pub const fn new<Identity: IBDAComparable_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn CompareExact<Identity: IBDAComparable_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, compareto: *mut core::ffi::c_void, result: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IBDAComparable_Impl::CompareExact(this, core::mem::transmute_copy(&compareto)) {
                    Ok(ok__) => {
                        result.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CompareEquivalent<Identity: IBDAComparable_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, compareto: *mut core::ffi::c_void, dwflags: u32, result: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IBDAComparable_Impl::CompareEquivalent(this, core::mem::transmute_copy(&compareto), core::mem::transmute_copy(&dwflags)) {
                    Ok(ok__) => {
                        result.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn HashExact<Identity: IBDAComparable_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, result: *mut i64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IBDAComparable_Impl::HashExact(this) {
                    Ok(ok__) => {
                        result.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn HashExactIncremental<Identity: IBDAComparable_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, partialresult: i64, result: *mut i64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IBDAComparable_Impl::HashExactIncremental(this, core::mem::transmute_copy(&partialresult)) {
                    Ok(ok__) => {
                        result.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn HashEquivalent<Identity: IBDAComparable_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwflags: u32, result: *mut i64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IBDAComparable_Impl::HashEquivalent(this, core::mem::transmute_copy(&dwflags)) {
                    Ok(ok__) => {
                        result.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn HashEquivalentIncremental<Identity: IBDAComparable_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, partialresult: i64, dwflags: u32, result: *mut i64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IBDAComparable_Impl::HashEquivalentIncremental(this, core::mem::transmute_copy(&partialresult), core::mem::transmute_copy(&dwflags)) {
                    Ok(ok__) => {
                        result.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            CompareExact: CompareExact::<Identity, OFFSET>,
            CompareEquivalent: CompareEquivalent::<Identity, OFFSET>,
            HashExact: HashExact::<Identity, OFFSET>,
            HashExactIncremental: HashExactIncremental::<Identity, OFFSET>,
            HashEquivalent: HashEquivalent::<Identity, OFFSET>,
            HashEquivalentIncremental: HashEquivalentIncremental::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IBDAComparable as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IBDAComparable {}
windows_core::imp::define_interface!(IBDACreateTuneRequestEx, IBDACreateTuneRequestEx_Vtbl, 0xc0a4a1d4_2b3c_491a_ba22_499fbadd4d12);
windows_core::imp::interface_hierarchy!(IBDACreateTuneRequestEx, windows_core::IUnknown);
impl IBDACreateTuneRequestEx {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn CreateTuneRequestEx(&self, tunerequestiid: *const windows_core::GUID) -> windows_core::Result<ITuneRequest> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CreateTuneRequestEx)(windows_core::Interface::as_raw(self), tunerequestiid, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IBDACreateTuneRequestEx_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub CreateTuneRequestEx: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    CreateTuneRequestEx: usize,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IBDACreateTuneRequestEx_Impl: windows_core::IUnknownImpl {
    fn CreateTuneRequestEx(&self, tunerequestiid: *const windows_core::GUID) -> windows_core::Result<ITuneRequest>;
}
#[cfg(feature = "Win32_System_Com")]
impl IBDACreateTuneRequestEx_Vtbl {
    pub const fn new<Identity: IBDACreateTuneRequestEx_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn CreateTuneRequestEx<Identity: IBDACreateTuneRequestEx_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tunerequestiid: *const windows_core::GUID, tunerequest: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IBDACreateTuneRequestEx_Impl::CreateTuneRequestEx(this, core::mem::transmute_copy(&tunerequestiid)) {
                    Ok(ok__) => {
                        tunerequest.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), CreateTuneRequestEx: CreateTuneRequestEx::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IBDACreateTuneRequestEx as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IBDACreateTuneRequestEx {}
windows_core::imp::define_interface!(IBDA_TIF_REGISTRATION, IBDA_TIF_REGISTRATION_Vtbl, 0xdfef4a68_ee61_415f_9ccb_cd95f2f98a3a);
windows_core::imp::interface_hierarchy!(IBDA_TIF_REGISTRATION, windows_core::IUnknown);
impl IBDA_TIF_REGISTRATION {
    pub unsafe fn RegisterTIFEx<P0>(&self, ptifinputpin: P0, ppvregistrationcontext: *mut u32, ppmpeg2datacontrol: *mut Option<windows_core::IUnknown>) -> windows_core::Result<()>
    where
        P0: windows_core::Param<super::IPin>,
    {
        unsafe { (windows_core::Interface::vtable(self).RegisterTIFEx)(windows_core::Interface::as_raw(self), ptifinputpin.param().abi(), ppvregistrationcontext as _, core::mem::transmute(ppmpeg2datacontrol)).ok() }
    }
    pub unsafe fn UnregisterTIF(&self, pvregistrationcontext: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).UnregisterTIF)(windows_core::Interface::as_raw(self), pvregistrationcontext).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IBDA_TIF_REGISTRATION_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub RegisterTIFEx: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub UnregisterTIF: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
}
pub trait IBDA_TIF_REGISTRATION_Impl: windows_core::IUnknownImpl {
    fn RegisterTIFEx(&self, ptifinputpin: windows_core::Ref<'_, super::IPin>, ppvregistrationcontext: *mut u32, ppmpeg2datacontrol: windows_core::OutRef<'_, windows_core::IUnknown>) -> windows_core::Result<()>;
    fn UnregisterTIF(&self, pvregistrationcontext: u32) -> windows_core::Result<()>;
}
impl IBDA_TIF_REGISTRATION_Vtbl {
    pub const fn new<Identity: IBDA_TIF_REGISTRATION_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn RegisterTIFEx<Identity: IBDA_TIF_REGISTRATION_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ptifinputpin: *mut core::ffi::c_void, ppvregistrationcontext: *mut u32, ppmpeg2datacontrol: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IBDA_TIF_REGISTRATION_Impl::RegisterTIFEx(this, core::mem::transmute_copy(&ptifinputpin), core::mem::transmute_copy(&ppvregistrationcontext), core::mem::transmute_copy(&ppmpeg2datacontrol)).into()
            }
        }
        unsafe extern "system" fn UnregisterTIF<Identity: IBDA_TIF_REGISTRATION_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pvregistrationcontext: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IBDA_TIF_REGISTRATION_Impl::UnregisterTIF(this, core::mem::transmute_copy(&pvregistrationcontext)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            RegisterTIFEx: RegisterTIFEx::<Identity, OFFSET>,
            UnregisterTIF: UnregisterTIF::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IBDA_TIF_REGISTRATION as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IBDA_TIF_REGISTRATION {}
windows_core::imp::define_interface!(ICAT, ICAT_Vtbl, 0x7c6995fb_2a31_4bd7_953e_b1ad7fb7d31c);
windows_core::imp::interface_hierarchy!(ICAT, windows_core::IUnknown);
impl ICAT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForNextTable)(windows_core::Interface::as_raw(self), hnexttableavailable).ok() }
    }
    pub unsafe fn GetNextTable(&self, dwtimeout: u32) -> windows_core::Result<ICAT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNextTable)(windows_core::Interface::as_raw(self), dwtimeout, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForWhenCurrent)(windows_core::Interface::as_raw(self), hnexttableiscurrent).ok() }
    }
    pub unsafe fn ConvertNextToCurrent(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ConvertNextToCurrent)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ICAT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub GetNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForWhenCurrent: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub ConvertNextToCurrent: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait ICAT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn GetNextTable(&self, dwtimeout: u32) -> windows_core::Result<ICAT>;
    fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn ConvertNextToCurrent(&self) -> windows_core::Result<()>;
}
impl ICAT_Vtbl {
    pub const fn new<Identity: ICAT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: ICAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ICAT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: ICAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ICAT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: ICAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ICAT_Impl::GetCountOfTableDescriptors(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: ICAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ICAT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: ICAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ICAT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn RegisterForNextTable<Identity: ICAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ICAT_Impl::RegisterForNextTable(this, core::mem::transmute_copy(&hnexttableavailable)).into()
            }
        }
        unsafe extern "system" fn GetNextTable<Identity: ICAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwtimeout: u32, ppcat: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ICAT_Impl::GetNextTable(this, core::mem::transmute_copy(&dwtimeout)) {
                    Ok(ok__) => {
                        ppcat.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RegisterForWhenCurrent<Identity: ICAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ICAT_Impl::RegisterForWhenCurrent(this, core::mem::transmute_copy(&hnexttableiscurrent)).into()
            }
        }
        unsafe extern "system" fn ConvertNextToCurrent<Identity: ICAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ICAT_Impl::ConvertNextToCurrent(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
            RegisterForNextTable: RegisterForNextTable::<Identity, OFFSET>,
            GetNextTable: GetNextTable::<Identity, OFFSET>,
            RegisterForWhenCurrent: RegisterForWhenCurrent::<Identity, OFFSET>,
            ConvertNextToCurrent: ConvertNextToCurrent::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ICAT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ICAT {}
windows_core::imp::define_interface!(ICaptionServiceDescriptor, ICaptionServiceDescriptor_Vtbl, 0x40834007_6834_46f0_bd45_d5f6a6be258c);
windows_core::imp::interface_hierarchy!(ICaptionServiceDescriptor, windows_core::IUnknown);
impl ICaptionServiceDescriptor {
    pub unsafe fn GetNumberOfServices(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNumberOfServices)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLanguageCode(&self, bindex: u8, langcode: &mut [u8; 3]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLanguageCode)(windows_core::Interface::as_raw(self), bindex, core::mem::transmute(langcode.as_ptr())).ok() }
    }
    pub unsafe fn GetCaptionServiceNumber(&self, bindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCaptionServiceNumber)(windows_core::Interface::as_raw(self), bindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCCType(&self, bindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCCType)(windows_core::Interface::as_raw(self), bindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetEasyReader(&self, bindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEasyReader)(windows_core::Interface::as_raw(self), bindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetWideAspectRatio(&self, bindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetWideAspectRatio)(windows_core::Interface::as_raw(self), bindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ICaptionServiceDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetNumberOfServices: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLanguageCode: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetCaptionServiceNumber: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetCCType: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetEasyReader: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetWideAspectRatio: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
}
pub trait ICaptionServiceDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetNumberOfServices(&self) -> windows_core::Result<u8>;
    fn GetLanguageCode(&self, bindex: u8, langcode: *mut u8) -> windows_core::Result<()>;
    fn GetCaptionServiceNumber(&self, bindex: u8) -> windows_core::Result<u8>;
    fn GetCCType(&self, bindex: u8) -> windows_core::Result<u8>;
    fn GetEasyReader(&self, bindex: u8) -> windows_core::Result<u8>;
    fn GetWideAspectRatio(&self, bindex: u8) -> windows_core::Result<u8>;
}
impl ICaptionServiceDescriptor_Vtbl {
    pub const fn new<Identity: ICaptionServiceDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetNumberOfServices<Identity: ICaptionServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ICaptionServiceDescriptor_Impl::GetNumberOfServices(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLanguageCode<Identity: ICaptionServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, langcode: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ICaptionServiceDescriptor_Impl::GetLanguageCode(this, core::mem::transmute_copy(&bindex), core::mem::transmute_copy(&langcode)).into()
            }
        }
        unsafe extern "system" fn GetCaptionServiceNumber<Identity: ICaptionServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ICaptionServiceDescriptor_Impl::GetCaptionServiceNumber(this, core::mem::transmute_copy(&bindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCCType<Identity: ICaptionServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ICaptionServiceDescriptor_Impl::GetCCType(this, core::mem::transmute_copy(&bindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEasyReader<Identity: ICaptionServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ICaptionServiceDescriptor_Impl::GetEasyReader(this, core::mem::transmute_copy(&bindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetWideAspectRatio<Identity: ICaptionServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ICaptionServiceDescriptor_Impl::GetWideAspectRatio(this, core::mem::transmute_copy(&bindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetNumberOfServices: GetNumberOfServices::<Identity, OFFSET>,
            GetLanguageCode: GetLanguageCode::<Identity, OFFSET>,
            GetCaptionServiceNumber: GetCaptionServiceNumber::<Identity, OFFSET>,
            GetCCType: GetCCType::<Identity, OFFSET>,
            GetEasyReader: GetEasyReader::<Identity, OFFSET>,
            GetWideAspectRatio: GetWideAspectRatio::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ICaptionServiceDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ICaptionServiceDescriptor {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IChannelIDTuneRequest, IChannelIDTuneRequest_Vtbl, 0x156eff60_86f4_4e28_89fc_109799fd57ee);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IChannelIDTuneRequest {
    type Target = ITuneRequest;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IChannelIDTuneRequest, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuneRequest);
#[cfg(feature = "Win32_System_Com")]
impl IChannelIDTuneRequest {
    pub unsafe fn ChannelID(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ChannelID)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetChannelID(&self, channelid: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetChannelID)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(channelid)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IChannelIDTuneRequest_Vtbl {
    pub base__: ITuneRequest_Vtbl,
    pub ChannelID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetChannelID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IChannelIDTuneRequest_Impl: ITuneRequest_Impl {
    fn ChannelID(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetChannelID(&self, channelid: &windows_core::BSTR) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IChannelIDTuneRequest_Vtbl {
    pub const fn new<Identity: IChannelIDTuneRequest_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn ChannelID<Identity: IChannelIDTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, channelid: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IChannelIDTuneRequest_Impl::ChannelID(this) {
                    Ok(ok__) => {
                        channelid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetChannelID<Identity: IChannelIDTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, channelid: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IChannelIDTuneRequest_Impl::SetChannelID(this, core::mem::transmute(&channelid)).into()
            }
        }
        Self { base__: ITuneRequest_Vtbl::new::<Identity, OFFSET>(), ChannelID: ChannelID::<Identity, OFFSET>, SetChannelID: SetChannelID::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IChannelIDTuneRequest as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuneRequest as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IChannelIDTuneRequest {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IChannelTuneRequest, IChannelTuneRequest_Vtbl, 0x0369b4e0_45b6_11d3_b650_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IChannelTuneRequest {
    type Target = ITuneRequest;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IChannelTuneRequest, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuneRequest);
#[cfg(feature = "Win32_System_Com")]
impl IChannelTuneRequest {
    pub unsafe fn Channel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Channel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetChannel(&self, channel: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetChannel)(windows_core::Interface::as_raw(self), channel).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IChannelTuneRequest_Vtbl {
    pub base__: ITuneRequest_Vtbl,
    pub Channel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IChannelTuneRequest_Impl: ITuneRequest_Impl {
    fn Channel(&self) -> windows_core::Result<i32>;
    fn SetChannel(&self, channel: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IChannelTuneRequest_Vtbl {
    pub const fn new<Identity: IChannelTuneRequest_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Channel<Identity: IChannelTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, channel: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IChannelTuneRequest_Impl::Channel(this) {
                    Ok(ok__) => {
                        channel.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetChannel<Identity: IChannelTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, channel: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IChannelTuneRequest_Impl::SetChannel(this, core::mem::transmute_copy(&channel)).into()
            }
        }
        Self { base__: ITuneRequest_Vtbl::new::<Identity, OFFSET>(), Channel: Channel::<Identity, OFFSET>, SetChannel: SetChannel::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IChannelTuneRequest as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuneRequest as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IChannelTuneRequest {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IComponent, IComponent_Vtbl, 0x1a5576fc_0e19_11d3_9d8e_00c04f72d980);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IComponent {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IComponent, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IComponent {
    pub unsafe fn Type(&self) -> windows_core::Result<IComponentType> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Type)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetType<P0>(&self, ct: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IComponentType>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetType)(windows_core::Interface::as_raw(self), ct.param().abi()).ok() }
    }
    pub unsafe fn DescLangID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DescLangID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetDescLangID(&self, langid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDescLangID)(windows_core::Interface::as_raw(self), langid).ok() }
    }
    pub unsafe fn Status(&self) -> windows_core::Result<super::ComponentStatus> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Status)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetStatus(&self, status: super::ComponentStatus) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetStatus)(windows_core::Interface::as_raw(self), status).ok() }
    }
    pub unsafe fn Description(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Description)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetDescription(&self, description: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDescription)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(description)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IComponent> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IComponent_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Type: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DescLangID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetDescLangID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub Status: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::ComponentStatus) -> windows_core::HRESULT,
    pub SetStatus: unsafe extern "system" fn(*mut core::ffi::c_void, super::ComponentStatus) -> windows_core::HRESULT,
    pub Description: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetDescription: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IComponent_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Type(&self) -> windows_core::Result<IComponentType>;
    fn SetType(&self, ct: windows_core::Ref<'_, IComponentType>) -> windows_core::Result<()>;
    fn DescLangID(&self) -> windows_core::Result<i32>;
    fn SetDescLangID(&self, langid: i32) -> windows_core::Result<()>;
    fn Status(&self) -> windows_core::Result<super::ComponentStatus>;
    fn SetStatus(&self, status: super::ComponentStatus) -> windows_core::Result<()>;
    fn Description(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetDescription(&self, description: &windows_core::BSTR) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IComponent>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IComponent_Vtbl {
    pub const fn new<Identity: IComponent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Type<Identity: IComponent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ct: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponent_Impl::Type(this) {
                    Ok(ok__) => {
                        ct.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetType<Identity: IComponent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ct: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponent_Impl::SetType(this, core::mem::transmute_copy(&ct)).into()
            }
        }
        unsafe extern "system" fn DescLangID<Identity: IComponent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, langid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponent_Impl::DescLangID(this) {
                    Ok(ok__) => {
                        langid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDescLangID<Identity: IComponent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, langid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponent_Impl::SetDescLangID(this, core::mem::transmute_copy(&langid)).into()
            }
        }
        unsafe extern "system" fn Status<Identity: IComponent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, status: *mut super::ComponentStatus) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponent_Impl::Status(this) {
                    Ok(ok__) => {
                        status.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetStatus<Identity: IComponent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, status: super::ComponentStatus) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponent_Impl::SetStatus(this, core::mem::transmute_copy(&status)).into()
            }
        }
        unsafe extern "system" fn Description<Identity: IComponent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, description: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponent_Impl::Description(this) {
                    Ok(ok__) => {
                        description.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDescription<Identity: IComponent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, description: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponent_Impl::SetDescription(this, core::mem::transmute(&description)).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IComponent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newcomponent: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponent_Impl::Clone(this) {
                    Ok(ok__) => {
                        newcomponent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Type: Type::<Identity, OFFSET>,
            SetType: SetType::<Identity, OFFSET>,
            DescLangID: DescLangID::<Identity, OFFSET>,
            SetDescLangID: SetDescLangID::<Identity, OFFSET>,
            Status: Status::<Identity, OFFSET>,
            SetStatus: SetStatus::<Identity, OFFSET>,
            Description: Description::<Identity, OFFSET>,
            SetDescription: SetDescription::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IComponent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IComponent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IComponentType, IComponentType_Vtbl, 0x6a340dc0_0311_11d3_9d8e_00c04f72d980);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IComponentType {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IComponentType, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IComponentType {
    pub unsafe fn Category(&self) -> windows_core::Result<super::ComponentCategory> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Category)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetCategory(&self, category: super::ComponentCategory) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCategory)(windows_core::Interface::as_raw(self), category).ok() }
    }
    pub unsafe fn MediaMajorType(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MediaMajorType)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetMediaMajorType(&self, mediamajortype: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMediaMajorType)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(mediamajortype)).ok() }
    }
    pub unsafe fn _MediaMajorType(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._MediaMajorType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Set_MediaMajorType(&self, mediamajortypeguid: *const windows_core::GUID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set_MediaMajorType)(windows_core::Interface::as_raw(self), mediamajortypeguid).ok() }
    }
    pub unsafe fn MediaSubType(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MediaSubType)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetMediaSubType(&self, mediasubtype: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMediaSubType)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(mediasubtype)).ok() }
    }
    pub unsafe fn _MediaSubType(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._MediaSubType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Set_MediaSubType(&self, mediasubtypeguid: *const windows_core::GUID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set_MediaSubType)(windows_core::Interface::as_raw(self), mediasubtypeguid).ok() }
    }
    pub unsafe fn MediaFormatType(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MediaFormatType)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetMediaFormatType(&self, mediaformattype: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMediaFormatType)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(mediaformattype)).ok() }
    }
    pub unsafe fn _MediaFormatType(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._MediaFormatType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Set_MediaFormatType(&self, mediaformattypeguid: *const windows_core::GUID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set_MediaFormatType)(windows_core::Interface::as_raw(self), mediaformattypeguid).ok() }
    }
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub unsafe fn MediaType(&self) -> windows_core::Result<super::super::MediaFoundation::AM_MEDIA_TYPE> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MediaType)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub unsafe fn SetMediaType(&self, mediatype: *const super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMediaType)(windows_core::Interface::as_raw(self), core::mem::transmute(mediatype)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IComponentType> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IComponentType_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Category: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::ComponentCategory) -> windows_core::HRESULT,
    pub SetCategory: unsafe extern "system" fn(*mut core::ffi::c_void, super::ComponentCategory) -> windows_core::HRESULT,
    pub MediaMajorType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetMediaMajorType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub _MediaMajorType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub Set_MediaMajorType: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID) -> windows_core::HRESULT,
    pub MediaSubType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetMediaSubType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub _MediaSubType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub Set_MediaSubType: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID) -> windows_core::HRESULT,
    pub MediaFormatType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetMediaFormatType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub _MediaFormatType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub Set_MediaFormatType: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub MediaType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_Media_MediaFoundation"))]
    MediaType: usize,
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub SetMediaType: unsafe extern "system" fn(*mut core::ffi::c_void, *const super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_Media_MediaFoundation"))]
    SetMediaType: usize,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IComponentType_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Category(&self) -> windows_core::Result<super::ComponentCategory>;
    fn SetCategory(&self, category: super::ComponentCategory) -> windows_core::Result<()>;
    fn MediaMajorType(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetMediaMajorType(&self, mediamajortype: &windows_core::BSTR) -> windows_core::Result<()>;
    fn _MediaMajorType(&self) -> windows_core::Result<windows_core::GUID>;
    fn Set_MediaMajorType(&self, mediamajortypeguid: *const windows_core::GUID) -> windows_core::Result<()>;
    fn MediaSubType(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetMediaSubType(&self, mediasubtype: &windows_core::BSTR) -> windows_core::Result<()>;
    fn _MediaSubType(&self) -> windows_core::Result<windows_core::GUID>;
    fn Set_MediaSubType(&self, mediasubtypeguid: *const windows_core::GUID) -> windows_core::Result<()>;
    fn MediaFormatType(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetMediaFormatType(&self, mediaformattype: &windows_core::BSTR) -> windows_core::Result<()>;
    fn _MediaFormatType(&self) -> windows_core::Result<windows_core::GUID>;
    fn Set_MediaFormatType(&self, mediaformattypeguid: *const windows_core::GUID) -> windows_core::Result<()>;
    fn MediaType(&self) -> windows_core::Result<super::super::MediaFoundation::AM_MEDIA_TYPE>;
    fn SetMediaType(&self, mediatype: *const super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IComponentType>;
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IComponentType_Vtbl {
    pub const fn new<Identity: IComponentType_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Category<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, category: *mut super::ComponentCategory) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentType_Impl::Category(this) {
                    Ok(ok__) => {
                        category.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCategory<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, category: super::ComponentCategory) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponentType_Impl::SetCategory(this, core::mem::transmute_copy(&category)).into()
            }
        }
        unsafe extern "system" fn MediaMajorType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediamajortype: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentType_Impl::MediaMajorType(this) {
                    Ok(ok__) => {
                        mediamajortype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMediaMajorType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediamajortype: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponentType_Impl::SetMediaMajorType(this, core::mem::transmute(&mediamajortype)).into()
            }
        }
        unsafe extern "system" fn _MediaMajorType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediamajortypeguid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentType_Impl::_MediaMajorType(this) {
                    Ok(ok__) => {
                        mediamajortypeguid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Set_MediaMajorType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediamajortypeguid: *const windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponentType_Impl::Set_MediaMajorType(this, core::mem::transmute_copy(&mediamajortypeguid)).into()
            }
        }
        unsafe extern "system" fn MediaSubType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediasubtype: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentType_Impl::MediaSubType(this) {
                    Ok(ok__) => {
                        mediasubtype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMediaSubType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediasubtype: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponentType_Impl::SetMediaSubType(this, core::mem::transmute(&mediasubtype)).into()
            }
        }
        unsafe extern "system" fn _MediaSubType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediasubtypeguid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentType_Impl::_MediaSubType(this) {
                    Ok(ok__) => {
                        mediasubtypeguid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Set_MediaSubType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediasubtypeguid: *const windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponentType_Impl::Set_MediaSubType(this, core::mem::transmute_copy(&mediasubtypeguid)).into()
            }
        }
        unsafe extern "system" fn MediaFormatType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediaformattype: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentType_Impl::MediaFormatType(this) {
                    Ok(ok__) => {
                        mediaformattype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMediaFormatType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediaformattype: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponentType_Impl::SetMediaFormatType(this, core::mem::transmute(&mediaformattype)).into()
            }
        }
        unsafe extern "system" fn _MediaFormatType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediaformattypeguid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentType_Impl::_MediaFormatType(this) {
                    Ok(ok__) => {
                        mediaformattypeguid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Set_MediaFormatType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediaformattypeguid: *const windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponentType_Impl::Set_MediaFormatType(this, core::mem::transmute_copy(&mediaformattypeguid)).into()
            }
        }
        unsafe extern "system" fn MediaType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediatype: *mut super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentType_Impl::MediaType(this) {
                    Ok(ok__) => {
                        mediatype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMediaType<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mediatype: *const super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponentType_Impl::SetMediaType(this, core::mem::transmute_copy(&mediatype)).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newct: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentType_Impl::Clone(this) {
                    Ok(ok__) => {
                        newct.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Category: Category::<Identity, OFFSET>,
            SetCategory: SetCategory::<Identity, OFFSET>,
            MediaMajorType: MediaMajorType::<Identity, OFFSET>,
            SetMediaMajorType: SetMediaMajorType::<Identity, OFFSET>,
            _MediaMajorType: _MediaMajorType::<Identity, OFFSET>,
            Set_MediaMajorType: Set_MediaMajorType::<Identity, OFFSET>,
            MediaSubType: MediaSubType::<Identity, OFFSET>,
            SetMediaSubType: SetMediaSubType::<Identity, OFFSET>,
            _MediaSubType: _MediaSubType::<Identity, OFFSET>,
            Set_MediaSubType: Set_MediaSubType::<Identity, OFFSET>,
            MediaFormatType: MediaFormatType::<Identity, OFFSET>,
            SetMediaFormatType: SetMediaFormatType::<Identity, OFFSET>,
            _MediaFormatType: _MediaFormatType::<Identity, OFFSET>,
            Set_MediaFormatType: Set_MediaFormatType::<Identity, OFFSET>,
            MediaType: MediaType::<Identity, OFFSET>,
            SetMediaType: SetMediaType::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IComponentType as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IComponentType {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IComponentTypes, IComponentTypes_Vtbl, 0x0dc13d4a_0313_11d3_9d8e_00c04f72d980);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IComponentTypes {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IComponentTypes, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IComponentTypes {
    pub unsafe fn Count(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Count)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._NewEnum)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn EnumComponentTypes(&self) -> windows_core::Result<IEnumComponentTypes> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumComponentTypes)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn get_Item(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IComponentType> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(index), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn put_Item<P1>(&self, index: &super::super::super::System::Variant::VARIANT, componenttype: P1) -> windows_core::Result<()>
    where
        P1: windows_core::Param<IComponentType>,
    {
        unsafe { (windows_core::Interface::vtable(self).put_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(index), componenttype.param().abi()).ok() }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Add<P0>(&self, componenttype: P0) -> windows_core::Result<super::super::super::System::Variant::VARIANT>
    where
        P0: windows_core::Param<IComponentType>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Add)(windows_core::Interface::as_raw(self), componenttype.param().abi(), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Remove(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Remove)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(index)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IComponentTypes> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IComponentTypes_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Count: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub _NewEnum: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    _NewEnum: usize,
    pub EnumComponentTypes: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub get_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    get_Item: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub put_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    put_Item: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Add: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Add: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Remove: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Remove: usize,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IComponentTypes_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Count(&self) -> windows_core::Result<i32>;
    fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn EnumComponentTypes(&self) -> windows_core::Result<IEnumComponentTypes>;
    fn get_Item(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IComponentType>;
    fn put_Item(&self, index: &super::super::super::System::Variant::VARIANT, componenttype: windows_core::Ref<'_, IComponentType>) -> windows_core::Result<()>;
    fn Add(&self, componenttype: windows_core::Ref<'_, IComponentType>) -> windows_core::Result<super::super::super::System::Variant::VARIANT>;
    fn Remove(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IComponentTypes>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IComponentTypes_Vtbl {
    pub const fn new<Identity: IComponentTypes_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Count<Identity: IComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, count: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentTypes_Impl::Count(this) {
                    Ok(ok__) => {
                        count.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _NewEnum<Identity: IComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppnewenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentTypes_Impl::_NewEnum(this) {
                    Ok(ok__) => {
                        ppnewenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn EnumComponentTypes<Identity: IComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppnewenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentTypes_Impl::EnumComponentTypes(this) {
                    Ok(ok__) => {
                        ppnewenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_Item<Identity: IComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, index: super::super::super::System::Variant::VARIANT, componenttype: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentTypes_Impl::get_Item(this, core::mem::transmute(&index)) {
                    Ok(ok__) => {
                        componenttype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn put_Item<Identity: IComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, index: super::super::super::System::Variant::VARIANT, componenttype: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponentTypes_Impl::put_Item(this, core::mem::transmute(&index), core::mem::transmute_copy(&componenttype)).into()
            }
        }
        unsafe extern "system" fn Add<Identity: IComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, componenttype: *mut core::ffi::c_void, newindex: *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentTypes_Impl::Add(this, core::mem::transmute_copy(&componenttype)) {
                    Ok(ok__) => {
                        newindex.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Remove<Identity: IComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, index: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponentTypes_Impl::Remove(this, core::mem::transmute(&index)).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newlist: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentTypes_Impl::Clone(this) {
                    Ok(ok__) => {
                        newlist.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Count: Count::<Identity, OFFSET>,
            _NewEnum: _NewEnum::<Identity, OFFSET>,
            EnumComponentTypes: EnumComponentTypes::<Identity, OFFSET>,
            get_Item: get_Item::<Identity, OFFSET>,
            put_Item: put_Item::<Identity, OFFSET>,
            Add: Add::<Identity, OFFSET>,
            Remove: Remove::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IComponentTypes as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IComponentTypes {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IComponents, IComponents_Vtbl, 0x39a48091_fffe_4182_a161_3ff802640e26);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IComponents {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IComponents, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IComponents {
    pub unsafe fn Count(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Count)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._NewEnum)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn EnumComponents(&self) -> windows_core::Result<IEnumComponents> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumComponents)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn get_Item(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IComponent> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(index), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Add<P0>(&self, component: P0) -> windows_core::Result<super::super::super::System::Variant::VARIANT>
    where
        P0: windows_core::Param<IComponent>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Add)(windows_core::Interface::as_raw(self), component.param().abi(), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Remove(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Remove)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(index)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IComponents> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn put_Item<P1>(&self, index: &super::super::super::System::Variant::VARIANT, ppcomponent: P1) -> windows_core::Result<()>
    where
        P1: windows_core::Param<IComponent>,
    {
        unsafe { (windows_core::Interface::vtable(self).put_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(index), ppcomponent.param().abi()).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IComponents_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Count: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub _NewEnum: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    _NewEnum: usize,
    pub EnumComponents: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub get_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    get_Item: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Add: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Add: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Remove: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Remove: usize,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub put_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    put_Item: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IComponents_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Count(&self) -> windows_core::Result<i32>;
    fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn EnumComponents(&self) -> windows_core::Result<IEnumComponents>;
    fn get_Item(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IComponent>;
    fn Add(&self, component: windows_core::Ref<'_, IComponent>) -> windows_core::Result<super::super::super::System::Variant::VARIANT>;
    fn Remove(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IComponents>;
    fn put_Item(&self, index: &super::super::super::System::Variant::VARIANT, ppcomponent: windows_core::Ref<'_, IComponent>) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IComponents_Vtbl {
    pub const fn new<Identity: IComponents_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Count<Identity: IComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, count: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponents_Impl::Count(this) {
                    Ok(ok__) => {
                        count.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _NewEnum<Identity: IComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppnewenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponents_Impl::_NewEnum(this) {
                    Ok(ok__) => {
                        ppnewenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn EnumComponents<Identity: IComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppnewenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponents_Impl::EnumComponents(this) {
                    Ok(ok__) => {
                        ppnewenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_Item<Identity: IComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, index: super::super::super::System::Variant::VARIANT, ppcomponent: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponents_Impl::get_Item(this, core::mem::transmute(&index)) {
                    Ok(ok__) => {
                        ppcomponent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Add<Identity: IComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, component: *mut core::ffi::c_void, newindex: *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponents_Impl::Add(this, core::mem::transmute_copy(&component)) {
                    Ok(ok__) => {
                        newindex.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Remove<Identity: IComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, index: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponents_Impl::Remove(this, core::mem::transmute(&index)).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newlist: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponents_Impl::Clone(this) {
                    Ok(ok__) => {
                        newlist.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn put_Item<Identity: IComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, index: super::super::super::System::Variant::VARIANT, ppcomponent: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponents_Impl::put_Item(this, core::mem::transmute(&index), core::mem::transmute_copy(&ppcomponent)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Count: Count::<Identity, OFFSET>,
            _NewEnum: _NewEnum::<Identity, OFFSET>,
            EnumComponents: EnumComponents::<Identity, OFFSET>,
            get_Item: get_Item::<Identity, OFFSET>,
            Add: Add::<Identity, OFFSET>,
            Remove: Remove::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
            put_Item: put_Item::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IComponents as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IComponents {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IComponentsOld, IComponentsOld_Vtbl, 0xfcd01846_0e19_11d3_9d8e_00c04f72d980);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IComponentsOld {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IComponentsOld, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IComponentsOld {
    pub unsafe fn Count(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Count)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._NewEnum)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn EnumComponents(&self) -> windows_core::Result<IEnumComponents> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumComponents)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn get_Item(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IComponent> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(index), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Add<P0>(&self, component: P0) -> windows_core::Result<super::super::super::System::Variant::VARIANT>
    where
        P0: windows_core::Param<IComponent>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Add)(windows_core::Interface::as_raw(self), component.param().abi(), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Remove(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Remove)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(index)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IComponents> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IComponentsOld_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Count: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub _NewEnum: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    _NewEnum: usize,
    pub EnumComponents: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub get_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    get_Item: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Add: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Add: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Remove: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Remove: usize,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IComponentsOld_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Count(&self) -> windows_core::Result<i32>;
    fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn EnumComponents(&self) -> windows_core::Result<IEnumComponents>;
    fn get_Item(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IComponent>;
    fn Add(&self, component: windows_core::Ref<'_, IComponent>) -> windows_core::Result<super::super::super::System::Variant::VARIANT>;
    fn Remove(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IComponents>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IComponentsOld_Vtbl {
    pub const fn new<Identity: IComponentsOld_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Count<Identity: IComponentsOld_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, count: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentsOld_Impl::Count(this) {
                    Ok(ok__) => {
                        count.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _NewEnum<Identity: IComponentsOld_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppnewenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentsOld_Impl::_NewEnum(this) {
                    Ok(ok__) => {
                        ppnewenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn EnumComponents<Identity: IComponentsOld_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppnewenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentsOld_Impl::EnumComponents(this) {
                    Ok(ok__) => {
                        ppnewenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_Item<Identity: IComponentsOld_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, index: super::super::super::System::Variant::VARIANT, ppcomponent: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentsOld_Impl::get_Item(this, core::mem::transmute(&index)) {
                    Ok(ok__) => {
                        ppcomponent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Add<Identity: IComponentsOld_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, component: *mut core::ffi::c_void, newindex: *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentsOld_Impl::Add(this, core::mem::transmute_copy(&component)) {
                    Ok(ok__) => {
                        newindex.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Remove<Identity: IComponentsOld_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, index: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IComponentsOld_Impl::Remove(this, core::mem::transmute(&index)).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IComponentsOld_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newlist: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IComponentsOld_Impl::Clone(this) {
                    Ok(ok__) => {
                        newlist.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Count: Count::<Identity, OFFSET>,
            _NewEnum: _NewEnum::<Identity, OFFSET>,
            EnumComponents: EnumComponents::<Identity, OFFSET>,
            get_Item: get_Item::<Identity, OFFSET>,
            Add: Add::<Identity, OFFSET>,
            Remove: Remove::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IComponentsOld as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IComponentsOld {}
windows_core::imp::define_interface!(ICreatePropBagOnRegKey, ICreatePropBagOnRegKey_Vtbl, 0x8a674b48_1f63_11d3_b64c_00c04f79498e);
windows_core::imp::interface_hierarchy!(ICreatePropBagOnRegKey, windows_core::IUnknown);
impl ICreatePropBagOnRegKey {
    #[cfg(feature = "Win32_System_Registry")]
    pub unsafe fn Create<P1>(&self, hkey: super::super::super::System::Registry::HKEY, subkey: P1, uloptions: u32, samdesired: u32, iid: *const windows_core::GUID, ppbag: *mut *mut core::ffi::c_void) -> windows_core::Result<()>
    where
        P1: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe { (windows_core::Interface::vtable(self).Create)(windows_core::Interface::as_raw(self), hkey, subkey.param().abi(), uloptions, samdesired, iid, ppbag as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ICreatePropBagOnRegKey_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(feature = "Win32_System_Registry")]
    pub Create: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Registry::HKEY, windows_core::PCWSTR, u32, u32, *const windows_core::GUID, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Registry"))]
    Create: usize,
}
#[cfg(feature = "Win32_System_Registry")]
pub trait ICreatePropBagOnRegKey_Impl: windows_core::IUnknownImpl {
    fn Create(&self, hkey: super::super::super::System::Registry::HKEY, subkey: &windows_core::PCWSTR, uloptions: u32, samdesired: u32, iid: *const windows_core::GUID, ppbag: *mut *mut core::ffi::c_void) -> windows_core::Result<()>;
}
#[cfg(feature = "Win32_System_Registry")]
impl ICreatePropBagOnRegKey_Vtbl {
    pub const fn new<Identity: ICreatePropBagOnRegKey_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Create<Identity: ICreatePropBagOnRegKey_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hkey: super::super::super::System::Registry::HKEY, subkey: windows_core::PCWSTR, uloptions: u32, samdesired: u32, iid: *const windows_core::GUID, ppbag: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ICreatePropBagOnRegKey_Impl::Create(this, core::mem::transmute_copy(&hkey), core::mem::transmute(&subkey), core::mem::transmute_copy(&uloptions), core::mem::transmute_copy(&samdesired), core::mem::transmute_copy(&iid), core::mem::transmute_copy(&ppbag)).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), Create: Create::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ICreatePropBagOnRegKey as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Registry")]
impl windows_core::RuntimeName for ICreatePropBagOnRegKey {}
windows_core::imp::define_interface!(IDTFilter, IDTFilter_Vtbl, 0xc4c4c4b2_0049_4e2b_98fb_9537f6ce516d);
windows_core::imp::interface_hierarchy!(IDTFilter, windows_core::IUnknown);
impl IDTFilter {
    pub unsafe fn EvalRatObjOK(&self) -> windows_core::Result<windows_core::HRESULT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EvalRatObjOK)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCurrRating(&self, pensystem: *mut EnTvRat_System, penrating: *mut EnTvRat_GenericLevel, plbfenattr: *mut i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetCurrRating)(windows_core::Interface::as_raw(self), pensystem as _, penrating as _, plbfenattr as _).ok() }
    }
    pub unsafe fn get_BlockedRatingAttributes(&self, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_BlockedRatingAttributes)(windows_core::Interface::as_raw(self), ensystem, enlevel, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn put_BlockedRatingAttributes(&self, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel, lbfattrs: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).put_BlockedRatingAttributes)(windows_core::Interface::as_raw(self), ensystem, enlevel, lbfattrs).ok() }
    }
    pub unsafe fn BlockUnRated(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).BlockUnRated)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetBlockUnRated(&self, fblockunratedshows: bool) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetBlockUnRated)(windows_core::Interface::as_raw(self), fblockunratedshows.into()).ok() }
    }
    pub unsafe fn BlockUnRatedDelay(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).BlockUnRatedDelay)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetBlockUnRatedDelay(&self, msecsdelaybeforeblock: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetBlockUnRatedDelay)(windows_core::Interface::as_raw(self), msecsdelaybeforeblock).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDTFilter_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub EvalRatObjOK: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::HRESULT) -> windows_core::HRESULT,
    pub GetCurrRating: unsafe extern "system" fn(*mut core::ffi::c_void, *mut EnTvRat_System, *mut EnTvRat_GenericLevel, *mut i32) -> windows_core::HRESULT,
    pub get_BlockedRatingAttributes: unsafe extern "system" fn(*mut core::ffi::c_void, EnTvRat_System, EnTvRat_GenericLevel, *mut i32) -> windows_core::HRESULT,
    pub put_BlockedRatingAttributes: unsafe extern "system" fn(*mut core::ffi::c_void, EnTvRat_System, EnTvRat_GenericLevel, i32) -> windows_core::HRESULT,
    pub BlockUnRated: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub SetBlockUnRated: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::BOOL) -> windows_core::HRESULT,
    pub BlockUnRatedDelay: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetBlockUnRatedDelay: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
pub trait IDTFilter_Impl: windows_core::IUnknownImpl {
    fn EvalRatObjOK(&self) -> windows_core::Result<windows_core::HRESULT>;
    fn GetCurrRating(&self, pensystem: *mut EnTvRat_System, penrating: *mut EnTvRat_GenericLevel, plbfenattr: *mut i32) -> windows_core::Result<()>;
    fn get_BlockedRatingAttributes(&self, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel) -> windows_core::Result<i32>;
    fn put_BlockedRatingAttributes(&self, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel, lbfattrs: i32) -> windows_core::Result<()>;
    fn BlockUnRated(&self) -> windows_core::Result<windows_core::BOOL>;
    fn SetBlockUnRated(&self, fblockunratedshows: windows_core::BOOL) -> windows_core::Result<()>;
    fn BlockUnRatedDelay(&self) -> windows_core::Result<i32>;
    fn SetBlockUnRatedDelay(&self, msecsdelaybeforeblock: i32) -> windows_core::Result<()>;
}
impl IDTFilter_Vtbl {
    pub const fn new<Identity: IDTFilter_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn EvalRatObjOK<Identity: IDTFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, phrcocreateretval: *mut windows_core::HRESULT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDTFilter_Impl::EvalRatObjOK(this) {
                    Ok(ok__) => {
                        phrcocreateretval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCurrRating<Identity: IDTFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pensystem: *mut EnTvRat_System, penrating: *mut EnTvRat_GenericLevel, plbfenattr: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDTFilter_Impl::GetCurrRating(this, core::mem::transmute_copy(&pensystem), core::mem::transmute_copy(&penrating), core::mem::transmute_copy(&plbfenattr)).into()
            }
        }
        unsafe extern "system" fn get_BlockedRatingAttributes<Identity: IDTFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel, plbfenattr: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDTFilter_Impl::get_BlockedRatingAttributes(this, core::mem::transmute_copy(&ensystem), core::mem::transmute_copy(&enlevel)) {
                    Ok(ok__) => {
                        plbfenattr.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn put_BlockedRatingAttributes<Identity: IDTFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel, lbfattrs: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDTFilter_Impl::put_BlockedRatingAttributes(this, core::mem::transmute_copy(&ensystem), core::mem::transmute_copy(&enlevel), core::mem::transmute_copy(&lbfattrs)).into()
            }
        }
        unsafe extern "system" fn BlockUnRated<Identity: IDTFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfblockunratedshows: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDTFilter_Impl::BlockUnRated(this) {
                    Ok(ok__) => {
                        pfblockunratedshows.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetBlockUnRated<Identity: IDTFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fblockunratedshows: windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDTFilter_Impl::SetBlockUnRated(this, core::mem::transmute_copy(&fblockunratedshows)).into()
            }
        }
        unsafe extern "system" fn BlockUnRatedDelay<Identity: IDTFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pmsecsdelaybeforeblock: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDTFilter_Impl::BlockUnRatedDelay(this) {
                    Ok(ok__) => {
                        pmsecsdelaybeforeblock.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetBlockUnRatedDelay<Identity: IDTFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, msecsdelaybeforeblock: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDTFilter_Impl::SetBlockUnRatedDelay(this, core::mem::transmute_copy(&msecsdelaybeforeblock)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            EvalRatObjOK: EvalRatObjOK::<Identity, OFFSET>,
            GetCurrRating: GetCurrRating::<Identity, OFFSET>,
            get_BlockedRatingAttributes: get_BlockedRatingAttributes::<Identity, OFFSET>,
            put_BlockedRatingAttributes: put_BlockedRatingAttributes::<Identity, OFFSET>,
            BlockUnRated: BlockUnRated::<Identity, OFFSET>,
            SetBlockUnRated: SetBlockUnRated::<Identity, OFFSET>,
            BlockUnRatedDelay: BlockUnRatedDelay::<Identity, OFFSET>,
            SetBlockUnRatedDelay: SetBlockUnRatedDelay::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDTFilter as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDTFilter {}
windows_core::imp::define_interface!(IDTFilter2, IDTFilter2_Vtbl, 0xc4c4c4b4_0049_4e2b_98fb_9537f6ce516d);
impl core::ops::Deref for IDTFilter2 {
    type Target = IDTFilter;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IDTFilter2, windows_core::IUnknown, IDTFilter);
impl IDTFilter2 {
    pub unsafe fn ChallengeUrl(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ChallengeUrl)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetCurrLicenseExpDate(&self, prottype: *const ProtType) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCurrLicenseExpDate)(windows_core::Interface::as_raw(self), prottype, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLastErrorCode(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLastErrorCode)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDTFilter2_Vtbl {
    pub base__: IDTFilter_Vtbl,
    pub ChallengeUrl: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCurrLicenseExpDate: unsafe extern "system" fn(*mut core::ffi::c_void, *const ProtType, *mut i32) -> windows_core::HRESULT,
    pub GetLastErrorCode: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDTFilter2_Impl: IDTFilter_Impl {
    fn ChallengeUrl(&self) -> windows_core::Result<windows_core::BSTR>;
    fn GetCurrLicenseExpDate(&self, prottype: *const ProtType) -> windows_core::Result<i32>;
    fn GetLastErrorCode(&self) -> windows_core::Result<()>;
}
impl IDTFilter2_Vtbl {
    pub const fn new<Identity: IDTFilter2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn ChallengeUrl<Identity: IDTFilter2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbstrchallengeurl: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDTFilter2_Impl::ChallengeUrl(this) {
                    Ok(ok__) => {
                        pbstrchallengeurl.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCurrLicenseExpDate<Identity: IDTFilter2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prottype: *const ProtType, lpdatetime: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDTFilter2_Impl::GetCurrLicenseExpDate(this, core::mem::transmute_copy(&prottype)) {
                    Ok(ok__) => {
                        lpdatetime.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLastErrorCode<Identity: IDTFilter2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDTFilter2_Impl::GetLastErrorCode(this).into()
            }
        }
        Self {
            base__: IDTFilter_Vtbl::new::<Identity, OFFSET>(),
            ChallengeUrl: ChallengeUrl::<Identity, OFFSET>,
            GetCurrLicenseExpDate: GetCurrLicenseExpDate::<Identity, OFFSET>,
            GetLastErrorCode: GetLastErrorCode::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDTFilter2 as windows_core::Interface>::IID || iid == &<IDTFilter as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDTFilter2 {}
windows_core::imp::define_interface!(IDTFilter3, IDTFilter3_Vtbl, 0x513998cc_e929_4cdf_9fbd_bad1e0314866);
impl core::ops::Deref for IDTFilter3 {
    type Target = IDTFilter2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IDTFilter3, windows_core::IUnknown, IDTFilter, IDTFilter2);
impl IDTFilter3 {
    pub unsafe fn GetProtectionType(&self) -> windows_core::Result<ProtType> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetProtectionType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn LicenseHasExpirationDate(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).LicenseHasExpirationDate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetRights(&self, bstrrights: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetRights)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(bstrrights)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDTFilter3_Vtbl {
    pub base__: IDTFilter2_Vtbl,
    pub GetProtectionType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut ProtType) -> windows_core::HRESULT,
    pub LicenseHasExpirationDate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub SetRights: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDTFilter3_Impl: IDTFilter2_Impl {
    fn GetProtectionType(&self) -> windows_core::Result<ProtType>;
    fn LicenseHasExpirationDate(&self) -> windows_core::Result<windows_core::BOOL>;
    fn SetRights(&self, bstrrights: &windows_core::BSTR) -> windows_core::Result<()>;
}
impl IDTFilter3_Vtbl {
    pub const fn new<Identity: IDTFilter3_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetProtectionType<Identity: IDTFilter3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pprotectiontype: *mut ProtType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDTFilter3_Impl::GetProtectionType(this) {
                    Ok(ok__) => {
                        pprotectiontype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn LicenseHasExpirationDate<Identity: IDTFilter3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pflicensehasexpirationdate: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDTFilter3_Impl::LicenseHasExpirationDate(this) {
                    Ok(ok__) => {
                        pflicensehasexpirationdate.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetRights<Identity: IDTFilter3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bstrrights: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDTFilter3_Impl::SetRights(this, core::mem::transmute(&bstrrights)).into()
            }
        }
        Self {
            base__: IDTFilter2_Vtbl::new::<Identity, OFFSET>(),
            GetProtectionType: GetProtectionType::<Identity, OFFSET>,
            LicenseHasExpirationDate: LicenseHasExpirationDate::<Identity, OFFSET>,
            SetRights: SetRights::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDTFilter3 as windows_core::Interface>::IID || iid == &<IDTFilter as windows_core::Interface>::IID || iid == &<IDTFilter2 as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDTFilter3 {}
windows_core::imp::define_interface!(IDTFilterConfig, IDTFilterConfig_Vtbl, 0xc4c4c4d2_0049_4e2b_98fb_9537f6ce516d);
windows_core::imp::interface_hierarchy!(IDTFilterConfig, windows_core::IUnknown);
impl IDTFilterConfig {
    pub unsafe fn GetSecureChannelObject(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSecureChannelObject)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDTFilterConfig_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetSecureChannelObject: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDTFilterConfig_Impl: windows_core::IUnknownImpl {
    fn GetSecureChannelObject(&self) -> windows_core::Result<windows_core::IUnknown>;
}
impl IDTFilterConfig_Vtbl {
    pub const fn new<Identity: IDTFilterConfig_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetSecureChannelObject<Identity: IDTFilterConfig_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppunkdrmsecurechannel: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDTFilterConfig_Impl::GetSecureChannelObject(this) {
                    Ok(ok__) => {
                        ppunkdrmsecurechannel.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), GetSecureChannelObject: GetSecureChannelObject::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDTFilterConfig as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDTFilterConfig {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDTFilterEvents, IDTFilterEvents_Vtbl, 0xc4c4c4c2_0049_4e2b_98fb_9537f6ce516d);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDTFilterEvents {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDTFilterEvents, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDTFilterEvents_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDTFilterEvents_Impl: super::super::super::System::Com::IDispatch_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDTFilterEvents_Vtbl {
    pub const fn new<Identity: IDTFilterEvents_Impl, const OFFSET: isize>() -> Self {
        Self { base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDTFilterEvents as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDTFilterEvents {}
windows_core::imp::define_interface!(IDTFilterLicenseRenewal, IDTFilterLicenseRenewal_Vtbl, 0x8a78b317_e405_4a43_994a_620d8f5ce25e);
windows_core::imp::interface_hierarchy!(IDTFilterLicenseRenewal, windows_core::IUnknown);
impl IDTFilterLicenseRenewal {
    pub unsafe fn GetLicenseRenewalData(&self, ppwszfilename: *mut windows_core::PWSTR, ppwszexpiredkid: *mut windows_core::PWSTR, ppwsztunerid: *mut windows_core::PWSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLicenseRenewalData)(windows_core::Interface::as_raw(self), ppwszfilename as _, ppwszexpiredkid as _, ppwsztunerid as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDTFilterLicenseRenewal_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetLicenseRenewalData: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::PWSTR, *mut windows_core::PWSTR, *mut windows_core::PWSTR) -> windows_core::HRESULT,
}
pub trait IDTFilterLicenseRenewal_Impl: windows_core::IUnknownImpl {
    fn GetLicenseRenewalData(&self, ppwszfilename: *mut windows_core::PWSTR, ppwszexpiredkid: *mut windows_core::PWSTR, ppwsztunerid: *mut windows_core::PWSTR) -> windows_core::Result<()>;
}
impl IDTFilterLicenseRenewal_Vtbl {
    pub const fn new<Identity: IDTFilterLicenseRenewal_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetLicenseRenewalData<Identity: IDTFilterLicenseRenewal_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppwszfilename: *mut windows_core::PWSTR, ppwszexpiredkid: *mut windows_core::PWSTR, ppwsztunerid: *mut windows_core::PWSTR) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDTFilterLicenseRenewal_Impl::GetLicenseRenewalData(this, core::mem::transmute_copy(&ppwszfilename), core::mem::transmute_copy(&ppwszexpiredkid), core::mem::transmute_copy(&ppwsztunerid)).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), GetLicenseRenewalData: GetLicenseRenewalData::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDTFilterLicenseRenewal as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDTFilterLicenseRenewal {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDVBCLocator, IDVBCLocator_Vtbl, 0x6e42f36e_1dd2_43c4_9f78_69d25ae39034);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDVBCLocator {
    type Target = IDigitalLocator;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDVBCLocator, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ILocator, IDigitalLocator);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDVBCLocator_Vtbl {
    pub base__: IDigitalLocator_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDVBCLocator_Impl: IDigitalLocator_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDVBCLocator_Vtbl {
    pub const fn new<Identity: IDVBCLocator_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IDigitalLocator_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVBCLocator as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ILocator as windows_core::Interface>::IID || iid == &<IDigitalLocator as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDVBCLocator {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDVBSLocator, IDVBSLocator_Vtbl, 0x3d7c353c_0d04_45f1_a742_f97cc1188dc8);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDVBSLocator {
    type Target = IDigitalLocator;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDVBSLocator, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ILocator, IDigitalLocator);
#[cfg(feature = "Win32_System_Com")]
impl IDVBSLocator {
    pub unsafe fn SignalPolarisation(&self) -> windows_core::Result<super::Polarisation> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SignalPolarisation)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSignalPolarisation(&self, polarisationval: super::Polarisation) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSignalPolarisation)(windows_core::Interface::as_raw(self), polarisationval).ok() }
    }
    pub unsafe fn WestPosition(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).WestPosition)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetWestPosition(&self, westlongitude: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetWestPosition)(windows_core::Interface::as_raw(self), westlongitude).ok() }
    }
    pub unsafe fn OrbitalPosition(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).OrbitalPosition)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetOrbitalPosition(&self, longitude: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetOrbitalPosition)(windows_core::Interface::as_raw(self), longitude).ok() }
    }
    pub unsafe fn Azimuth(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Azimuth)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetAzimuth(&self, azimuth: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetAzimuth)(windows_core::Interface::as_raw(self), azimuth).ok() }
    }
    pub unsafe fn Elevation(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Elevation)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetElevation(&self, elevation: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetElevation)(windows_core::Interface::as_raw(self), elevation).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDVBSLocator_Vtbl {
    pub base__: IDigitalLocator_Vtbl,
    pub SignalPolarisation: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::Polarisation) -> windows_core::HRESULT,
    pub SetSignalPolarisation: unsafe extern "system" fn(*mut core::ffi::c_void, super::Polarisation) -> windows_core::HRESULT,
    pub WestPosition: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetWestPosition: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub OrbitalPosition: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetOrbitalPosition: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub Azimuth: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetAzimuth: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub Elevation: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetElevation: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDVBSLocator_Impl: IDigitalLocator_Impl {
    fn SignalPolarisation(&self) -> windows_core::Result<super::Polarisation>;
    fn SetSignalPolarisation(&self, polarisationval: super::Polarisation) -> windows_core::Result<()>;
    fn WestPosition(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetWestPosition(&self, westlongitude: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn OrbitalPosition(&self) -> windows_core::Result<i32>;
    fn SetOrbitalPosition(&self, longitude: i32) -> windows_core::Result<()>;
    fn Azimuth(&self) -> windows_core::Result<i32>;
    fn SetAzimuth(&self, azimuth: i32) -> windows_core::Result<()>;
    fn Elevation(&self) -> windows_core::Result<i32>;
    fn SetElevation(&self, elevation: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDVBSLocator_Vtbl {
    pub const fn new<Identity: IDVBSLocator_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SignalPolarisation<Identity: IDVBSLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, polarisationval: *mut super::Polarisation) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator_Impl::SignalPolarisation(this) {
                    Ok(ok__) => {
                        polarisationval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSignalPolarisation<Identity: IDVBSLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, polarisationval: super::Polarisation) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator_Impl::SetSignalPolarisation(this, core::mem::transmute_copy(&polarisationval)).into()
            }
        }
        unsafe extern "system" fn WestPosition<Identity: IDVBSLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, westlongitude: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator_Impl::WestPosition(this) {
                    Ok(ok__) => {
                        westlongitude.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetWestPosition<Identity: IDVBSLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, westlongitude: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator_Impl::SetWestPosition(this, core::mem::transmute_copy(&westlongitude)).into()
            }
        }
        unsafe extern "system" fn OrbitalPosition<Identity: IDVBSLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, longitude: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator_Impl::OrbitalPosition(this) {
                    Ok(ok__) => {
                        longitude.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetOrbitalPosition<Identity: IDVBSLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, longitude: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator_Impl::SetOrbitalPosition(this, core::mem::transmute_copy(&longitude)).into()
            }
        }
        unsafe extern "system" fn Azimuth<Identity: IDVBSLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, azimuth: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator_Impl::Azimuth(this) {
                    Ok(ok__) => {
                        azimuth.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetAzimuth<Identity: IDVBSLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, azimuth: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator_Impl::SetAzimuth(this, core::mem::transmute_copy(&azimuth)).into()
            }
        }
        unsafe extern "system" fn Elevation<Identity: IDVBSLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, elevation: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator_Impl::Elevation(this) {
                    Ok(ok__) => {
                        elevation.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetElevation<Identity: IDVBSLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, elevation: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator_Impl::SetElevation(this, core::mem::transmute_copy(&elevation)).into()
            }
        }
        Self {
            base__: IDigitalLocator_Vtbl::new::<Identity, OFFSET>(),
            SignalPolarisation: SignalPolarisation::<Identity, OFFSET>,
            SetSignalPolarisation: SetSignalPolarisation::<Identity, OFFSET>,
            WestPosition: WestPosition::<Identity, OFFSET>,
            SetWestPosition: SetWestPosition::<Identity, OFFSET>,
            OrbitalPosition: OrbitalPosition::<Identity, OFFSET>,
            SetOrbitalPosition: SetOrbitalPosition::<Identity, OFFSET>,
            Azimuth: Azimuth::<Identity, OFFSET>,
            SetAzimuth: SetAzimuth::<Identity, OFFSET>,
            Elevation: Elevation::<Identity, OFFSET>,
            SetElevation: SetElevation::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVBSLocator as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ILocator as windows_core::Interface>::IID || iid == &<IDigitalLocator as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDVBSLocator {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDVBSLocator2, IDVBSLocator2_Vtbl, 0x6044634a_1733_4f99_b982_5fb12afce4f0);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDVBSLocator2 {
    type Target = IDVBSLocator;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDVBSLocator2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ILocator, IDigitalLocator, IDVBSLocator);
#[cfg(feature = "Win32_System_Com")]
impl IDVBSLocator2 {
    pub unsafe fn DiseqLNBSource(&self) -> windows_core::Result<super::LNB_Source> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DiseqLNBSource)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetDiseqLNBSource(&self, diseqlnbsourceval: super::LNB_Source) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDiseqLNBSource)(windows_core::Interface::as_raw(self), diseqlnbsourceval).ok() }
    }
    pub unsafe fn LocalOscillatorOverrideLow(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).LocalOscillatorOverrideLow)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetLocalOscillatorOverrideLow(&self, localoscillatoroverridelowval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetLocalOscillatorOverrideLow)(windows_core::Interface::as_raw(self), localoscillatoroverridelowval).ok() }
    }
    pub unsafe fn LocalOscillatorOverrideHigh(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).LocalOscillatorOverrideHigh)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetLocalOscillatorOverrideHigh(&self, localoscillatoroverridehighval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetLocalOscillatorOverrideHigh)(windows_core::Interface::as_raw(self), localoscillatoroverridehighval).ok() }
    }
    pub unsafe fn LocalLNBSwitchOverride(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).LocalLNBSwitchOverride)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetLocalLNBSwitchOverride(&self, locallnbswitchoverrideval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetLocalLNBSwitchOverride)(windows_core::Interface::as_raw(self), locallnbswitchoverrideval).ok() }
    }
    pub unsafe fn LocalSpectralInversionOverride(&self) -> windows_core::Result<super::SpectralInversion> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).LocalSpectralInversionOverride)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetLocalSpectralInversionOverride(&self, localspectralinversionoverrideval: super::SpectralInversion) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetLocalSpectralInversionOverride)(windows_core::Interface::as_raw(self), localspectralinversionoverrideval).ok() }
    }
    pub unsafe fn SignalRollOff(&self) -> windows_core::Result<super::RollOff> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SignalRollOff)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSignalRollOff(&self, rolloffval: super::RollOff) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSignalRollOff)(windows_core::Interface::as_raw(self), rolloffval).ok() }
    }
    pub unsafe fn SignalPilot(&self) -> windows_core::Result<super::Pilot> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SignalPilot)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSignalPilot(&self, pilotval: super::Pilot) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSignalPilot)(windows_core::Interface::as_raw(self), pilotval).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDVBSLocator2_Vtbl {
    pub base__: IDVBSLocator_Vtbl,
    pub DiseqLNBSource: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::LNB_Source) -> windows_core::HRESULT,
    pub SetDiseqLNBSource: unsafe extern "system" fn(*mut core::ffi::c_void, super::LNB_Source) -> windows_core::HRESULT,
    pub LocalOscillatorOverrideLow: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetLocalOscillatorOverrideLow: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub LocalOscillatorOverrideHigh: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetLocalOscillatorOverrideHigh: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub LocalLNBSwitchOverride: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetLocalLNBSwitchOverride: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub LocalSpectralInversionOverride: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::SpectralInversion) -> windows_core::HRESULT,
    pub SetLocalSpectralInversionOverride: unsafe extern "system" fn(*mut core::ffi::c_void, super::SpectralInversion) -> windows_core::HRESULT,
    pub SignalRollOff: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::RollOff) -> windows_core::HRESULT,
    pub SetSignalRollOff: unsafe extern "system" fn(*mut core::ffi::c_void, super::RollOff) -> windows_core::HRESULT,
    pub SignalPilot: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::Pilot) -> windows_core::HRESULT,
    pub SetSignalPilot: unsafe extern "system" fn(*mut core::ffi::c_void, super::Pilot) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDVBSLocator2_Impl: IDVBSLocator_Impl {
    fn DiseqLNBSource(&self) -> windows_core::Result<super::LNB_Source>;
    fn SetDiseqLNBSource(&self, diseqlnbsourceval: super::LNB_Source) -> windows_core::Result<()>;
    fn LocalOscillatorOverrideLow(&self) -> windows_core::Result<i32>;
    fn SetLocalOscillatorOverrideLow(&self, localoscillatoroverridelowval: i32) -> windows_core::Result<()>;
    fn LocalOscillatorOverrideHigh(&self) -> windows_core::Result<i32>;
    fn SetLocalOscillatorOverrideHigh(&self, localoscillatoroverridehighval: i32) -> windows_core::Result<()>;
    fn LocalLNBSwitchOverride(&self) -> windows_core::Result<i32>;
    fn SetLocalLNBSwitchOverride(&self, locallnbswitchoverrideval: i32) -> windows_core::Result<()>;
    fn LocalSpectralInversionOverride(&self) -> windows_core::Result<super::SpectralInversion>;
    fn SetLocalSpectralInversionOverride(&self, localspectralinversionoverrideval: super::SpectralInversion) -> windows_core::Result<()>;
    fn SignalRollOff(&self) -> windows_core::Result<super::RollOff>;
    fn SetSignalRollOff(&self, rolloffval: super::RollOff) -> windows_core::Result<()>;
    fn SignalPilot(&self) -> windows_core::Result<super::Pilot>;
    fn SetSignalPilot(&self, pilotval: super::Pilot) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDVBSLocator2_Vtbl {
    pub const fn new<Identity: IDVBSLocator2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn DiseqLNBSource<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, diseqlnbsourceval: *mut super::LNB_Source) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator2_Impl::DiseqLNBSource(this) {
                    Ok(ok__) => {
                        diseqlnbsourceval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDiseqLNBSource<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, diseqlnbsourceval: super::LNB_Source) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator2_Impl::SetDiseqLNBSource(this, core::mem::transmute_copy(&diseqlnbsourceval)).into()
            }
        }
        unsafe extern "system" fn LocalOscillatorOverrideLow<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, localoscillatoroverridelowval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator2_Impl::LocalOscillatorOverrideLow(this) {
                    Ok(ok__) => {
                        localoscillatoroverridelowval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetLocalOscillatorOverrideLow<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, localoscillatoroverridelowval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator2_Impl::SetLocalOscillatorOverrideLow(this, core::mem::transmute_copy(&localoscillatoroverridelowval)).into()
            }
        }
        unsafe extern "system" fn LocalOscillatorOverrideHigh<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, localoscillatoroverridehighval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator2_Impl::LocalOscillatorOverrideHigh(this) {
                    Ok(ok__) => {
                        localoscillatoroverridehighval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetLocalOscillatorOverrideHigh<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, localoscillatoroverridehighval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator2_Impl::SetLocalOscillatorOverrideHigh(this, core::mem::transmute_copy(&localoscillatoroverridehighval)).into()
            }
        }
        unsafe extern "system" fn LocalLNBSwitchOverride<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, locallnbswitchoverrideval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator2_Impl::LocalLNBSwitchOverride(this) {
                    Ok(ok__) => {
                        locallnbswitchoverrideval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetLocalLNBSwitchOverride<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, locallnbswitchoverrideval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator2_Impl::SetLocalLNBSwitchOverride(this, core::mem::transmute_copy(&locallnbswitchoverrideval)).into()
            }
        }
        unsafe extern "system" fn LocalSpectralInversionOverride<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, localspectralinversionoverrideval: *mut super::SpectralInversion) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator2_Impl::LocalSpectralInversionOverride(this) {
                    Ok(ok__) => {
                        localspectralinversionoverrideval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetLocalSpectralInversionOverride<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, localspectralinversionoverrideval: super::SpectralInversion) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator2_Impl::SetLocalSpectralInversionOverride(this, core::mem::transmute_copy(&localspectralinversionoverrideval)).into()
            }
        }
        unsafe extern "system" fn SignalRollOff<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rolloffval: *mut super::RollOff) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator2_Impl::SignalRollOff(this) {
                    Ok(ok__) => {
                        rolloffval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSignalRollOff<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rolloffval: super::RollOff) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator2_Impl::SetSignalRollOff(this, core::mem::transmute_copy(&rolloffval)).into()
            }
        }
        unsafe extern "system" fn SignalPilot<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pilotval: *mut super::Pilot) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSLocator2_Impl::SignalPilot(this) {
                    Ok(ok__) => {
                        pilotval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSignalPilot<Identity: IDVBSLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pilotval: super::Pilot) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSLocator2_Impl::SetSignalPilot(this, core::mem::transmute_copy(&pilotval)).into()
            }
        }
        Self {
            base__: IDVBSLocator_Vtbl::new::<Identity, OFFSET>(),
            DiseqLNBSource: DiseqLNBSource::<Identity, OFFSET>,
            SetDiseqLNBSource: SetDiseqLNBSource::<Identity, OFFSET>,
            LocalOscillatorOverrideLow: LocalOscillatorOverrideLow::<Identity, OFFSET>,
            SetLocalOscillatorOverrideLow: SetLocalOscillatorOverrideLow::<Identity, OFFSET>,
            LocalOscillatorOverrideHigh: LocalOscillatorOverrideHigh::<Identity, OFFSET>,
            SetLocalOscillatorOverrideHigh: SetLocalOscillatorOverrideHigh::<Identity, OFFSET>,
            LocalLNBSwitchOverride: LocalLNBSwitchOverride::<Identity, OFFSET>,
            SetLocalLNBSwitchOverride: SetLocalLNBSwitchOverride::<Identity, OFFSET>,
            LocalSpectralInversionOverride: LocalSpectralInversionOverride::<Identity, OFFSET>,
            SetLocalSpectralInversionOverride: SetLocalSpectralInversionOverride::<Identity, OFFSET>,
            SignalRollOff: SignalRollOff::<Identity, OFFSET>,
            SetSignalRollOff: SetSignalRollOff::<Identity, OFFSET>,
            SignalPilot: SignalPilot::<Identity, OFFSET>,
            SetSignalPilot: SetSignalPilot::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVBSLocator2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ILocator as windows_core::Interface>::IID || iid == &<IDigitalLocator as windows_core::Interface>::IID || iid == &<IDVBSLocator as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDVBSLocator2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDVBSTuningSpace, IDVBSTuningSpace_Vtbl, 0xcdf7be60_d954_42fd_a972_78971958e470);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDVBSTuningSpace {
    type Target = IDVBTuningSpace2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDVBSTuningSpace, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuningSpace, IDVBTuningSpace, IDVBTuningSpace2);
#[cfg(feature = "Win32_System_Com")]
impl IDVBSTuningSpace {
    pub unsafe fn LowOscillator(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).LowOscillator)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetLowOscillator(&self, lowoscillator: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetLowOscillator)(windows_core::Interface::as_raw(self), lowoscillator).ok() }
    }
    pub unsafe fn HighOscillator(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).HighOscillator)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetHighOscillator(&self, highoscillator: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetHighOscillator)(windows_core::Interface::as_raw(self), highoscillator).ok() }
    }
    pub unsafe fn LNBSwitch(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).LNBSwitch)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetLNBSwitch(&self, lnbswitch: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetLNBSwitch)(windows_core::Interface::as_raw(self), lnbswitch).ok() }
    }
    pub unsafe fn InputRange(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).InputRange)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetInputRange(&self, inputrange: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetInputRange)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(inputrange)).ok() }
    }
    pub unsafe fn SpectralInversion(&self) -> windows_core::Result<super::SpectralInversion> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SpectralInversion)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSpectralInversion(&self, spectralinversionval: super::SpectralInversion) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSpectralInversion)(windows_core::Interface::as_raw(self), spectralinversionval).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDVBSTuningSpace_Vtbl {
    pub base__: IDVBTuningSpace2_Vtbl,
    pub LowOscillator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetLowOscillator: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub HighOscillator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetHighOscillator: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub LNBSwitch: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetLNBSwitch: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub InputRange: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetInputRange: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SpectralInversion: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::SpectralInversion) -> windows_core::HRESULT,
    pub SetSpectralInversion: unsafe extern "system" fn(*mut core::ffi::c_void, super::SpectralInversion) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDVBSTuningSpace_Impl: IDVBTuningSpace2_Impl {
    fn LowOscillator(&self) -> windows_core::Result<i32>;
    fn SetLowOscillator(&self, lowoscillator: i32) -> windows_core::Result<()>;
    fn HighOscillator(&self) -> windows_core::Result<i32>;
    fn SetHighOscillator(&self, highoscillator: i32) -> windows_core::Result<()>;
    fn LNBSwitch(&self) -> windows_core::Result<i32>;
    fn SetLNBSwitch(&self, lnbswitch: i32) -> windows_core::Result<()>;
    fn InputRange(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetInputRange(&self, inputrange: &windows_core::BSTR) -> windows_core::Result<()>;
    fn SpectralInversion(&self) -> windows_core::Result<super::SpectralInversion>;
    fn SetSpectralInversion(&self, spectralinversionval: super::SpectralInversion) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDVBSTuningSpace_Vtbl {
    pub const fn new<Identity: IDVBSTuningSpace_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn LowOscillator<Identity: IDVBSTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lowoscillator: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSTuningSpace_Impl::LowOscillator(this) {
                    Ok(ok__) => {
                        lowoscillator.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetLowOscillator<Identity: IDVBSTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lowoscillator: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSTuningSpace_Impl::SetLowOscillator(this, core::mem::transmute_copy(&lowoscillator)).into()
            }
        }
        unsafe extern "system" fn HighOscillator<Identity: IDVBSTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, highoscillator: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSTuningSpace_Impl::HighOscillator(this) {
                    Ok(ok__) => {
                        highoscillator.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetHighOscillator<Identity: IDVBSTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, highoscillator: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSTuningSpace_Impl::SetHighOscillator(this, core::mem::transmute_copy(&highoscillator)).into()
            }
        }
        unsafe extern "system" fn LNBSwitch<Identity: IDVBSTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lnbswitch: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSTuningSpace_Impl::LNBSwitch(this) {
                    Ok(ok__) => {
                        lnbswitch.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetLNBSwitch<Identity: IDVBSTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lnbswitch: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSTuningSpace_Impl::SetLNBSwitch(this, core::mem::transmute_copy(&lnbswitch)).into()
            }
        }
        unsafe extern "system" fn InputRange<Identity: IDVBSTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, inputrange: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSTuningSpace_Impl::InputRange(this) {
                    Ok(ok__) => {
                        inputrange.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetInputRange<Identity: IDVBSTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, inputrange: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSTuningSpace_Impl::SetInputRange(this, core::mem::transmute(&inputrange)).into()
            }
        }
        unsafe extern "system" fn SpectralInversion<Identity: IDVBSTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, spectralinversionval: *mut super::SpectralInversion) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBSTuningSpace_Impl::SpectralInversion(this) {
                    Ok(ok__) => {
                        spectralinversionval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSpectralInversion<Identity: IDVBSTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, spectralinversionval: super::SpectralInversion) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBSTuningSpace_Impl::SetSpectralInversion(this, core::mem::transmute_copy(&spectralinversionval)).into()
            }
        }
        Self {
            base__: IDVBTuningSpace2_Vtbl::new::<Identity, OFFSET>(),
            LowOscillator: LowOscillator::<Identity, OFFSET>,
            SetLowOscillator: SetLowOscillator::<Identity, OFFSET>,
            HighOscillator: HighOscillator::<Identity, OFFSET>,
            SetHighOscillator: SetHighOscillator::<Identity, OFFSET>,
            LNBSwitch: LNBSwitch::<Identity, OFFSET>,
            SetLNBSwitch: SetLNBSwitch::<Identity, OFFSET>,
            InputRange: InputRange::<Identity, OFFSET>,
            SetInputRange: SetInputRange::<Identity, OFFSET>,
            SpectralInversion: SpectralInversion::<Identity, OFFSET>,
            SetSpectralInversion: SetSpectralInversion::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVBSTuningSpace as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuningSpace as windows_core::Interface>::IID || iid == &<IDVBTuningSpace as windows_core::Interface>::IID || iid == &<IDVBTuningSpace2 as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDVBSTuningSpace {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDVBTLocator, IDVBTLocator_Vtbl, 0x8664da16_dda2_42ac_926a_c18f9127c302);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDVBTLocator {
    type Target = IDigitalLocator;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDVBTLocator, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ILocator, IDigitalLocator);
#[cfg(feature = "Win32_System_Com")]
impl IDVBTLocator {
    pub unsafe fn Bandwidth(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Bandwidth)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetBandwidth(&self, bandwidthval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetBandwidth)(windows_core::Interface::as_raw(self), bandwidthval).ok() }
    }
    pub unsafe fn LPInnerFEC(&self) -> windows_core::Result<super::FECMethod> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).LPInnerFEC)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetLPInnerFEC(&self, fec: super::FECMethod) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetLPInnerFEC)(windows_core::Interface::as_raw(self), fec).ok() }
    }
    pub unsafe fn LPInnerFECRate(&self) -> windows_core::Result<super::BinaryConvolutionCodeRate> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).LPInnerFECRate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetLPInnerFECRate(&self, fec: super::BinaryConvolutionCodeRate) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetLPInnerFECRate)(windows_core::Interface::as_raw(self), fec).ok() }
    }
    pub unsafe fn HAlpha(&self) -> windows_core::Result<super::HierarchyAlpha> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).HAlpha)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetHAlpha(&self, alpha: super::HierarchyAlpha) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetHAlpha)(windows_core::Interface::as_raw(self), alpha).ok() }
    }
    pub unsafe fn Guard(&self) -> windows_core::Result<super::GuardInterval> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Guard)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetGuard(&self, gi: super::GuardInterval) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetGuard)(windows_core::Interface::as_raw(self), gi).ok() }
    }
    pub unsafe fn Mode(&self) -> windows_core::Result<super::TransmissionMode> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Mode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMode(&self, mode: super::TransmissionMode) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMode)(windows_core::Interface::as_raw(self), mode).ok() }
    }
    pub unsafe fn OtherFrequencyInUse(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).OtherFrequencyInUse)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetOtherFrequencyInUse(&self, otherfrequencyinuseval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetOtherFrequencyInUse)(windows_core::Interface::as_raw(self), otherfrequencyinuseval).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDVBTLocator_Vtbl {
    pub base__: IDigitalLocator_Vtbl,
    pub Bandwidth: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetBandwidth: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub LPInnerFEC: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::FECMethod) -> windows_core::HRESULT,
    pub SetLPInnerFEC: unsafe extern "system" fn(*mut core::ffi::c_void, super::FECMethod) -> windows_core::HRESULT,
    pub LPInnerFECRate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::BinaryConvolutionCodeRate) -> windows_core::HRESULT,
    pub SetLPInnerFECRate: unsafe extern "system" fn(*mut core::ffi::c_void, super::BinaryConvolutionCodeRate) -> windows_core::HRESULT,
    pub HAlpha: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::HierarchyAlpha) -> windows_core::HRESULT,
    pub SetHAlpha: unsafe extern "system" fn(*mut core::ffi::c_void, super::HierarchyAlpha) -> windows_core::HRESULT,
    pub Guard: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::GuardInterval) -> windows_core::HRESULT,
    pub SetGuard: unsafe extern "system" fn(*mut core::ffi::c_void, super::GuardInterval) -> windows_core::HRESULT,
    pub Mode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::TransmissionMode) -> windows_core::HRESULT,
    pub SetMode: unsafe extern "system" fn(*mut core::ffi::c_void, super::TransmissionMode) -> windows_core::HRESULT,
    pub OtherFrequencyInUse: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetOtherFrequencyInUse: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDVBTLocator_Impl: IDigitalLocator_Impl {
    fn Bandwidth(&self) -> windows_core::Result<i32>;
    fn SetBandwidth(&self, bandwidthval: i32) -> windows_core::Result<()>;
    fn LPInnerFEC(&self) -> windows_core::Result<super::FECMethod>;
    fn SetLPInnerFEC(&self, fec: super::FECMethod) -> windows_core::Result<()>;
    fn LPInnerFECRate(&self) -> windows_core::Result<super::BinaryConvolutionCodeRate>;
    fn SetLPInnerFECRate(&self, fec: super::BinaryConvolutionCodeRate) -> windows_core::Result<()>;
    fn HAlpha(&self) -> windows_core::Result<super::HierarchyAlpha>;
    fn SetHAlpha(&self, alpha: super::HierarchyAlpha) -> windows_core::Result<()>;
    fn Guard(&self) -> windows_core::Result<super::GuardInterval>;
    fn SetGuard(&self, gi: super::GuardInterval) -> windows_core::Result<()>;
    fn Mode(&self) -> windows_core::Result<super::TransmissionMode>;
    fn SetMode(&self, mode: super::TransmissionMode) -> windows_core::Result<()>;
    fn OtherFrequencyInUse(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetOtherFrequencyInUse(&self, otherfrequencyinuseval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDVBTLocator_Vtbl {
    pub const fn new<Identity: IDVBTLocator_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Bandwidth<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bandwidthval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTLocator_Impl::Bandwidth(this) {
                    Ok(ok__) => {
                        bandwidthval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetBandwidth<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bandwidthval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTLocator_Impl::SetBandwidth(this, core::mem::transmute_copy(&bandwidthval)).into()
            }
        }
        unsafe extern "system" fn LPInnerFEC<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: *mut super::FECMethod) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTLocator_Impl::LPInnerFEC(this) {
                    Ok(ok__) => {
                        fec.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetLPInnerFEC<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: super::FECMethod) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTLocator_Impl::SetLPInnerFEC(this, core::mem::transmute_copy(&fec)).into()
            }
        }
        unsafe extern "system" fn LPInnerFECRate<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: *mut super::BinaryConvolutionCodeRate) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTLocator_Impl::LPInnerFECRate(this) {
                    Ok(ok__) => {
                        fec.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetLPInnerFECRate<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: super::BinaryConvolutionCodeRate) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTLocator_Impl::SetLPInnerFECRate(this, core::mem::transmute_copy(&fec)).into()
            }
        }
        unsafe extern "system" fn HAlpha<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, alpha: *mut super::HierarchyAlpha) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTLocator_Impl::HAlpha(this) {
                    Ok(ok__) => {
                        alpha.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetHAlpha<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, alpha: super::HierarchyAlpha) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTLocator_Impl::SetHAlpha(this, core::mem::transmute_copy(&alpha)).into()
            }
        }
        unsafe extern "system" fn Guard<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, gi: *mut super::GuardInterval) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTLocator_Impl::Guard(this) {
                    Ok(ok__) => {
                        gi.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetGuard<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, gi: super::GuardInterval) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTLocator_Impl::SetGuard(this, core::mem::transmute_copy(&gi)).into()
            }
        }
        unsafe extern "system" fn Mode<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mode: *mut super::TransmissionMode) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTLocator_Impl::Mode(this) {
                    Ok(ok__) => {
                        mode.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMode<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mode: super::TransmissionMode) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTLocator_Impl::SetMode(this, core::mem::transmute_copy(&mode)).into()
            }
        }
        unsafe extern "system" fn OtherFrequencyInUse<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, otherfrequencyinuseval: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTLocator_Impl::OtherFrequencyInUse(this) {
                    Ok(ok__) => {
                        otherfrequencyinuseval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetOtherFrequencyInUse<Identity: IDVBTLocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, otherfrequencyinuseval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTLocator_Impl::SetOtherFrequencyInUse(this, core::mem::transmute_copy(&otherfrequencyinuseval)).into()
            }
        }
        Self {
            base__: IDigitalLocator_Vtbl::new::<Identity, OFFSET>(),
            Bandwidth: Bandwidth::<Identity, OFFSET>,
            SetBandwidth: SetBandwidth::<Identity, OFFSET>,
            LPInnerFEC: LPInnerFEC::<Identity, OFFSET>,
            SetLPInnerFEC: SetLPInnerFEC::<Identity, OFFSET>,
            LPInnerFECRate: LPInnerFECRate::<Identity, OFFSET>,
            SetLPInnerFECRate: SetLPInnerFECRate::<Identity, OFFSET>,
            HAlpha: HAlpha::<Identity, OFFSET>,
            SetHAlpha: SetHAlpha::<Identity, OFFSET>,
            Guard: Guard::<Identity, OFFSET>,
            SetGuard: SetGuard::<Identity, OFFSET>,
            Mode: Mode::<Identity, OFFSET>,
            SetMode: SetMode::<Identity, OFFSET>,
            OtherFrequencyInUse: OtherFrequencyInUse::<Identity, OFFSET>,
            SetOtherFrequencyInUse: SetOtherFrequencyInUse::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVBTLocator as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ILocator as windows_core::Interface>::IID || iid == &<IDigitalLocator as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDVBTLocator {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDVBTLocator2, IDVBTLocator2_Vtbl, 0x448a2edf_ae95_4b43_a3cc_747843c453d4);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDVBTLocator2 {
    type Target = IDVBTLocator;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDVBTLocator2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ILocator, IDigitalLocator, IDVBTLocator);
#[cfg(feature = "Win32_System_Com")]
impl IDVBTLocator2 {
    pub unsafe fn PhysicalLayerPipeId(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).PhysicalLayerPipeId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetPhysicalLayerPipeId(&self, physicallayerpipeidval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetPhysicalLayerPipeId)(windows_core::Interface::as_raw(self), physicallayerpipeidval).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDVBTLocator2_Vtbl {
    pub base__: IDVBTLocator_Vtbl,
    pub PhysicalLayerPipeId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetPhysicalLayerPipeId: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDVBTLocator2_Impl: IDVBTLocator_Impl {
    fn PhysicalLayerPipeId(&self) -> windows_core::Result<i32>;
    fn SetPhysicalLayerPipeId(&self, physicallayerpipeidval: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDVBTLocator2_Vtbl {
    pub const fn new<Identity: IDVBTLocator2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn PhysicalLayerPipeId<Identity: IDVBTLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, physicallayerpipeidval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTLocator2_Impl::PhysicalLayerPipeId(this) {
                    Ok(ok__) => {
                        physicallayerpipeidval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetPhysicalLayerPipeId<Identity: IDVBTLocator2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, physicallayerpipeidval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTLocator2_Impl::SetPhysicalLayerPipeId(this, core::mem::transmute_copy(&physicallayerpipeidval)).into()
            }
        }
        Self {
            base__: IDVBTLocator_Vtbl::new::<Identity, OFFSET>(),
            PhysicalLayerPipeId: PhysicalLayerPipeId::<Identity, OFFSET>,
            SetPhysicalLayerPipeId: SetPhysicalLayerPipeId::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVBTLocator2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ILocator as windows_core::Interface>::IID || iid == &<IDigitalLocator as windows_core::Interface>::IID || iid == &<IDVBTLocator as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDVBTLocator2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDVBTuneRequest, IDVBTuneRequest_Vtbl, 0x0d6f567e_a636_42bb_83ba_ce4c1704afa2);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDVBTuneRequest {
    type Target = ITuneRequest;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDVBTuneRequest, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuneRequest);
#[cfg(feature = "Win32_System_Com")]
impl IDVBTuneRequest {
    pub unsafe fn ONID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ONID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetONID(&self, onid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetONID)(windows_core::Interface::as_raw(self), onid).ok() }
    }
    pub unsafe fn TSID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TSID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetTSID(&self, tsid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetTSID)(windows_core::Interface::as_raw(self), tsid).ok() }
    }
    pub unsafe fn SID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSID(&self, sid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSID)(windows_core::Interface::as_raw(self), sid).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDVBTuneRequest_Vtbl {
    pub base__: ITuneRequest_Vtbl,
    pub ONID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetONID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub TSID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetTSID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub SID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetSID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDVBTuneRequest_Impl: ITuneRequest_Impl {
    fn ONID(&self) -> windows_core::Result<i32>;
    fn SetONID(&self, onid: i32) -> windows_core::Result<()>;
    fn TSID(&self) -> windows_core::Result<i32>;
    fn SetTSID(&self, tsid: i32) -> windows_core::Result<()>;
    fn SID(&self) -> windows_core::Result<i32>;
    fn SetSID(&self, sid: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDVBTuneRequest_Vtbl {
    pub const fn new<Identity: IDVBTuneRequest_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn ONID<Identity: IDVBTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, onid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTuneRequest_Impl::ONID(this) {
                    Ok(ok__) => {
                        onid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetONID<Identity: IDVBTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, onid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTuneRequest_Impl::SetONID(this, core::mem::transmute_copy(&onid)).into()
            }
        }
        unsafe extern "system" fn TSID<Identity: IDVBTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tsid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTuneRequest_Impl::TSID(this) {
                    Ok(ok__) => {
                        tsid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetTSID<Identity: IDVBTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tsid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTuneRequest_Impl::SetTSID(this, core::mem::transmute_copy(&tsid)).into()
            }
        }
        unsafe extern "system" fn SID<Identity: IDVBTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, sid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTuneRequest_Impl::SID(this) {
                    Ok(ok__) => {
                        sid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSID<Identity: IDVBTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, sid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTuneRequest_Impl::SetSID(this, core::mem::transmute_copy(&sid)).into()
            }
        }
        Self {
            base__: ITuneRequest_Vtbl::new::<Identity, OFFSET>(),
            ONID: ONID::<Identity, OFFSET>,
            SetONID: SetONID::<Identity, OFFSET>,
            TSID: TSID::<Identity, OFFSET>,
            SetTSID: SetTSID::<Identity, OFFSET>,
            SID: SID::<Identity, OFFSET>,
            SetSID: SetSID::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVBTuneRequest as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuneRequest as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDVBTuneRequest {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDVBTuningSpace, IDVBTuningSpace_Vtbl, 0xada0b268_3b19_4e5b_acc4_49f852be13ba);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDVBTuningSpace {
    type Target = ITuningSpace;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDVBTuningSpace, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuningSpace);
#[cfg(feature = "Win32_System_Com")]
impl IDVBTuningSpace {
    pub unsafe fn SystemType(&self) -> windows_core::Result<super::DVBSystemType> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SystemType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSystemType(&self, systype: super::DVBSystemType) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSystemType)(windows_core::Interface::as_raw(self), systype).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDVBTuningSpace_Vtbl {
    pub base__: ITuningSpace_Vtbl,
    pub SystemType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::DVBSystemType) -> windows_core::HRESULT,
    pub SetSystemType: unsafe extern "system" fn(*mut core::ffi::c_void, super::DVBSystemType) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDVBTuningSpace_Impl: ITuningSpace_Impl {
    fn SystemType(&self) -> windows_core::Result<super::DVBSystemType>;
    fn SetSystemType(&self, systype: super::DVBSystemType) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDVBTuningSpace_Vtbl {
    pub const fn new<Identity: IDVBTuningSpace_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SystemType<Identity: IDVBTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, systype: *mut super::DVBSystemType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTuningSpace_Impl::SystemType(this) {
                    Ok(ok__) => {
                        systype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSystemType<Identity: IDVBTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, systype: super::DVBSystemType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTuningSpace_Impl::SetSystemType(this, core::mem::transmute_copy(&systype)).into()
            }
        }
        Self {
            base__: ITuningSpace_Vtbl::new::<Identity, OFFSET>(),
            SystemType: SystemType::<Identity, OFFSET>,
            SetSystemType: SetSystemType::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVBTuningSpace as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuningSpace as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDVBTuningSpace {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDVBTuningSpace2, IDVBTuningSpace2_Vtbl, 0x843188b4_ce62_43db_966b_8145a094e040);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDVBTuningSpace2 {
    type Target = IDVBTuningSpace;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDVBTuningSpace2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuningSpace, IDVBTuningSpace);
#[cfg(feature = "Win32_System_Com")]
impl IDVBTuningSpace2 {
    pub unsafe fn NetworkID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).NetworkID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetNetworkID(&self, networkid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetNetworkID)(windows_core::Interface::as_raw(self), networkid).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDVBTuningSpace2_Vtbl {
    pub base__: IDVBTuningSpace_Vtbl,
    pub NetworkID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetNetworkID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDVBTuningSpace2_Impl: IDVBTuningSpace_Impl {
    fn NetworkID(&self) -> windows_core::Result<i32>;
    fn SetNetworkID(&self, networkid: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDVBTuningSpace2_Vtbl {
    pub const fn new<Identity: IDVBTuningSpace2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn NetworkID<Identity: IDVBTuningSpace2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, networkid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVBTuningSpace2_Impl::NetworkID(this) {
                    Ok(ok__) => {
                        networkid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetNetworkID<Identity: IDVBTuningSpace2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, networkid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVBTuningSpace2_Impl::SetNetworkID(this, core::mem::transmute_copy(&networkid)).into()
            }
        }
        Self {
            base__: IDVBTuningSpace_Vtbl::new::<Identity, OFFSET>(),
            NetworkID: NetworkID::<Identity, OFFSET>,
            SetNetworkID: SetNetworkID::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVBTuningSpace2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuningSpace as windows_core::Interface>::IID || iid == &<IDVBTuningSpace as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDVBTuningSpace2 {}
windows_core::imp::define_interface!(IDVB_BAT, IDVB_BAT_Vtbl, 0xece9bb0c_43b6_4558_a0ec_1812c34cd6ca);
windows_core::imp::interface_hierarchy!(IDVB_BAT, windows_core::IUnknown);
impl IDVB_BAT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetBouquetId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetBouquetId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32, ppdescriptor: *const Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordTransportStreamId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordTransportStreamId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordOriginalNetworkId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordOriginalNetworkId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForNextTable)(windows_core::Interface::as_raw(self), hnexttableavailable).ok() }
    }
    pub unsafe fn GetNextTable(&self) -> windows_core::Result<IDVB_BAT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNextTable)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForWhenCurrent)(windows_core::Interface::as_raw(self), hnexttableiscurrent).ok() }
    }
    pub unsafe fn ConvertNextToCurrent(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ConvertNextToCurrent)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDVB_BAT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetBouquetId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *const *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordTransportStreamId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordOriginalNetworkId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub GetNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForWhenCurrent: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub ConvertNextToCurrent: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDVB_BAT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetBouquetId(&self) -> windows_core::Result<u16>;
    fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32, ppdescriptor: *const Option<IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordTransportStreamId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordOriginalNetworkId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn GetNextTable(&self) -> windows_core::Result<IDVB_BAT>;
    fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn ConvertNextToCurrent(&self) -> windows_core::Result<()>;
}
impl IDVB_BAT_Vtbl {
    pub const fn new<Identity: IDVB_BAT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_BAT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_BAT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetBouquetId<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_BAT_Impl::GetBouquetId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_BAT_Impl::GetCountOfTableDescriptors(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *const *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_BAT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_BAT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_BAT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordTransportStreamId<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_BAT_Impl::GetRecordTransportStreamId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordOriginalNetworkId<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_BAT_Impl::GetRecordOriginalNetworkId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_BAT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_BAT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_BAT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn RegisterForNextTable<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_BAT_Impl::RegisterForNextTable(this, core::mem::transmute_copy(&hnexttableavailable)).into()
            }
        }
        unsafe extern "system" fn GetNextTable<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppbat: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_BAT_Impl::GetNextTable(this) {
                    Ok(ok__) => {
                        ppbat.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RegisterForWhenCurrent<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_BAT_Impl::RegisterForWhenCurrent(this, core::mem::transmute_copy(&hnexttableiscurrent)).into()
            }
        }
        unsafe extern "system" fn ConvertNextToCurrent<Identity: IDVB_BAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_BAT_Impl::ConvertNextToCurrent(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetBouquetId: GetBouquetId::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordTransportStreamId: GetRecordTransportStreamId::<Identity, OFFSET>,
            GetRecordOriginalNetworkId: GetRecordOriginalNetworkId::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            RegisterForNextTable: RegisterForNextTable::<Identity, OFFSET>,
            GetNextTable: GetNextTable::<Identity, OFFSET>,
            RegisterForWhenCurrent: RegisterForWhenCurrent::<Identity, OFFSET>,
            ConvertNextToCurrent: ConvertNextToCurrent::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVB_BAT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDVB_BAT {}
windows_core::imp::define_interface!(IDVB_DIT, IDVB_DIT_Vtbl, 0x91bffdf9_9432_410f_86ef_1c228ed0ad70);
windows_core::imp::interface_hierarchy!(IDVB_DIT, windows_core::IUnknown);
impl IDVB_DIT {
    pub unsafe fn Initialize<P0>(&self, psectionlist: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi()).ok() }
    }
    pub unsafe fn GetTransitionFlag(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTransitionFlag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDVB_DIT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTransitionFlag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
}
pub trait IDVB_DIT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>) -> windows_core::Result<()>;
    fn GetTransitionFlag(&self) -> windows_core::Result<windows_core::BOOL>;
}
impl IDVB_DIT_Vtbl {
    pub const fn new<Identity: IDVB_DIT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IDVB_DIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_DIT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist)).into()
            }
        }
        unsafe extern "system" fn GetTransitionFlag<Identity: IDVB_DIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_DIT_Impl::GetTransitionFlag(this) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetTransitionFlag: GetTransitionFlag::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVB_DIT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDVB_DIT {}
windows_core::imp::define_interface!(IDVB_EIT, IDVB_EIT_Vtbl, 0x442db029_02cb_4495_8b92_1c13375bce99);
windows_core::imp::interface_hierarchy!(IDVB_EIT, windows_core::IUnknown);
impl IDVB_EIT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetServiceId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTransportStreamId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTransportStreamId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOriginalNetworkId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOriginalNetworkId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSegmentLastSectionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSegmentLastSectionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLastTableId(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLastTableId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordEventId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordEventId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordStartTime(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_DATE_AND_TIME> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordStartTime)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDuration(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_TIME> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDuration)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordRunningStatus(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordRunningStatus)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordFreeCAMode(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordFreeCAMode)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForNextTable)(windows_core::Interface::as_raw(self), hnexttableavailable).ok() }
    }
    pub unsafe fn GetNextTable(&self) -> windows_core::Result<IDVB_EIT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNextTable)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForWhenCurrent)(windows_core::Interface::as_raw(self), hnexttableiscurrent).ok() }
    }
    pub unsafe fn ConvertNextToCurrent(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ConvertNextToCurrent)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn GetVersionHash(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionHash)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDVB_EIT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetTransportStreamId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetOriginalNetworkId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetSegmentLastSectionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLastTableId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordEventId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordStartTime: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT,
    pub GetRecordDuration: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut MPEG_TIME) -> windows_core::HRESULT,
    pub GetRecordRunningStatus: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordFreeCAMode: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub GetNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForWhenCurrent: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub ConvertNextToCurrent: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionHash: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
pub trait IDVB_EIT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetServiceId(&self) -> windows_core::Result<u16>;
    fn GetTransportStreamId(&self) -> windows_core::Result<u16>;
    fn GetOriginalNetworkId(&self) -> windows_core::Result<u16>;
    fn GetSegmentLastSectionNumber(&self) -> windows_core::Result<u8>;
    fn GetLastTableId(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordEventId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordStartTime(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_DATE_AND_TIME>;
    fn GetRecordDuration(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_TIME>;
    fn GetRecordRunningStatus(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordFreeCAMode(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn GetNextTable(&self) -> windows_core::Result<IDVB_EIT>;
    fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn ConvertNextToCurrent(&self) -> windows_core::Result<()>;
    fn GetVersionHash(&self) -> windows_core::Result<u32>;
}
impl IDVB_EIT_Vtbl {
    pub const fn new<Identity: IDVB_EIT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_EIT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceId<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetServiceId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTransportStreamId<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetTransportStreamId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOriginalNetworkId<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetOriginalNetworkId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSegmentLastSectionNumber<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetSegmentLastSectionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLastTableId<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetLastTableId(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordEventId<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetRecordEventId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordStartTime<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pmdtval: *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetRecordStartTime(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pmdtval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDuration<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pmdval: *mut MPEG_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetRecordDuration(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pmdval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordRunningStatus<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetRecordRunningStatus(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordFreeCAMode<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetRecordFreeCAMode(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_EIT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn RegisterForNextTable<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_EIT_Impl::RegisterForNextTable(this, core::mem::transmute_copy(&hnexttableavailable)).into()
            }
        }
        unsafe extern "system" fn GetNextTable<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppeit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetNextTable(this) {
                    Ok(ok__) => {
                        ppeit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RegisterForWhenCurrent<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_EIT_Impl::RegisterForWhenCurrent(this, core::mem::transmute_copy(&hnexttableiscurrent)).into()
            }
        }
        unsafe extern "system" fn ConvertNextToCurrent<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_EIT_Impl::ConvertNextToCurrent(this).into()
            }
        }
        unsafe extern "system" fn GetVersionHash<Identity: IDVB_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwversionhash: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT_Impl::GetVersionHash(this) {
                    Ok(ok__) => {
                        pdwversionhash.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetServiceId: GetServiceId::<Identity, OFFSET>,
            GetTransportStreamId: GetTransportStreamId::<Identity, OFFSET>,
            GetOriginalNetworkId: GetOriginalNetworkId::<Identity, OFFSET>,
            GetSegmentLastSectionNumber: GetSegmentLastSectionNumber::<Identity, OFFSET>,
            GetLastTableId: GetLastTableId::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordEventId: GetRecordEventId::<Identity, OFFSET>,
            GetRecordStartTime: GetRecordStartTime::<Identity, OFFSET>,
            GetRecordDuration: GetRecordDuration::<Identity, OFFSET>,
            GetRecordRunningStatus: GetRecordRunningStatus::<Identity, OFFSET>,
            GetRecordFreeCAMode: GetRecordFreeCAMode::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            RegisterForNextTable: RegisterForNextTable::<Identity, OFFSET>,
            GetNextTable: GetNextTable::<Identity, OFFSET>,
            RegisterForWhenCurrent: RegisterForWhenCurrent::<Identity, OFFSET>,
            ConvertNextToCurrent: ConvertNextToCurrent::<Identity, OFFSET>,
            GetVersionHash: GetVersionHash::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVB_EIT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDVB_EIT {}
windows_core::imp::define_interface!(IDVB_EIT2, IDVB_EIT2_Vtbl, 0x61a389e0_9b9e_4ba0_aeea_5ddd159820ea);
impl core::ops::Deref for IDVB_EIT2 {
    type Target = IDVB_EIT;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IDVB_EIT2, windows_core::IUnknown, IDVB_EIT);
impl IDVB_EIT2 {
    pub unsafe fn GetSegmentInfo(&self, pbtid: *mut u8, pbsegment: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetSegmentInfo)(windows_core::Interface::as_raw(self), pbtid as _, pbsegment as _).ok() }
    }
    pub unsafe fn GetRecordSection(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordSection)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDVB_EIT2_Vtbl {
    pub base__: IDVB_EIT_Vtbl,
    pub GetSegmentInfo: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordSection: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
}
pub trait IDVB_EIT2_Impl: IDVB_EIT_Impl {
    fn GetSegmentInfo(&self, pbtid: *mut u8, pbsegment: *mut u8) -> windows_core::Result<()>;
    fn GetRecordSection(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
}
impl IDVB_EIT2_Vtbl {
    pub const fn new<Identity: IDVB_EIT2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetSegmentInfo<Identity: IDVB_EIT2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbtid: *mut u8, pbsegment: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_EIT2_Impl::GetSegmentInfo(this, core::mem::transmute_copy(&pbtid), core::mem::transmute_copy(&pbsegment)).into()
            }
        }
        unsafe extern "system" fn GetRecordSection<Identity: IDVB_EIT2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_EIT2_Impl::GetRecordSection(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IDVB_EIT_Vtbl::new::<Identity, OFFSET>(),
            GetSegmentInfo: GetSegmentInfo::<Identity, OFFSET>,
            GetRecordSection: GetRecordSection::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVB_EIT2 as windows_core::Interface>::IID || iid == &<IDVB_EIT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDVB_EIT2 {}
windows_core::imp::define_interface!(IDVB_NIT, IDVB_NIT_Vtbl, 0xc64935f4_29e4_4e22_911a_63f7f55cb097);
windows_core::imp::interface_hierarchy!(IDVB_NIT, windows_core::IUnknown);
impl IDVB_NIT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetNetworkId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNetworkId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordTransportStreamId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordTransportStreamId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordOriginalNetworkId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordOriginalNetworkId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForNextTable)(windows_core::Interface::as_raw(self), hnexttableavailable).ok() }
    }
    pub unsafe fn GetNextTable(&self) -> windows_core::Result<IDVB_NIT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNextTable)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForWhenCurrent)(windows_core::Interface::as_raw(self), hnexttableiscurrent).ok() }
    }
    pub unsafe fn ConvertNextToCurrent(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ConvertNextToCurrent)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn GetVersionHash(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionHash)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDVB_NIT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetNetworkId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordTransportStreamId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordOriginalNetworkId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub GetNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForWhenCurrent: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub ConvertNextToCurrent: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionHash: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
pub trait IDVB_NIT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetNetworkId(&self) -> windows_core::Result<u16>;
    fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordTransportStreamId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordOriginalNetworkId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn GetNextTable(&self) -> windows_core::Result<IDVB_NIT>;
    fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn ConvertNextToCurrent(&self) -> windows_core::Result<()>;
    fn GetVersionHash(&self) -> windows_core::Result<u32>;
}
impl IDVB_NIT_Vtbl {
    pub const fn new<Identity: IDVB_NIT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_NIT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_NIT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetNetworkId<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_NIT_Impl::GetNetworkId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_NIT_Impl::GetCountOfTableDescriptors(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_NIT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_NIT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_NIT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordTransportStreamId<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_NIT_Impl::GetRecordTransportStreamId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordOriginalNetworkId<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_NIT_Impl::GetRecordOriginalNetworkId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_NIT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_NIT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_NIT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn RegisterForNextTable<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_NIT_Impl::RegisterForNextTable(this, core::mem::transmute_copy(&hnexttableavailable)).into()
            }
        }
        unsafe extern "system" fn GetNextTable<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppnit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_NIT_Impl::GetNextTable(this) {
                    Ok(ok__) => {
                        ppnit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RegisterForWhenCurrent<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_NIT_Impl::RegisterForWhenCurrent(this, core::mem::transmute_copy(&hnexttableiscurrent)).into()
            }
        }
        unsafe extern "system" fn ConvertNextToCurrent<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_NIT_Impl::ConvertNextToCurrent(this).into()
            }
        }
        unsafe extern "system" fn GetVersionHash<Identity: IDVB_NIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwversionhash: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_NIT_Impl::GetVersionHash(this) {
                    Ok(ok__) => {
                        pdwversionhash.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetNetworkId: GetNetworkId::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordTransportStreamId: GetRecordTransportStreamId::<Identity, OFFSET>,
            GetRecordOriginalNetworkId: GetRecordOriginalNetworkId::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            RegisterForNextTable: RegisterForNextTable::<Identity, OFFSET>,
            GetNextTable: GetNextTable::<Identity, OFFSET>,
            RegisterForWhenCurrent: RegisterForWhenCurrent::<Identity, OFFSET>,
            ConvertNextToCurrent: ConvertNextToCurrent::<Identity, OFFSET>,
            GetVersionHash: GetVersionHash::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVB_NIT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDVB_NIT {}
windows_core::imp::define_interface!(IDVB_RST, IDVB_RST_Vtbl, 0xf47dcd04_1e23_4fb7_9f96_b40eead10b2b);
windows_core::imp::interface_hierarchy!(IDVB_RST, windows_core::IUnknown);
impl IDVB_RST {
    pub unsafe fn Initialize<P0>(&self, psectionlist: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi()).ok() }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordTransportStreamId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordTransportStreamId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordOriginalNetworkId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordOriginalNetworkId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordServiceId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordServiceId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordEventId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordEventId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordRunningStatus(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordRunningStatus)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDVB_RST_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordTransportStreamId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordOriginalNetworkId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordEventId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordRunningStatus: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
}
pub trait IDVB_RST_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>) -> windows_core::Result<()>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordTransportStreamId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordOriginalNetworkId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordServiceId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordEventId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordRunningStatus(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
}
impl IDVB_RST_Vtbl {
    pub const fn new<Identity: IDVB_RST_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IDVB_RST_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_RST_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist)).into()
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDVB_RST_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_RST_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordTransportStreamId<Identity: IDVB_RST_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_RST_Impl::GetRecordTransportStreamId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordOriginalNetworkId<Identity: IDVB_RST_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_RST_Impl::GetRecordOriginalNetworkId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordServiceId<Identity: IDVB_RST_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_RST_Impl::GetRecordServiceId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordEventId<Identity: IDVB_RST_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_RST_Impl::GetRecordEventId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordRunningStatus<Identity: IDVB_RST_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_RST_Impl::GetRecordRunningStatus(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordTransportStreamId: GetRecordTransportStreamId::<Identity, OFFSET>,
            GetRecordOriginalNetworkId: GetRecordOriginalNetworkId::<Identity, OFFSET>,
            GetRecordServiceId: GetRecordServiceId::<Identity, OFFSET>,
            GetRecordEventId: GetRecordEventId::<Identity, OFFSET>,
            GetRecordRunningStatus: GetRecordRunningStatus::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVB_RST as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDVB_RST {}
windows_core::imp::define_interface!(IDVB_SDT, IDVB_SDT_Vtbl, 0x02cad8d3_fe43_48e2_90bd_450ed9a8a5fd);
windows_core::imp::interface_hierarchy!(IDVB_SDT, windows_core::IUnknown);
impl IDVB_SDT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTransportStreamId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTransportStreamId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOriginalNetworkId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOriginalNetworkId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordServiceId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordServiceId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordEITScheduleFlag(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordEITScheduleFlag)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordEITPresentFollowingFlag(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordEITPresentFollowingFlag)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordRunningStatus(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordRunningStatus)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordFreeCAMode(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordFreeCAMode)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForNextTable)(windows_core::Interface::as_raw(self), hnexttableavailable).ok() }
    }
    pub unsafe fn GetNextTable(&self) -> windows_core::Result<IDVB_SDT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNextTable)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForWhenCurrent)(windows_core::Interface::as_raw(self), hnexttableiscurrent).ok() }
    }
    pub unsafe fn ConvertNextToCurrent(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ConvertNextToCurrent)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn GetVersionHash(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionHash)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDVB_SDT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTransportStreamId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetOriginalNetworkId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordEITScheduleFlag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetRecordEITPresentFollowingFlag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetRecordRunningStatus: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordFreeCAMode: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub GetNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForWhenCurrent: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub ConvertNextToCurrent: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionHash: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
pub trait IDVB_SDT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetTransportStreamId(&self) -> windows_core::Result<u16>;
    fn GetOriginalNetworkId(&self) -> windows_core::Result<u16>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordServiceId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordEITScheduleFlag(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL>;
    fn GetRecordEITPresentFollowingFlag(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL>;
    fn GetRecordRunningStatus(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordFreeCAMode(&self, dwrecordindex: u32) -> windows_core::Result<windows_core::BOOL>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn GetNextTable(&self) -> windows_core::Result<IDVB_SDT>;
    fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn ConvertNextToCurrent(&self) -> windows_core::Result<()>;
    fn GetVersionHash(&self) -> windows_core::Result<u32>;
}
impl IDVB_SDT_Vtbl {
    pub const fn new<Identity: IDVB_SDT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_SDT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTransportStreamId<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetTransportStreamId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOriginalNetworkId<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetOriginalNetworkId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordServiceId<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetRecordServiceId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordEITScheduleFlag<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetRecordEITScheduleFlag(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordEITPresentFollowingFlag<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetRecordEITPresentFollowingFlag(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordRunningStatus<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetRecordRunningStatus(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordFreeCAMode<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetRecordFreeCAMode(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_SDT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn RegisterForNextTable<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_SDT_Impl::RegisterForNextTable(this, core::mem::transmute_copy(&hnexttableavailable)).into()
            }
        }
        unsafe extern "system" fn GetNextTable<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppsdt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetNextTable(this) {
                    Ok(ok__) => {
                        ppsdt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RegisterForWhenCurrent<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_SDT_Impl::RegisterForWhenCurrent(this, core::mem::transmute_copy(&hnexttableiscurrent)).into()
            }
        }
        unsafe extern "system" fn ConvertNextToCurrent<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_SDT_Impl::ConvertNextToCurrent(this).into()
            }
        }
        unsafe extern "system" fn GetVersionHash<Identity: IDVB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwversionhash: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SDT_Impl::GetVersionHash(this) {
                    Ok(ok__) => {
                        pdwversionhash.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetTransportStreamId: GetTransportStreamId::<Identity, OFFSET>,
            GetOriginalNetworkId: GetOriginalNetworkId::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordServiceId: GetRecordServiceId::<Identity, OFFSET>,
            GetRecordEITScheduleFlag: GetRecordEITScheduleFlag::<Identity, OFFSET>,
            GetRecordEITPresentFollowingFlag: GetRecordEITPresentFollowingFlag::<Identity, OFFSET>,
            GetRecordRunningStatus: GetRecordRunningStatus::<Identity, OFFSET>,
            GetRecordFreeCAMode: GetRecordFreeCAMode::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            RegisterForNextTable: RegisterForNextTable::<Identity, OFFSET>,
            GetNextTable: GetNextTable::<Identity, OFFSET>,
            RegisterForWhenCurrent: RegisterForWhenCurrent::<Identity, OFFSET>,
            ConvertNextToCurrent: ConvertNextToCurrent::<Identity, OFFSET>,
            GetVersionHash: GetVersionHash::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVB_SDT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDVB_SDT {}
windows_core::imp::define_interface!(IDVB_SIT, IDVB_SIT_Vtbl, 0x68cdce53_8bea_45c2_9d9d_acf575a089b5);
windows_core::imp::interface_hierarchy!(IDVB_SIT, windows_core::IUnknown);
impl IDVB_SIT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordServiceId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordServiceId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordRunningStatus(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordRunningStatus)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForNextTable)(windows_core::Interface::as_raw(self), hnexttableavailable).ok() }
    }
    pub unsafe fn GetNextTable(&self, dwtimeout: u32) -> windows_core::Result<IDVB_SIT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNextTable)(windows_core::Interface::as_raw(self), dwtimeout, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForWhenCurrent)(windows_core::Interface::as_raw(self), hnexttableiscurrent).ok() }
    }
    pub unsafe fn ConvertNextToCurrent(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ConvertNextToCurrent)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDVB_SIT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordRunningStatus: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub GetNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForWhenCurrent: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub ConvertNextToCurrent: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDVB_SIT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordServiceId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordRunningStatus(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn GetNextTable(&self, dwtimeout: u32) -> windows_core::Result<IDVB_SIT>;
    fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn ConvertNextToCurrent(&self) -> windows_core::Result<()>;
}
impl IDVB_SIT_Vtbl {
    pub const fn new<Identity: IDVB_SIT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_SIT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SIT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SIT_Impl::GetCountOfTableDescriptors(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SIT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_SIT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SIT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordServiceId<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SIT_Impl::GetRecordServiceId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordRunningStatus<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SIT_Impl::GetRecordRunningStatus(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SIT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SIT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_SIT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn RegisterForNextTable<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_SIT_Impl::RegisterForNextTable(this, core::mem::transmute_copy(&hnexttableavailable)).into()
            }
        }
        unsafe extern "system" fn GetNextTable<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwtimeout: u32, ppsit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_SIT_Impl::GetNextTable(this, core::mem::transmute_copy(&dwtimeout)) {
                    Ok(ok__) => {
                        ppsit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RegisterForWhenCurrent<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_SIT_Impl::RegisterForWhenCurrent(this, core::mem::transmute_copy(&hnexttableiscurrent)).into()
            }
        }
        unsafe extern "system" fn ConvertNextToCurrent<Identity: IDVB_SIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_SIT_Impl::ConvertNextToCurrent(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordServiceId: GetRecordServiceId::<Identity, OFFSET>,
            GetRecordRunningStatus: GetRecordRunningStatus::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            RegisterForNextTable: RegisterForNextTable::<Identity, OFFSET>,
            GetNextTable: GetNextTable::<Identity, OFFSET>,
            RegisterForWhenCurrent: RegisterForWhenCurrent::<Identity, OFFSET>,
            ConvertNextToCurrent: ConvertNextToCurrent::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVB_SIT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDVB_SIT {}
windows_core::imp::define_interface!(IDVB_ST, IDVB_ST_Vtbl, 0x4d5b9f23_2a02_45de_bcda_5d5dbfbfbe62);
windows_core::imp::interface_hierarchy!(IDVB_ST, windows_core::IUnknown);
impl IDVB_ST {
    pub unsafe fn Initialize<P0>(&self, psectionlist: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi()).ok() }
    }
    pub unsafe fn GetDataLength(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDataLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetData(&self) -> windows_core::Result<*mut u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetData)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDVB_ST_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetDataLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetData: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut u8) -> windows_core::HRESULT,
}
pub trait IDVB_ST_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>) -> windows_core::Result<()>;
    fn GetDataLength(&self) -> windows_core::Result<u16>;
    fn GetData(&self) -> windows_core::Result<*mut u8>;
}
impl IDVB_ST_Vtbl {
    pub const fn new<Identity: IDVB_ST_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IDVB_ST_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_ST_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist)).into()
            }
        }
        unsafe extern "system" fn GetDataLength<Identity: IDVB_ST_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_ST_Impl::GetDataLength(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetData<Identity: IDVB_ST_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppdata: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_ST_Impl::GetData(this) {
                    Ok(ok__) => {
                        ppdata.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetDataLength: GetDataLength::<Identity, OFFSET>,
            GetData: GetData::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVB_ST as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDVB_ST {}
windows_core::imp::define_interface!(IDVB_TDT, IDVB_TDT_Vtbl, 0x0780dc7d_d55c_4aef_97e6_6b75906e2796);
windows_core::imp::interface_hierarchy!(IDVB_TDT, windows_core::IUnknown);
impl IDVB_TDT {
    pub unsafe fn Initialize<P0>(&self, psectionlist: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi()).ok() }
    }
    pub unsafe fn GetUTCTime(&self) -> windows_core::Result<MPEG_DATE_AND_TIME> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetUTCTime)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDVB_TDT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetUTCTime: unsafe extern "system" fn(*mut core::ffi::c_void, *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT,
}
pub trait IDVB_TDT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>) -> windows_core::Result<()>;
    fn GetUTCTime(&self) -> windows_core::Result<MPEG_DATE_AND_TIME>;
}
impl IDVB_TDT_Vtbl {
    pub const fn new<Identity: IDVB_TDT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IDVB_TDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_TDT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist)).into()
            }
        }
        unsafe extern "system" fn GetUTCTime<Identity: IDVB_TDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pmdtval: *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_TDT_Impl::GetUTCTime(this) {
                    Ok(ok__) => {
                        pmdtval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetUTCTime: GetUTCTime::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVB_TDT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDVB_TDT {}
windows_core::imp::define_interface!(IDVB_TOT, IDVB_TOT_Vtbl, 0x83295d6a_faba_4ee1_9b15_8067696910ae);
windows_core::imp::interface_hierarchy!(IDVB_TOT, windows_core::IUnknown);
impl IDVB_TOT {
    pub unsafe fn Initialize<P0>(&self, psectionlist: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi()).ok() }
    }
    pub unsafe fn GetUTCTime(&self) -> windows_core::Result<MPEG_DATE_AND_TIME> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetUTCTime)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDVB_TOT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetUTCTime: unsafe extern "system" fn(*mut core::ffi::c_void, *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDVB_TOT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>) -> windows_core::Result<()>;
    fn GetUTCTime(&self) -> windows_core::Result<MPEG_DATE_AND_TIME>;
    fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
}
impl IDVB_TOT_Vtbl {
    pub const fn new<Identity: IDVB_TOT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IDVB_TOT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_TOT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist)).into()
            }
        }
        unsafe extern "system" fn GetUTCTime<Identity: IDVB_TOT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pmdtval: *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_TOT_Impl::GetUTCTime(this) {
                    Ok(ok__) => {
                        pmdtval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: IDVB_TOT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_TOT_Impl::GetCountOfTableDescriptors(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: IDVB_TOT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDVB_TOT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: IDVB_TOT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDVB_TOT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetUTCTime: GetUTCTime::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDVB_TOT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDVB_TOT {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDigitalCableLocator, IDigitalCableLocator_Vtbl, 0x48f66a11_171a_419a_9525_beeecd51584c);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDigitalCableLocator {
    type Target = IATSCLocator2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDigitalCableLocator, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ILocator, IDigitalLocator, IATSCLocator, IATSCLocator2);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDigitalCableLocator_Vtbl {
    pub base__: IATSCLocator2_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDigitalCableLocator_Impl: IATSCLocator2_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDigitalCableLocator_Vtbl {
    pub const fn new<Identity: IDigitalCableLocator_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IATSCLocator2_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDigitalCableLocator as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ILocator as windows_core::Interface>::IID || iid == &<IDigitalLocator as windows_core::Interface>::IID || iid == &<IATSCLocator as windows_core::Interface>::IID || iid == &<IATSCLocator2 as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDigitalCableLocator {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDigitalCableTuneRequest, IDigitalCableTuneRequest_Vtbl, 0xbad7753b_6b37_4810_ae57_3ce0c4a9e6cb);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDigitalCableTuneRequest {
    type Target = IATSCChannelTuneRequest;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDigitalCableTuneRequest, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuneRequest, IChannelTuneRequest, IATSCChannelTuneRequest);
#[cfg(feature = "Win32_System_Com")]
impl IDigitalCableTuneRequest {
    pub unsafe fn MajorChannel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MajorChannel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMajorChannel(&self, majorchannel: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMajorChannel)(windows_core::Interface::as_raw(self), majorchannel).ok() }
    }
    pub unsafe fn SourceID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SourceID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSourceID(&self, sourceid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSourceID)(windows_core::Interface::as_raw(self), sourceid).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDigitalCableTuneRequest_Vtbl {
    pub base__: IATSCChannelTuneRequest_Vtbl,
    pub MajorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMajorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub SourceID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetSourceID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDigitalCableTuneRequest_Impl: IATSCChannelTuneRequest_Impl {
    fn MajorChannel(&self) -> windows_core::Result<i32>;
    fn SetMajorChannel(&self, majorchannel: i32) -> windows_core::Result<()>;
    fn SourceID(&self) -> windows_core::Result<i32>;
    fn SetSourceID(&self, sourceid: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDigitalCableTuneRequest_Vtbl {
    pub const fn new<Identity: IDigitalCableTuneRequest_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn MajorChannel<Identity: IDigitalCableTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pmajorchannel: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDigitalCableTuneRequest_Impl::MajorChannel(this) {
                    Ok(ok__) => {
                        pmajorchannel.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMajorChannel<Identity: IDigitalCableTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, majorchannel: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDigitalCableTuneRequest_Impl::SetMajorChannel(this, core::mem::transmute_copy(&majorchannel)).into()
            }
        }
        unsafe extern "system" fn SourceID<Identity: IDigitalCableTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psourceid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDigitalCableTuneRequest_Impl::SourceID(this) {
                    Ok(ok__) => {
                        psourceid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSourceID<Identity: IDigitalCableTuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, sourceid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDigitalCableTuneRequest_Impl::SetSourceID(this, core::mem::transmute_copy(&sourceid)).into()
            }
        }
        Self {
            base__: IATSCChannelTuneRequest_Vtbl::new::<Identity, OFFSET>(),
            MajorChannel: MajorChannel::<Identity, OFFSET>,
            SetMajorChannel: SetMajorChannel::<Identity, OFFSET>,
            SourceID: SourceID::<Identity, OFFSET>,
            SetSourceID: SetSourceID::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDigitalCableTuneRequest as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuneRequest as windows_core::Interface>::IID || iid == &<IChannelTuneRequest as windows_core::Interface>::IID || iid == &<IATSCChannelTuneRequest as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDigitalCableTuneRequest {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDigitalCableTuningSpace, IDigitalCableTuningSpace_Vtbl, 0x013f9f9c_b449_4ec7_a6d2_9d4f2fc70ae5);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDigitalCableTuningSpace {
    type Target = IATSCTuningSpace;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDigitalCableTuningSpace, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuningSpace, IAnalogTVTuningSpace, IATSCTuningSpace);
#[cfg(feature = "Win32_System_Com")]
impl IDigitalCableTuningSpace {
    pub unsafe fn MinMajorChannel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MinMajorChannel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMinMajorChannel(&self, newminmajorchannelval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMinMajorChannel)(windows_core::Interface::as_raw(self), newminmajorchannelval).ok() }
    }
    pub unsafe fn MaxMajorChannel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MaxMajorChannel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMaxMajorChannel(&self, newmaxmajorchannelval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMaxMajorChannel)(windows_core::Interface::as_raw(self), newmaxmajorchannelval).ok() }
    }
    pub unsafe fn MinSourceID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MinSourceID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMinSourceID(&self, newminsourceidval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMinSourceID)(windows_core::Interface::as_raw(self), newminsourceidval).ok() }
    }
    pub unsafe fn MaxSourceID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MaxSourceID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMaxSourceID(&self, newmaxsourceidval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMaxSourceID)(windows_core::Interface::as_raw(self), newmaxsourceidval).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDigitalCableTuningSpace_Vtbl {
    pub base__: IATSCTuningSpace_Vtbl,
    pub MinMajorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMinMajorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub MaxMajorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMaxMajorChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub MinSourceID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMinSourceID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub MaxSourceID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMaxSourceID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDigitalCableTuningSpace_Impl: IATSCTuningSpace_Impl {
    fn MinMajorChannel(&self) -> windows_core::Result<i32>;
    fn SetMinMajorChannel(&self, newminmajorchannelval: i32) -> windows_core::Result<()>;
    fn MaxMajorChannel(&self) -> windows_core::Result<i32>;
    fn SetMaxMajorChannel(&self, newmaxmajorchannelval: i32) -> windows_core::Result<()>;
    fn MinSourceID(&self) -> windows_core::Result<i32>;
    fn SetMinSourceID(&self, newminsourceidval: i32) -> windows_core::Result<()>;
    fn MaxSourceID(&self) -> windows_core::Result<i32>;
    fn SetMaxSourceID(&self, newmaxsourceidval: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDigitalCableTuningSpace_Vtbl {
    pub const fn new<Identity: IDigitalCableTuningSpace_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn MinMajorChannel<Identity: IDigitalCableTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, minmajorchannelval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDigitalCableTuningSpace_Impl::MinMajorChannel(this) {
                    Ok(ok__) => {
                        minmajorchannelval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMinMajorChannel<Identity: IDigitalCableTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newminmajorchannelval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDigitalCableTuningSpace_Impl::SetMinMajorChannel(this, core::mem::transmute_copy(&newminmajorchannelval)).into()
            }
        }
        unsafe extern "system" fn MaxMajorChannel<Identity: IDigitalCableTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, maxmajorchannelval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDigitalCableTuningSpace_Impl::MaxMajorChannel(this) {
                    Ok(ok__) => {
                        maxmajorchannelval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMaxMajorChannel<Identity: IDigitalCableTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newmaxmajorchannelval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDigitalCableTuningSpace_Impl::SetMaxMajorChannel(this, core::mem::transmute_copy(&newmaxmajorchannelval)).into()
            }
        }
        unsafe extern "system" fn MinSourceID<Identity: IDigitalCableTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, minsourceidval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDigitalCableTuningSpace_Impl::MinSourceID(this) {
                    Ok(ok__) => {
                        minsourceidval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMinSourceID<Identity: IDigitalCableTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newminsourceidval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDigitalCableTuningSpace_Impl::SetMinSourceID(this, core::mem::transmute_copy(&newminsourceidval)).into()
            }
        }
        unsafe extern "system" fn MaxSourceID<Identity: IDigitalCableTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, maxsourceidval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDigitalCableTuningSpace_Impl::MaxSourceID(this) {
                    Ok(ok__) => {
                        maxsourceidval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMaxSourceID<Identity: IDigitalCableTuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newmaxsourceidval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDigitalCableTuningSpace_Impl::SetMaxSourceID(this, core::mem::transmute_copy(&newmaxsourceidval)).into()
            }
        }
        Self {
            base__: IATSCTuningSpace_Vtbl::new::<Identity, OFFSET>(),
            MinMajorChannel: MinMajorChannel::<Identity, OFFSET>,
            SetMinMajorChannel: SetMinMajorChannel::<Identity, OFFSET>,
            MaxMajorChannel: MaxMajorChannel::<Identity, OFFSET>,
            SetMaxMajorChannel: SetMaxMajorChannel::<Identity, OFFSET>,
            MinSourceID: MinSourceID::<Identity, OFFSET>,
            SetMinSourceID: SetMinSourceID::<Identity, OFFSET>,
            MaxSourceID: MaxSourceID::<Identity, OFFSET>,
            SetMaxSourceID: SetMaxSourceID::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDigitalCableTuningSpace as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuningSpace as windows_core::Interface>::IID || iid == &<IAnalogTVTuningSpace as windows_core::Interface>::IID || iid == &<IATSCTuningSpace as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDigitalCableTuningSpace {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IDigitalLocator, IDigitalLocator_Vtbl, 0x19b595d8_839a_47f0_96df_4f194f3c768c);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IDigitalLocator {
    type Target = ILocator;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IDigitalLocator, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ILocator);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IDigitalLocator_Vtbl {
    pub base__: ILocator_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IDigitalLocator_Impl: ILocator_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IDigitalLocator_Vtbl {
    pub const fn new<Identity: IDigitalLocator_Impl, const OFFSET: isize>() -> Self {
        Self { base__: ILocator_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDigitalLocator as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ILocator as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IDigitalLocator {}
windows_core::imp::define_interface!(IDvbCableDeliverySystemDescriptor, IDvbCableDeliverySystemDescriptor_Vtbl, 0xdfb98e36_9e1a_4862_9946_993a4e59017b);
windows_core::imp::interface_hierarchy!(IDvbCableDeliverySystemDescriptor, windows_core::IUnknown);
impl IDvbCableDeliverySystemDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetFrequency(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetFrequency)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetFECOuter(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetFECOuter)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetModulation(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetModulation)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSymbolRate(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSymbolRate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetFECInner(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetFECInner)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbCableDeliverySystemDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetFECOuter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetModulation: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSymbolRate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetFECInner: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbCableDeliverySystemDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetFrequency(&self) -> windows_core::Result<u32>;
    fn GetFECOuter(&self) -> windows_core::Result<u8>;
    fn GetModulation(&self) -> windows_core::Result<u8>;
    fn GetSymbolRate(&self) -> windows_core::Result<u32>;
    fn GetFECInner(&self) -> windows_core::Result<u8>;
}
impl IDvbCableDeliverySystemDescriptor_Vtbl {
    pub const fn new<Identity: IDvbCableDeliverySystemDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbCableDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbCableDeliverySystemDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbCableDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbCableDeliverySystemDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetFrequency<Identity: IDvbCableDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbCableDeliverySystemDescriptor_Impl::GetFrequency(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetFECOuter<Identity: IDvbCableDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbCableDeliverySystemDescriptor_Impl::GetFECOuter(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetModulation<Identity: IDvbCableDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbCableDeliverySystemDescriptor_Impl::GetModulation(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSymbolRate<Identity: IDvbCableDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbCableDeliverySystemDescriptor_Impl::GetSymbolRate(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetFECInner<Identity: IDvbCableDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbCableDeliverySystemDescriptor_Impl::GetFECInner(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetFrequency: GetFrequency::<Identity, OFFSET>,
            GetFECOuter: GetFECOuter::<Identity, OFFSET>,
            GetModulation: GetModulation::<Identity, OFFSET>,
            GetSymbolRate: GetSymbolRate::<Identity, OFFSET>,
            GetFECInner: GetFECInner::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbCableDeliverySystemDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbCableDeliverySystemDescriptor {}
windows_core::imp::define_interface!(IDvbComponentDescriptor, IDvbComponentDescriptor_Vtbl, 0x91e405cf_80e7_457f_9096_1b9d1ce32141);
windows_core::imp::interface_hierarchy!(IDvbComponentDescriptor, windows_core::IUnknown);
impl IDvbComponentDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetStreamContent(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetStreamContent)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetComponentType(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetComponentType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetComponentTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetComponentTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLanguageCode(&self, pszcode: &mut [u8; 4]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLanguageCode)(windows_core::Interface::as_raw(self), core::mem::transmute(pszcode.as_ptr())).ok() }
    }
    pub unsafe fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTextW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbComponentDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetStreamContent: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetComponentType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetComponentTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLanguageCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTextW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDvbComponentDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetStreamContent(&self) -> windows_core::Result<u8>;
    fn GetComponentType(&self) -> windows_core::Result<u8>;
    fn GetComponentTag(&self) -> windows_core::Result<u8>;
    fn GetLanguageCode(&self, pszcode: *mut u8) -> windows_core::Result<()>;
    fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IDvbComponentDescriptor_Vtbl {
    pub const fn new<Identity: IDvbComponentDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbComponentDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbComponentDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetStreamContent<Identity: IDvbComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbComponentDescriptor_Impl::GetStreamContent(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetComponentType<Identity: IDvbComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbComponentDescriptor_Impl::GetComponentType(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetComponentTag<Identity: IDvbComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbComponentDescriptor_Impl::GetComponentTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLanguageCode<Identity: IDvbComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszcode: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbComponentDescriptor_Impl::GetLanguageCode(this, core::mem::transmute_copy(&pszcode)).into()
            }
        }
        unsafe extern "system" fn GetTextW<Identity: IDvbComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrtext: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbComponentDescriptor_Impl::GetTextW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrtext.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetStreamContent: GetStreamContent::<Identity, OFFSET>,
            GetComponentType: GetComponentType::<Identity, OFFSET>,
            GetComponentTag: GetComponentTag::<Identity, OFFSET>,
            GetLanguageCode: GetLanguageCode::<Identity, OFFSET>,
            GetTextW: GetTextW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbComponentDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbComponentDescriptor {}
windows_core::imp::define_interface!(IDvbContentDescriptor, IDvbContentDescriptor_Vtbl, 0x2e883881_a467_412a_9d63_6f2b6da05bf0);
windows_core::imp::interface_hierarchy!(IDvbContentDescriptor, windows_core::IUnknown);
impl IDvbContentDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordContentNibbles(&self, brecordindex: u8, pbvallevel1: *mut u8, pbvallevel2: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordContentNibbles)(windows_core::Interface::as_raw(self), brecordindex, pbvallevel1 as _, pbvallevel2 as _).ok() }
    }
    pub unsafe fn GetRecordUserNibbles(&self, brecordindex: u8, pbval1: *mut u8, pbval2: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordUserNibbles)(windows_core::Interface::as_raw(self), brecordindex, pbval1 as _, pbval2 as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbContentDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordContentNibbles: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordUserNibbles: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbContentDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordContentNibbles(&self, brecordindex: u8, pbvallevel1: *mut u8, pbvallevel2: *mut u8) -> windows_core::Result<()>;
    fn GetRecordUserNibbles(&self, brecordindex: u8, pbval1: *mut u8, pbval2: *mut u8) -> windows_core::Result<()>;
}
impl IDvbContentDescriptor_Vtbl {
    pub const fn new<Identity: IDvbContentDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbContentDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbContentDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDvbContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbContentDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordContentNibbles<Identity: IDvbContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbvallevel1: *mut u8, pbvallevel2: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbContentDescriptor_Impl::GetRecordContentNibbles(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&pbvallevel1), core::mem::transmute_copy(&pbvallevel2)).into()
            }
        }
        unsafe extern "system" fn GetRecordUserNibbles<Identity: IDvbContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval1: *mut u8, pbval2: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbContentDescriptor_Impl::GetRecordUserNibbles(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&pbval1), core::mem::transmute_copy(&pbval2)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordContentNibbles: GetRecordContentNibbles::<Identity, OFFSET>,
            GetRecordUserNibbles: GetRecordUserNibbles::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbContentDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbContentDescriptor {}
windows_core::imp::define_interface!(IDvbContentIdentifierDescriptor, IDvbContentIdentifierDescriptor_Vtbl, 0x05e0c1ea_f661_4053_9fbf_d93b28359838);
windows_core::imp::interface_hierarchy!(IDvbContentIdentifierDescriptor, windows_core::IUnknown);
impl IDvbContentIdentifierDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCrid(&self, brecordindex: u8, pbtype: *mut u8, pblocation: *mut u8, pblength: *mut u8, ppbbytes: *mut *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordCrid)(windows_core::Interface::as_raw(self), brecordindex, pbtype as _, pblocation as _, pblength as _, ppbbytes as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbContentIdentifierDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCrid: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8, *mut u8, *mut u8, *mut *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbContentIdentifierDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordCrid(&self, brecordindex: u8, pbtype: *mut u8, pblocation: *mut u8, pblength: *mut u8, ppbbytes: *mut *mut u8) -> windows_core::Result<()>;
}
impl IDvbContentIdentifierDescriptor_Vtbl {
    pub const fn new<Identity: IDvbContentIdentifierDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbContentIdentifierDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbContentIdentifierDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbContentIdentifierDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbContentIdentifierDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDvbContentIdentifierDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbContentIdentifierDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCrid<Identity: IDvbContentIdentifierDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbtype: *mut u8, pblocation: *mut u8, pblength: *mut u8, ppbbytes: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbContentIdentifierDescriptor_Impl::GetRecordCrid(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&pbtype), core::mem::transmute_copy(&pblocation), core::mem::transmute_copy(&pblength), core::mem::transmute_copy(&ppbbytes)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordCrid: GetRecordCrid::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbContentIdentifierDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbContentIdentifierDescriptor {}
windows_core::imp::define_interface!(IDvbDataBroadcastDescriptor, IDvbDataBroadcastDescriptor_Vtbl, 0xd1ebc1d6_8b60_4c20_9caf_e59382e7c400);
windows_core::imp::interface_hierarchy!(IDvbDataBroadcastDescriptor, windows_core::IUnknown);
impl IDvbDataBroadcastDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDataBroadcastID(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDataBroadcastID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetComponentTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetComponentTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSelectorLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSelectorLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSelectorBytes(&self, pblen: *mut u8, pbval: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetSelectorBytes)(windows_core::Interface::as_raw(self), pblen as _, pbval as _).ok() }
    }
    pub unsafe fn GetLangID(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLangID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTextLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTextLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetText(&self, pblen: *mut u8, pbval: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetText)(windows_core::Interface::as_raw(self), pblen as _, pbval as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbDataBroadcastDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetDataBroadcastID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetComponentTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSelectorLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSelectorBytes: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8, *mut u8) -> windows_core::HRESULT,
    pub GetLangID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTextLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetText: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbDataBroadcastDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetDataBroadcastID(&self) -> windows_core::Result<u16>;
    fn GetComponentTag(&self) -> windows_core::Result<u8>;
    fn GetSelectorLength(&self) -> windows_core::Result<u8>;
    fn GetSelectorBytes(&self, pblen: *mut u8, pbval: *mut u8) -> windows_core::Result<()>;
    fn GetLangID(&self) -> windows_core::Result<u32>;
    fn GetTextLength(&self) -> windows_core::Result<u8>;
    fn GetText(&self, pblen: *mut u8, pbval: *mut u8) -> windows_core::Result<()>;
}
impl IDvbDataBroadcastDescriptor_Vtbl {
    pub const fn new<Identity: IDvbDataBroadcastDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbDataBroadcastDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDataBroadcastDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbDataBroadcastDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDataBroadcastDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDataBroadcastID<Identity: IDvbDataBroadcastDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDataBroadcastDescriptor_Impl::GetDataBroadcastID(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetComponentTag<Identity: IDvbDataBroadcastDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDataBroadcastDescriptor_Impl::GetComponentTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSelectorLength<Identity: IDvbDataBroadcastDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDataBroadcastDescriptor_Impl::GetSelectorLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSelectorBytes<Identity: IDvbDataBroadcastDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pblen: *mut u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbDataBroadcastDescriptor_Impl::GetSelectorBytes(this, core::mem::transmute_copy(&pblen), core::mem::transmute_copy(&pbval)).into()
            }
        }
        unsafe extern "system" fn GetLangID<Identity: IDvbDataBroadcastDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pulval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDataBroadcastDescriptor_Impl::GetLangID(this) {
                    Ok(ok__) => {
                        pulval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTextLength<Identity: IDvbDataBroadcastDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDataBroadcastDescriptor_Impl::GetTextLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetText<Identity: IDvbDataBroadcastDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pblen: *mut u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbDataBroadcastDescriptor_Impl::GetText(this, core::mem::transmute_copy(&pblen), core::mem::transmute_copy(&pbval)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetDataBroadcastID: GetDataBroadcastID::<Identity, OFFSET>,
            GetComponentTag: GetComponentTag::<Identity, OFFSET>,
            GetSelectorLength: GetSelectorLength::<Identity, OFFSET>,
            GetSelectorBytes: GetSelectorBytes::<Identity, OFFSET>,
            GetLangID: GetLangID::<Identity, OFFSET>,
            GetTextLength: GetTextLength::<Identity, OFFSET>,
            GetText: GetText::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbDataBroadcastDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbDataBroadcastDescriptor {}
windows_core::imp::define_interface!(IDvbDataBroadcastIDDescriptor, IDvbDataBroadcastIDDescriptor_Vtbl, 0x5f26f518_65c8_4048_91f2_9290f59f7b90);
windows_core::imp::interface_hierarchy!(IDvbDataBroadcastIDDescriptor, windows_core::IUnknown);
impl IDvbDataBroadcastIDDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDataBroadcastID(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDataBroadcastID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetIDSelectorBytes(&self, pblen: *mut u8, pbval: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetIDSelectorBytes)(windows_core::Interface::as_raw(self), pblen as _, pbval as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbDataBroadcastIDDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetDataBroadcastID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetIDSelectorBytes: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbDataBroadcastIDDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetDataBroadcastID(&self) -> windows_core::Result<u16>;
    fn GetIDSelectorBytes(&self, pblen: *mut u8, pbval: *mut u8) -> windows_core::Result<()>;
}
impl IDvbDataBroadcastIDDescriptor_Vtbl {
    pub const fn new<Identity: IDvbDataBroadcastIDDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbDataBroadcastIDDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDataBroadcastIDDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbDataBroadcastIDDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDataBroadcastIDDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDataBroadcastID<Identity: IDvbDataBroadcastIDDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDataBroadcastIDDescriptor_Impl::GetDataBroadcastID(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetIDSelectorBytes<Identity: IDvbDataBroadcastIDDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pblen: *mut u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbDataBroadcastIDDescriptor_Impl::GetIDSelectorBytes(this, core::mem::transmute_copy(&pblen), core::mem::transmute_copy(&pbval)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetDataBroadcastID: GetDataBroadcastID::<Identity, OFFSET>,
            GetIDSelectorBytes: GetIDSelectorBytes::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbDataBroadcastIDDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbDataBroadcastIDDescriptor {}
windows_core::imp::define_interface!(IDvbDefaultAuthorityDescriptor, IDvbDefaultAuthorityDescriptor_Vtbl, 0x05ec24d1_3a31_44e7_b408_67c60a352276);
windows_core::imp::interface_hierarchy!(IDvbDefaultAuthorityDescriptor, windows_core::IUnknown);
impl IDvbDefaultAuthorityDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDefaultAuthority(&self, pblength: *mut u8, ppbbytes: *mut *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetDefaultAuthority)(windows_core::Interface::as_raw(self), pblength as _, ppbbytes as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbDefaultAuthorityDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetDefaultAuthority: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8, *mut *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbDefaultAuthorityDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetDefaultAuthority(&self, pblength: *mut u8, ppbbytes: *mut *mut u8) -> windows_core::Result<()>;
}
impl IDvbDefaultAuthorityDescriptor_Vtbl {
    pub const fn new<Identity: IDvbDefaultAuthorityDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbDefaultAuthorityDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDefaultAuthorityDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbDefaultAuthorityDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbDefaultAuthorityDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDefaultAuthority<Identity: IDvbDefaultAuthorityDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pblength: *mut u8, ppbbytes: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbDefaultAuthorityDescriptor_Impl::GetDefaultAuthority(this, core::mem::transmute_copy(&pblength), core::mem::transmute_copy(&ppbbytes)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetDefaultAuthority: GetDefaultAuthority::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbDefaultAuthorityDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbDefaultAuthorityDescriptor {}
windows_core::imp::define_interface!(IDvbExtendedEventDescriptor, IDvbExtendedEventDescriptor_Vtbl, 0xc9b22eca_85f4_499f_b1db_efa93a91ee57);
windows_core::imp::interface_hierarchy!(IDvbExtendedEventDescriptor, windows_core::IUnknown);
impl IDvbExtendedEventDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDescriptorNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDescriptorNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLastDescriptorNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLastDescriptorNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLanguageCode(&self, pszcode: &mut [u8; 4]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLanguageCode)(windows_core::Interface::as_raw(self), core::mem::transmute(pszcode.as_ptr())).ok() }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordItemW(&self, brecordindex: u8, convmode: DVB_STRCONV_MODE, pbstrdesc: *mut windows_core::BSTR, pbstritem: *mut windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordItemW)(windows_core::Interface::as_raw(self), brecordindex, convmode, core::mem::transmute(pbstrdesc), core::mem::transmute(pbstritem)).ok() }
    }
    pub unsafe fn GetConcatenatedItemW<P0>(&self, pfollowingdescriptor: P0, convmode: DVB_STRCONV_MODE, pbstrdesc: *mut windows_core::BSTR, pbstritem: *mut windows_core::BSTR) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IDvbExtendedEventDescriptor>,
    {
        unsafe { (windows_core::Interface::vtable(self).GetConcatenatedItemW)(windows_core::Interface::as_raw(self), pfollowingdescriptor.param().abi(), convmode, core::mem::transmute(pbstrdesc), core::mem::transmute(pbstritem)).ok() }
    }
    pub unsafe fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTextW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetConcatenatedTextW<P0>(&self, followingdescriptor: P0, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>
    where
        P0: windows_core::Param<IDvbExtendedEventDescriptor>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetConcatenatedTextW)(windows_core::Interface::as_raw(self), followingdescriptor.param().abi(), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetRecordItemRawBytes(&self, brecordindex: u8, ppbrawitem: *mut *mut u8, pbitemlength: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordItemRawBytes)(windows_core::Interface::as_raw(self), brecordindex, ppbrawitem as _, pbitemlength as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbExtendedEventDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetDescriptorNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLastDescriptorNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLanguageCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordItemW: unsafe extern "system" fn(*mut core::ffi::c_void, u8, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetConcatenatedItemW: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTextW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetConcatenatedTextW: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordItemRawBytes: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut *mut u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbExtendedEventDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetDescriptorNumber(&self) -> windows_core::Result<u8>;
    fn GetLastDescriptorNumber(&self) -> windows_core::Result<u8>;
    fn GetLanguageCode(&self, pszcode: *mut u8) -> windows_core::Result<()>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordItemW(&self, brecordindex: u8, convmode: DVB_STRCONV_MODE, pbstrdesc: *mut windows_core::BSTR, pbstritem: *mut windows_core::BSTR) -> windows_core::Result<()>;
    fn GetConcatenatedItemW(&self, pfollowingdescriptor: windows_core::Ref<'_, IDvbExtendedEventDescriptor>, convmode: DVB_STRCONV_MODE, pbstrdesc: *mut windows_core::BSTR, pbstritem: *mut windows_core::BSTR) -> windows_core::Result<()>;
    fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
    fn GetConcatenatedTextW(&self, followingdescriptor: windows_core::Ref<'_, IDvbExtendedEventDescriptor>, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
    fn GetRecordItemRawBytes(&self, brecordindex: u8, ppbrawitem: *mut *mut u8, pbitemlength: *mut u8) -> windows_core::Result<()>;
}
impl IDvbExtendedEventDescriptor_Vtbl {
    pub const fn new<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbExtendedEventDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbExtendedEventDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDescriptorNumber<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbExtendedEventDescriptor_Impl::GetDescriptorNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLastDescriptorNumber<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbExtendedEventDescriptor_Impl::GetLastDescriptorNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLanguageCode<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszcode: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbExtendedEventDescriptor_Impl::GetLanguageCode(this, core::mem::transmute_copy(&pszcode)).into()
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbExtendedEventDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordItemW<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, convmode: DVB_STRCONV_MODE, pbstrdesc: *mut *mut core::ffi::c_void, pbstritem: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbExtendedEventDescriptor_Impl::GetRecordItemW(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&convmode), core::mem::transmute_copy(&pbstrdesc), core::mem::transmute_copy(&pbstritem)).into()
            }
        }
        unsafe extern "system" fn GetConcatenatedItemW<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfollowingdescriptor: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrdesc: *mut *mut core::ffi::c_void, pbstritem: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbExtendedEventDescriptor_Impl::GetConcatenatedItemW(this, core::mem::transmute_copy(&pfollowingdescriptor), core::mem::transmute_copy(&convmode), core::mem::transmute_copy(&pbstrdesc), core::mem::transmute_copy(&pbstritem)).into()
            }
        }
        unsafe extern "system" fn GetTextW<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrtext: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbExtendedEventDescriptor_Impl::GetTextW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrtext.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetConcatenatedTextW<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, followingdescriptor: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrtext: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbExtendedEventDescriptor_Impl::GetConcatenatedTextW(this, core::mem::transmute_copy(&followingdescriptor), core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrtext.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordItemRawBytes<Identity: IDvbExtendedEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, ppbrawitem: *mut *mut u8, pbitemlength: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbExtendedEventDescriptor_Impl::GetRecordItemRawBytes(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&ppbrawitem), core::mem::transmute_copy(&pbitemlength)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetDescriptorNumber: GetDescriptorNumber::<Identity, OFFSET>,
            GetLastDescriptorNumber: GetLastDescriptorNumber::<Identity, OFFSET>,
            GetLanguageCode: GetLanguageCode::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordItemW: GetRecordItemW::<Identity, OFFSET>,
            GetConcatenatedItemW: GetConcatenatedItemW::<Identity, OFFSET>,
            GetTextW: GetTextW::<Identity, OFFSET>,
            GetConcatenatedTextW: GetConcatenatedTextW::<Identity, OFFSET>,
            GetRecordItemRawBytes: GetRecordItemRawBytes::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbExtendedEventDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbExtendedEventDescriptor {}
windows_core::imp::define_interface!(IDvbFrequencyListDescriptor, IDvbFrequencyListDescriptor_Vtbl, 0x1cadb613_e1dd_4512_afa8_bb7a007ef8b1);
windows_core::imp::interface_hierarchy!(IDvbFrequencyListDescriptor, windows_core::IUnknown);
impl IDvbFrequencyListDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCodingType(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCodingType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCentreFrequency(&self, brecordindex: u8) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCentreFrequency)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbFrequencyListDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCodingType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCentreFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32) -> windows_core::HRESULT,
}
pub trait IDvbFrequencyListDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCodingType(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordCentreFrequency(&self, brecordindex: u8) -> windows_core::Result<u32>;
}
impl IDvbFrequencyListDescriptor_Vtbl {
    pub const fn new<Identity: IDvbFrequencyListDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbFrequencyListDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbFrequencyListDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbFrequencyListDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbFrequencyListDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCodingType<Identity: IDvbFrequencyListDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbFrequencyListDescriptor_Impl::GetCodingType(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDvbFrequencyListDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbFrequencyListDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCentreFrequency<Identity: IDvbFrequencyListDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbFrequencyListDescriptor_Impl::GetRecordCentreFrequency(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCodingType: GetCodingType::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordCentreFrequency: GetRecordCentreFrequency::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbFrequencyListDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbFrequencyListDescriptor {}
windows_core::imp::define_interface!(IDvbHDSimulcastLogicalChannelDescriptor, IDvbHDSimulcastLogicalChannelDescriptor_Vtbl, 0x1ea8b738_a307_4680_9e26_d0a908c824f4);
impl core::ops::Deref for IDvbHDSimulcastLogicalChannelDescriptor {
    type Target = IDvbLogicalChannelDescriptor2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IDvbHDSimulcastLogicalChannelDescriptor, windows_core::IUnknown, IDvbLogicalChannelDescriptor, IDvbLogicalChannelDescriptor2);
#[repr(C)]
#[doc(hidden)]
pub struct IDvbHDSimulcastLogicalChannelDescriptor_Vtbl {
    pub base__: IDvbLogicalChannelDescriptor2_Vtbl,
}
pub trait IDvbHDSimulcastLogicalChannelDescriptor_Impl: IDvbLogicalChannelDescriptor2_Impl {}
impl IDvbHDSimulcastLogicalChannelDescriptor_Vtbl {
    pub const fn new<Identity: IDvbHDSimulcastLogicalChannelDescriptor_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IDvbLogicalChannelDescriptor2_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbHDSimulcastLogicalChannelDescriptor as windows_core::Interface>::IID || iid == &<IDvbLogicalChannelDescriptor as windows_core::Interface>::IID || iid == &<IDvbLogicalChannelDescriptor2 as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbHDSimulcastLogicalChannelDescriptor {}
windows_core::imp::define_interface!(IDvbLinkageDescriptor, IDvbLinkageDescriptor_Vtbl, 0x1cdf8b31_994a_46fc_acfd_6a6be8934dd5);
windows_core::imp::interface_hierarchy!(IDvbLinkageDescriptor, windows_core::IUnknown);
impl IDvbLinkageDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTSId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTSId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetONId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetONId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetServiceId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLinkageType(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLinkageType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetPrivateDataLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPrivateDataLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetPrivateData(&self, pblen: *mut u8, pbdata: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetPrivateData)(windows_core::Interface::as_raw(self), pblen as _, pbdata as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbLinkageDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTSId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetONId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetLinkageType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetPrivateDataLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetPrivateData: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbLinkageDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetTSId(&self) -> windows_core::Result<u16>;
    fn GetONId(&self) -> windows_core::Result<u16>;
    fn GetServiceId(&self) -> windows_core::Result<u16>;
    fn GetLinkageType(&self) -> windows_core::Result<u8>;
    fn GetPrivateDataLength(&self) -> windows_core::Result<u8>;
    fn GetPrivateData(&self, pblen: *mut u8, pbdata: *mut u8) -> windows_core::Result<()>;
}
impl IDvbLinkageDescriptor_Vtbl {
    pub const fn new<Identity: IDvbLinkageDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbLinkageDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLinkageDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbLinkageDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLinkageDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTSId<Identity: IDvbLinkageDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLinkageDescriptor_Impl::GetTSId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetONId<Identity: IDvbLinkageDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLinkageDescriptor_Impl::GetONId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceId<Identity: IDvbLinkageDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLinkageDescriptor_Impl::GetServiceId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLinkageType<Identity: IDvbLinkageDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLinkageDescriptor_Impl::GetLinkageType(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPrivateDataLength<Identity: IDvbLinkageDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLinkageDescriptor_Impl::GetPrivateDataLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPrivateData<Identity: IDvbLinkageDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pblen: *mut u8, pbdata: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbLinkageDescriptor_Impl::GetPrivateData(this, core::mem::transmute_copy(&pblen), core::mem::transmute_copy(&pbdata)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetTSId: GetTSId::<Identity, OFFSET>,
            GetONId: GetONId::<Identity, OFFSET>,
            GetServiceId: GetServiceId::<Identity, OFFSET>,
            GetLinkageType: GetLinkageType::<Identity, OFFSET>,
            GetPrivateDataLength: GetPrivateDataLength::<Identity, OFFSET>,
            GetPrivateData: GetPrivateData::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbLinkageDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbLinkageDescriptor {}
windows_core::imp::define_interface!(IDvbLogicalChannel2Descriptor, IDvbLogicalChannel2Descriptor_Vtbl, 0xf69c3747_8a30_4980_998c_01fe7f0ba35a);
impl core::ops::Deref for IDvbLogicalChannel2Descriptor {
    type Target = IDvbLogicalChannelDescriptor2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IDvbLogicalChannel2Descriptor, windows_core::IUnknown, IDvbLogicalChannelDescriptor, IDvbLogicalChannelDescriptor2);
impl IDvbLogicalChannel2Descriptor {
    pub unsafe fn GetCountOfLists(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfLists)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetListId(&self, blistindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetListId)(windows_core::Interface::as_raw(self), blistindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetListNameW(&self, blistindex: u8, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetListNameW)(windows_core::Interface::as_raw(self), blistindex, convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetListCountryCode(&self, blistindex: u8, pszcode: &mut [u8; 4]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetListCountryCode)(windows_core::Interface::as_raw(self), blistindex, core::mem::transmute(pszcode.as_ptr())).ok() }
    }
    pub unsafe fn GetListCountOfRecords(&self, bchannellistindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetListCountOfRecords)(windows_core::Interface::as_raw(self), bchannellistindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetListRecordServiceId(&self, blistindex: u8, brecordindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetListRecordServiceId)(windows_core::Interface::as_raw(self), blistindex, brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetListRecordLogicalChannelNumber(&self, blistindex: u8, brecordindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetListRecordLogicalChannelNumber)(windows_core::Interface::as_raw(self), blistindex, brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetListRecordLogicalChannelAndVisibility(&self, blistindex: u8, brecordindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetListRecordLogicalChannelAndVisibility)(windows_core::Interface::as_raw(self), blistindex, brecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbLogicalChannel2Descriptor_Vtbl {
    pub base__: IDvbLogicalChannelDescriptor2_Vtbl,
    pub GetCountOfLists: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetListId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetListNameW: unsafe extern "system" fn(*mut core::ffi::c_void, u8, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetListCountryCode: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetListCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetListRecordServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, u8, *mut u16) -> windows_core::HRESULT,
    pub GetListRecordLogicalChannelNumber: unsafe extern "system" fn(*mut core::ffi::c_void, u8, u8, *mut u16) -> windows_core::HRESULT,
    pub GetListRecordLogicalChannelAndVisibility: unsafe extern "system" fn(*mut core::ffi::c_void, u8, u8, *mut u16) -> windows_core::HRESULT,
}
pub trait IDvbLogicalChannel2Descriptor_Impl: IDvbLogicalChannelDescriptor2_Impl {
    fn GetCountOfLists(&self) -> windows_core::Result<u8>;
    fn GetListId(&self, blistindex: u8) -> windows_core::Result<u8>;
    fn GetListNameW(&self, blistindex: u8, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
    fn GetListCountryCode(&self, blistindex: u8, pszcode: *mut u8) -> windows_core::Result<()>;
    fn GetListCountOfRecords(&self, bchannellistindex: u8) -> windows_core::Result<u8>;
    fn GetListRecordServiceId(&self, blistindex: u8, brecordindex: u8) -> windows_core::Result<u16>;
    fn GetListRecordLogicalChannelNumber(&self, blistindex: u8, brecordindex: u8) -> windows_core::Result<u16>;
    fn GetListRecordLogicalChannelAndVisibility(&self, blistindex: u8, brecordindex: u8) -> windows_core::Result<u16>;
}
impl IDvbLogicalChannel2Descriptor_Vtbl {
    pub const fn new<Identity: IDvbLogicalChannel2Descriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetCountOfLists<Identity: IDvbLogicalChannel2Descriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannel2Descriptor_Impl::GetCountOfLists(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetListId<Identity: IDvbLogicalChannel2Descriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, blistindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannel2Descriptor_Impl::GetListId(this, core::mem::transmute_copy(&blistindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetListNameW<Identity: IDvbLogicalChannel2Descriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, blistindex: u8, convmode: DVB_STRCONV_MODE, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannel2Descriptor_Impl::GetListNameW(this, core::mem::transmute_copy(&blistindex), core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetListCountryCode<Identity: IDvbLogicalChannel2Descriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, blistindex: u8, pszcode: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbLogicalChannel2Descriptor_Impl::GetListCountryCode(this, core::mem::transmute_copy(&blistindex), core::mem::transmute_copy(&pszcode)).into()
            }
        }
        unsafe extern "system" fn GetListCountOfRecords<Identity: IDvbLogicalChannel2Descriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bchannellistindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannel2Descriptor_Impl::GetListCountOfRecords(this, core::mem::transmute_copy(&bchannellistindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetListRecordServiceId<Identity: IDvbLogicalChannel2Descriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, blistindex: u8, brecordindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannel2Descriptor_Impl::GetListRecordServiceId(this, core::mem::transmute_copy(&blistindex), core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetListRecordLogicalChannelNumber<Identity: IDvbLogicalChannel2Descriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, blistindex: u8, brecordindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannel2Descriptor_Impl::GetListRecordLogicalChannelNumber(this, core::mem::transmute_copy(&blistindex), core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetListRecordLogicalChannelAndVisibility<Identity: IDvbLogicalChannel2Descriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, blistindex: u8, brecordindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannel2Descriptor_Impl::GetListRecordLogicalChannelAndVisibility(this, core::mem::transmute_copy(&blistindex), core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IDvbLogicalChannelDescriptor2_Vtbl::new::<Identity, OFFSET>(),
            GetCountOfLists: GetCountOfLists::<Identity, OFFSET>,
            GetListId: GetListId::<Identity, OFFSET>,
            GetListNameW: GetListNameW::<Identity, OFFSET>,
            GetListCountryCode: GetListCountryCode::<Identity, OFFSET>,
            GetListCountOfRecords: GetListCountOfRecords::<Identity, OFFSET>,
            GetListRecordServiceId: GetListRecordServiceId::<Identity, OFFSET>,
            GetListRecordLogicalChannelNumber: GetListRecordLogicalChannelNumber::<Identity, OFFSET>,
            GetListRecordLogicalChannelAndVisibility: GetListRecordLogicalChannelAndVisibility::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbLogicalChannel2Descriptor as windows_core::Interface>::IID || iid == &<IDvbLogicalChannelDescriptor as windows_core::Interface>::IID || iid == &<IDvbLogicalChannelDescriptor2 as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbLogicalChannel2Descriptor {}
windows_core::imp::define_interface!(IDvbLogicalChannelDescriptor, IDvbLogicalChannelDescriptor_Vtbl, 0xcf1edaff_3ffd_4cf7_8201_35756acbf85f);
windows_core::imp::interface_hierarchy!(IDvbLogicalChannelDescriptor, windows_core::IUnknown);
impl IDvbLogicalChannelDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordServiceId(&self, brecordindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordServiceId)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordLogicalChannelNumber(&self, brecordindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordLogicalChannelNumber)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbLogicalChannelDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u16) -> windows_core::HRESULT,
    pub GetRecordLogicalChannelNumber: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u16) -> windows_core::HRESULT,
}
pub trait IDvbLogicalChannelDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordServiceId(&self, brecordindex: u8) -> windows_core::Result<u16>;
    fn GetRecordLogicalChannelNumber(&self, brecordindex: u8) -> windows_core::Result<u16>;
}
impl IDvbLogicalChannelDescriptor_Vtbl {
    pub const fn new<Identity: IDvbLogicalChannelDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbLogicalChannelDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannelDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbLogicalChannelDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannelDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDvbLogicalChannelDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannelDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordServiceId<Identity: IDvbLogicalChannelDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannelDescriptor_Impl::GetRecordServiceId(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordLogicalChannelNumber<Identity: IDvbLogicalChannelDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannelDescriptor_Impl::GetRecordLogicalChannelNumber(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordServiceId: GetRecordServiceId::<Identity, OFFSET>,
            GetRecordLogicalChannelNumber: GetRecordLogicalChannelNumber::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbLogicalChannelDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbLogicalChannelDescriptor {}
windows_core::imp::define_interface!(IDvbLogicalChannelDescriptor2, IDvbLogicalChannelDescriptor2_Vtbl, 0x43aca974_4be8_4b98_bc17_9eafd788b1d7);
impl core::ops::Deref for IDvbLogicalChannelDescriptor2 {
    type Target = IDvbLogicalChannelDescriptor;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IDvbLogicalChannelDescriptor2, windows_core::IUnknown, IDvbLogicalChannelDescriptor);
impl IDvbLogicalChannelDescriptor2 {
    pub unsafe fn GetRecordLogicalChannelAndVisibility(&self, brecordindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordLogicalChannelAndVisibility)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbLogicalChannelDescriptor2_Vtbl {
    pub base__: IDvbLogicalChannelDescriptor_Vtbl,
    pub GetRecordLogicalChannelAndVisibility: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u16) -> windows_core::HRESULT,
}
pub trait IDvbLogicalChannelDescriptor2_Impl: IDvbLogicalChannelDescriptor_Impl {
    fn GetRecordLogicalChannelAndVisibility(&self, brecordindex: u8) -> windows_core::Result<u16>;
}
impl IDvbLogicalChannelDescriptor2_Vtbl {
    pub const fn new<Identity: IDvbLogicalChannelDescriptor2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetRecordLogicalChannelAndVisibility<Identity: IDvbLogicalChannelDescriptor2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbLogicalChannelDescriptor2_Impl::GetRecordLogicalChannelAndVisibility(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IDvbLogicalChannelDescriptor_Vtbl::new::<Identity, OFFSET>(),
            GetRecordLogicalChannelAndVisibility: GetRecordLogicalChannelAndVisibility::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbLogicalChannelDescriptor2 as windows_core::Interface>::IID || iid == &<IDvbLogicalChannelDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbLogicalChannelDescriptor2 {}
windows_core::imp::define_interface!(IDvbMultilingualServiceNameDescriptor, IDvbMultilingualServiceNameDescriptor_Vtbl, 0x2d80433b_b32c_47ef_987f_e78ebb773e34);
windows_core::imp::interface_hierarchy!(IDvbMultilingualServiceNameDescriptor, windows_core::IUnknown);
impl IDvbMultilingualServiceNameDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordLangId(&self, brecordindex: u8) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordLangId)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordServiceProviderNameW(&self, brecordindex: u8, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordServiceProviderNameW)(windows_core::Interface::as_raw(self), brecordindex, convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetRecordServiceNameW(&self, brecordindex: u8, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordServiceNameW)(windows_core::Interface::as_raw(self), brecordindex, convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbMultilingualServiceNameDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordLangId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32) -> windows_core::HRESULT,
    pub GetRecordServiceProviderNameW: unsafe extern "system" fn(*mut core::ffi::c_void, u8, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordServiceNameW: unsafe extern "system" fn(*mut core::ffi::c_void, u8, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDvbMultilingualServiceNameDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordLangId(&self, brecordindex: u8) -> windows_core::Result<u32>;
    fn GetRecordServiceProviderNameW(&self, brecordindex: u8, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
    fn GetRecordServiceNameW(&self, brecordindex: u8, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IDvbMultilingualServiceNameDescriptor_Vtbl {
    pub const fn new<Identity: IDvbMultilingualServiceNameDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbMultilingualServiceNameDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbMultilingualServiceNameDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbMultilingualServiceNameDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbMultilingualServiceNameDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDvbMultilingualServiceNameDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbMultilingualServiceNameDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordLangId<Identity: IDvbMultilingualServiceNameDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, ulval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbMultilingualServiceNameDescriptor_Impl::GetRecordLangId(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        ulval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordServiceProviderNameW<Identity: IDvbMultilingualServiceNameDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, convmode: DVB_STRCONV_MODE, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbMultilingualServiceNameDescriptor_Impl::GetRecordServiceProviderNameW(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordServiceNameW<Identity: IDvbMultilingualServiceNameDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, convmode: DVB_STRCONV_MODE, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbMultilingualServiceNameDescriptor_Impl::GetRecordServiceNameW(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordLangId: GetRecordLangId::<Identity, OFFSET>,
            GetRecordServiceProviderNameW: GetRecordServiceProviderNameW::<Identity, OFFSET>,
            GetRecordServiceNameW: GetRecordServiceNameW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbMultilingualServiceNameDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbMultilingualServiceNameDescriptor {}
windows_core::imp::define_interface!(IDvbNetworkNameDescriptor, IDvbNetworkNameDescriptor_Vtbl, 0x5b2a80cf_35b9_446c_b3e4_048b761dbc51);
windows_core::imp::interface_hierarchy!(IDvbNetworkNameDescriptor, windows_core::IUnknown);
impl IDvbNetworkNameDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetNetworkName(&self) -> windows_core::Result<*mut u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNetworkName)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetNetworkNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNetworkNameW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbNetworkNameDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetNetworkName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut u8) -> windows_core::HRESULT,
    pub GetNetworkNameW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDvbNetworkNameDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetNetworkName(&self) -> windows_core::Result<*mut u8>;
    fn GetNetworkNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IDvbNetworkNameDescriptor_Vtbl {
    pub const fn new<Identity: IDvbNetworkNameDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbNetworkNameDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbNetworkNameDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbNetworkNameDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbNetworkNameDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetNetworkName<Identity: IDvbNetworkNameDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszname: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbNetworkNameDescriptor_Impl::GetNetworkName(this) {
                    Ok(ok__) => {
                        pszname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetNetworkNameW<Identity: IDvbNetworkNameDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbNetworkNameDescriptor_Impl::GetNetworkNameW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetNetworkName: GetNetworkName::<Identity, OFFSET>,
            GetNetworkNameW: GetNetworkNameW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbNetworkNameDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbNetworkNameDescriptor {}
windows_core::imp::define_interface!(IDvbParentalRatingDescriptor, IDvbParentalRatingDescriptor_Vtbl, 0x3ad9dde1_fb1b_4186_937f_22e6b5a72a10);
windows_core::imp::interface_hierarchy!(IDvbParentalRatingDescriptor, windows_core::IUnknown);
impl IDvbParentalRatingDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordRating(&self, brecordindex: u8, pszcountrycode: &mut [u8; 4], pbval: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordRating)(windows_core::Interface::as_raw(self), brecordindex, core::mem::transmute(pszcountrycode.as_ptr()), pbval as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbParentalRatingDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordRating: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbParentalRatingDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordRating(&self, brecordindex: u8, pszcountrycode: *mut u8, pbval: *mut u8) -> windows_core::Result<()>;
}
impl IDvbParentalRatingDescriptor_Vtbl {
    pub const fn new<Identity: IDvbParentalRatingDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbParentalRatingDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbParentalRatingDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbParentalRatingDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbParentalRatingDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDvbParentalRatingDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbParentalRatingDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordRating<Identity: IDvbParentalRatingDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pszcountrycode: *mut u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbParentalRatingDescriptor_Impl::GetRecordRating(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&pszcountrycode), core::mem::transmute_copy(&pbval)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordRating: GetRecordRating::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbParentalRatingDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbParentalRatingDescriptor {}
windows_core::imp::define_interface!(IDvbPrivateDataSpecifierDescriptor, IDvbPrivateDataSpecifierDescriptor_Vtbl, 0x5660a019_e75a_4b82_9b4c_ed2256d165a2);
windows_core::imp::interface_hierarchy!(IDvbPrivateDataSpecifierDescriptor, windows_core::IUnknown);
impl IDvbPrivateDataSpecifierDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetPrivateDataSpecifier(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPrivateDataSpecifier)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbPrivateDataSpecifierDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetPrivateDataSpecifier: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
pub trait IDvbPrivateDataSpecifierDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetPrivateDataSpecifier(&self) -> windows_core::Result<u32>;
}
impl IDvbPrivateDataSpecifierDescriptor_Vtbl {
    pub const fn new<Identity: IDvbPrivateDataSpecifierDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbPrivateDataSpecifierDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbPrivateDataSpecifierDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbPrivateDataSpecifierDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbPrivateDataSpecifierDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPrivateDataSpecifier<Identity: IDvbPrivateDataSpecifierDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbPrivateDataSpecifierDescriptor_Impl::GetPrivateDataSpecifier(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetPrivateDataSpecifier: GetPrivateDataSpecifier::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbPrivateDataSpecifierDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbPrivateDataSpecifierDescriptor {}
windows_core::imp::define_interface!(IDvbSatelliteDeliverySystemDescriptor, IDvbSatelliteDeliverySystemDescriptor_Vtbl, 0x02f2225a_805b_4ec5_a9a6_f9b5913cd470);
windows_core::imp::interface_hierarchy!(IDvbSatelliteDeliverySystemDescriptor, windows_core::IUnknown);
impl IDvbSatelliteDeliverySystemDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetFrequency(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetFrequency)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOrbitalPosition(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOrbitalPosition)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetWestEastFlag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetWestEastFlag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetPolarization(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPolarization)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetModulation(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetModulation)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSymbolRate(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSymbolRate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetFECInner(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetFECInner)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbSatelliteDeliverySystemDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetOrbitalPosition: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetWestEastFlag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetPolarization: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetModulation: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSymbolRate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetFECInner: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbSatelliteDeliverySystemDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetFrequency(&self) -> windows_core::Result<u32>;
    fn GetOrbitalPosition(&self) -> windows_core::Result<u16>;
    fn GetWestEastFlag(&self) -> windows_core::Result<u8>;
    fn GetPolarization(&self) -> windows_core::Result<u8>;
    fn GetModulation(&self) -> windows_core::Result<u8>;
    fn GetSymbolRate(&self) -> windows_core::Result<u32>;
    fn GetFECInner(&self) -> windows_core::Result<u8>;
}
impl IDvbSatelliteDeliverySystemDescriptor_Vtbl {
    pub const fn new<Identity: IDvbSatelliteDeliverySystemDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbSatelliteDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSatelliteDeliverySystemDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbSatelliteDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSatelliteDeliverySystemDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetFrequency<Identity: IDvbSatelliteDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSatelliteDeliverySystemDescriptor_Impl::GetFrequency(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOrbitalPosition<Identity: IDvbSatelliteDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSatelliteDeliverySystemDescriptor_Impl::GetOrbitalPosition(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetWestEastFlag<Identity: IDvbSatelliteDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSatelliteDeliverySystemDescriptor_Impl::GetWestEastFlag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPolarization<Identity: IDvbSatelliteDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSatelliteDeliverySystemDescriptor_Impl::GetPolarization(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetModulation<Identity: IDvbSatelliteDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSatelliteDeliverySystemDescriptor_Impl::GetModulation(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSymbolRate<Identity: IDvbSatelliteDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSatelliteDeliverySystemDescriptor_Impl::GetSymbolRate(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetFECInner<Identity: IDvbSatelliteDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSatelliteDeliverySystemDescriptor_Impl::GetFECInner(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetFrequency: GetFrequency::<Identity, OFFSET>,
            GetOrbitalPosition: GetOrbitalPosition::<Identity, OFFSET>,
            GetWestEastFlag: GetWestEastFlag::<Identity, OFFSET>,
            GetPolarization: GetPolarization::<Identity, OFFSET>,
            GetModulation: GetModulation::<Identity, OFFSET>,
            GetSymbolRate: GetSymbolRate::<Identity, OFFSET>,
            GetFECInner: GetFECInner::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbSatelliteDeliverySystemDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbSatelliteDeliverySystemDescriptor {}
windows_core::imp::define_interface!(IDvbServiceAttributeDescriptor, IDvbServiceAttributeDescriptor_Vtbl, 0x0f37bd92_d6a1_4854_b950_3a969d27f30e);
windows_core::imp::interface_hierarchy!(IDvbServiceAttributeDescriptor, windows_core::IUnknown);
impl IDvbServiceAttributeDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordServiceId(&self, brecordindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordServiceId)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordNumericSelectionFlag(&self, brecordindex: u8) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordNumericSelectionFlag)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordVisibleServiceFlag(&self, brecordindex: u8) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordVisibleServiceFlag)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbServiceAttributeDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u16) -> windows_core::HRESULT,
    pub GetRecordNumericSelectionFlag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetRecordVisibleServiceFlag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut windows_core::BOOL) -> windows_core::HRESULT,
}
pub trait IDvbServiceAttributeDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordServiceId(&self, brecordindex: u8) -> windows_core::Result<u16>;
    fn GetRecordNumericSelectionFlag(&self, brecordindex: u8) -> windows_core::Result<windows_core::BOOL>;
    fn GetRecordVisibleServiceFlag(&self, brecordindex: u8) -> windows_core::Result<windows_core::BOOL>;
}
impl IDvbServiceAttributeDescriptor_Vtbl {
    pub const fn new<Identity: IDvbServiceAttributeDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbServiceAttributeDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceAttributeDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbServiceAttributeDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceAttributeDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDvbServiceAttributeDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceAttributeDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordServiceId<Identity: IDvbServiceAttributeDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceAttributeDescriptor_Impl::GetRecordServiceId(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordNumericSelectionFlag<Identity: IDvbServiceAttributeDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceAttributeDescriptor_Impl::GetRecordNumericSelectionFlag(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordVisibleServiceFlag<Identity: IDvbServiceAttributeDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceAttributeDescriptor_Impl::GetRecordVisibleServiceFlag(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordServiceId: GetRecordServiceId::<Identity, OFFSET>,
            GetRecordNumericSelectionFlag: GetRecordNumericSelectionFlag::<Identity, OFFSET>,
            GetRecordVisibleServiceFlag: GetRecordVisibleServiceFlag::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbServiceAttributeDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbServiceAttributeDescriptor {}
windows_core::imp::define_interface!(IDvbServiceDescriptor, IDvbServiceDescriptor_Vtbl, 0xf9c7fbcf_e2d6_464d_b32d_2ef526e49290);
windows_core::imp::interface_hierarchy!(IDvbServiceDescriptor, windows_core::IUnknown);
impl IDvbServiceDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetServiceType(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetServiceProviderName(&self) -> windows_core::Result<*mut u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceProviderName)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetServiceProviderNameW(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceProviderNameW)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetServiceName(&self) -> windows_core::Result<*mut u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceName)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetProcessedServiceName(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetProcessedServiceName)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetServiceNameEmphasized(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceNameEmphasized)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbServiceDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetServiceType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetServiceProviderName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut u8) -> windows_core::HRESULT,
    pub GetServiceProviderNameW: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetServiceName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut u8) -> windows_core::HRESULT,
    pub GetProcessedServiceName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetServiceNameEmphasized: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDvbServiceDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetServiceType(&self) -> windows_core::Result<u8>;
    fn GetServiceProviderName(&self) -> windows_core::Result<*mut u8>;
    fn GetServiceProviderNameW(&self) -> windows_core::Result<windows_core::BSTR>;
    fn GetServiceName(&self) -> windows_core::Result<*mut u8>;
    fn GetProcessedServiceName(&self) -> windows_core::Result<windows_core::BSTR>;
    fn GetServiceNameEmphasized(&self) -> windows_core::Result<windows_core::BSTR>;
}
impl IDvbServiceDescriptor_Vtbl {
    pub const fn new<Identity: IDvbServiceDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceType<Identity: IDvbServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceDescriptor_Impl::GetServiceType(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceProviderName<Identity: IDvbServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszname: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceDescriptor_Impl::GetServiceProviderName(this) {
                    Ok(ok__) => {
                        pszname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceProviderNameW<Identity: IDvbServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceDescriptor_Impl::GetServiceProviderNameW(this) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceName<Identity: IDvbServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszname: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceDescriptor_Impl::GetServiceName(this) {
                    Ok(ok__) => {
                        pszname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetProcessedServiceName<Identity: IDvbServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceDescriptor_Impl::GetProcessedServiceName(this) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceNameEmphasized<Identity: IDvbServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceDescriptor_Impl::GetServiceNameEmphasized(this) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetServiceType: GetServiceType::<Identity, OFFSET>,
            GetServiceProviderName: GetServiceProviderName::<Identity, OFFSET>,
            GetServiceProviderNameW: GetServiceProviderNameW::<Identity, OFFSET>,
            GetServiceName: GetServiceName::<Identity, OFFSET>,
            GetProcessedServiceName: GetProcessedServiceName::<Identity, OFFSET>,
            GetServiceNameEmphasized: GetServiceNameEmphasized::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbServiceDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbServiceDescriptor {}
windows_core::imp::define_interface!(IDvbServiceDescriptor2, IDvbServiceDescriptor2_Vtbl, 0xd6c76506_85ab_487c_9b2b_36416511e4a2);
impl core::ops::Deref for IDvbServiceDescriptor2 {
    type Target = IDvbServiceDescriptor;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IDvbServiceDescriptor2, windows_core::IUnknown, IDvbServiceDescriptor);
impl IDvbServiceDescriptor2 {
    pub unsafe fn GetServiceProviderNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceProviderNameW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetServiceNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceNameW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbServiceDescriptor2_Vtbl {
    pub base__: IDvbServiceDescriptor_Vtbl,
    pub GetServiceProviderNameW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetServiceNameW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDvbServiceDescriptor2_Impl: IDvbServiceDescriptor_Impl {
    fn GetServiceProviderNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
    fn GetServiceNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IDvbServiceDescriptor2_Vtbl {
    pub const fn new<Identity: IDvbServiceDescriptor2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetServiceProviderNameW<Identity: IDvbServiceDescriptor2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceDescriptor2_Impl::GetServiceProviderNameW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceNameW<Identity: IDvbServiceDescriptor2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceDescriptor2_Impl::GetServiceNameW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IDvbServiceDescriptor_Vtbl::new::<Identity, OFFSET>(),
            GetServiceProviderNameW: GetServiceProviderNameW::<Identity, OFFSET>,
            GetServiceNameW: GetServiceNameW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbServiceDescriptor2 as windows_core::Interface>::IID || iid == &<IDvbServiceDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbServiceDescriptor2 {}
windows_core::imp::define_interface!(IDvbServiceListDescriptor, IDvbServiceListDescriptor_Vtbl, 0x05db0d8f_6008_491a_acd3_7090952707d0);
windows_core::imp::interface_hierarchy!(IDvbServiceListDescriptor, windows_core::IUnknown);
impl IDvbServiceListDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordServiceId(&self, brecordindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordServiceId)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordServiceType(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordServiceType)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbServiceListDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u16) -> windows_core::HRESULT,
    pub GetRecordServiceType: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbServiceListDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordServiceId(&self, brecordindex: u8) -> windows_core::Result<u16>;
    fn GetRecordServiceType(&self, brecordindex: u8) -> windows_core::Result<u8>;
}
impl IDvbServiceListDescriptor_Vtbl {
    pub const fn new<Identity: IDvbServiceListDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbServiceListDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceListDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbServiceListDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceListDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDvbServiceListDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceListDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordServiceId<Identity: IDvbServiceListDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceListDescriptor_Impl::GetRecordServiceId(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordServiceType<Identity: IDvbServiceListDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbServiceListDescriptor_Impl::GetRecordServiceType(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordServiceId: GetRecordServiceId::<Identity, OFFSET>,
            GetRecordServiceType: GetRecordServiceType::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbServiceListDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbServiceListDescriptor {}
windows_core::imp::define_interface!(IDvbShortEventDescriptor, IDvbShortEventDescriptor_Vtbl, 0xb170be92_5b75_458e_9c6e_b0008231491a);
windows_core::imp::interface_hierarchy!(IDvbShortEventDescriptor, windows_core::IUnknown);
impl IDvbShortEventDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLanguageCode(&self, pszcode: &mut [u8; 4]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLanguageCode)(windows_core::Interface::as_raw(self), core::mem::transmute(pszcode.as_ptr())).ok() }
    }
    pub unsafe fn GetEventNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEventNameW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTextW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbShortEventDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLanguageCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetEventNameW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTextW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDvbShortEventDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetLanguageCode(&self, pszcode: *mut u8) -> windows_core::Result<()>;
    fn GetEventNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
    fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IDvbShortEventDescriptor_Vtbl {
    pub const fn new<Identity: IDvbShortEventDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbShortEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbShortEventDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbShortEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbShortEventDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLanguageCode<Identity: IDvbShortEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszcode: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbShortEventDescriptor_Impl::GetLanguageCode(this, core::mem::transmute_copy(&pszcode)).into()
            }
        }
        unsafe extern "system" fn GetEventNameW<Identity: IDvbShortEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbShortEventDescriptor_Impl::GetEventNameW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTextW<Identity: IDvbShortEventDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrtext: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbShortEventDescriptor_Impl::GetTextW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrtext.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetLanguageCode: GetLanguageCode::<Identity, OFFSET>,
            GetEventNameW: GetEventNameW::<Identity, OFFSET>,
            GetTextW: GetTextW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbShortEventDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbShortEventDescriptor {}
windows_core::imp::define_interface!(IDvbSiParser, IDvbSiParser_Vtbl, 0xb758a7bd_14dc_449d_b828_35909acb3b1e);
windows_core::imp::interface_hierarchy!(IDvbSiParser, windows_core::IUnknown);
impl IDvbSiParser {
    pub unsafe fn Initialize<P0>(&self, punkmpeg2data: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::IUnknown>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), punkmpeg2data.param().abi()).ok() }
    }
    pub unsafe fn GetPAT(&self) -> windows_core::Result<IPAT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPAT)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetCAT(&self, dwtimeout: u32) -> windows_core::Result<ICAT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCAT)(windows_core::Interface::as_raw(self), dwtimeout, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetPMT(&self, pid: u16, pwprogramnumber: Option<*const u16>) -> windows_core::Result<IPMT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPMT)(windows_core::Interface::as_raw(self), pid, pwprogramnumber.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTSDT(&self) -> windows_core::Result<ITSDT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTSDT)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetNIT(&self, tableid: u8, pwnetworkid: Option<*const u16>) -> windows_core::Result<IDVB_NIT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNIT)(windows_core::Interface::as_raw(self), tableid, pwnetworkid.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetSDT(&self, tableid: u8, pwtransportstreamid: Option<*const u16>) -> windows_core::Result<IDVB_SDT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSDT)(windows_core::Interface::as_raw(self), tableid, pwtransportstreamid.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetEIT(&self, tableid: u8, pwserviceid: Option<*const u16>) -> windows_core::Result<IDVB_EIT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEIT)(windows_core::Interface::as_raw(self), tableid, pwserviceid.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetBAT(&self, pwbouquetid: Option<*const u16>) -> windows_core::Result<IDVB_BAT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetBAT)(windows_core::Interface::as_raw(self), pwbouquetid.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRST(&self, dwtimeout: u32) -> windows_core::Result<IDVB_RST> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRST)(windows_core::Interface::as_raw(self), dwtimeout, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetST(&self, pid: u16, dwtimeout: u32) -> windows_core::Result<IDVB_ST> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetST)(windows_core::Interface::as_raw(self), pid, dwtimeout, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTDT(&self) -> windows_core::Result<IDVB_TDT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTDT)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTOT(&self) -> windows_core::Result<IDVB_TOT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTOT)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetDIT(&self, dwtimeout: u32) -> windows_core::Result<IDVB_DIT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDIT)(windows_core::Interface::as_raw(self), dwtimeout, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetSIT(&self, dwtimeout: u32) -> windows_core::Result<IDVB_SIT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSIT)(windows_core::Interface::as_raw(self), dwtimeout, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbSiParser_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetPAT: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCAT: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetPMT: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTSDT: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetNIT: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetSDT: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetEIT: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetBAT: unsafe extern "system" fn(*mut core::ffi::c_void, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRST: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetST: unsafe extern "system" fn(*mut core::ffi::c_void, u16, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTDT: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTOT: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetDIT: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetSIT: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDvbSiParser_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, punkmpeg2data: windows_core::Ref<'_, windows_core::IUnknown>) -> windows_core::Result<()>;
    fn GetPAT(&self) -> windows_core::Result<IPAT>;
    fn GetCAT(&self, dwtimeout: u32) -> windows_core::Result<ICAT>;
    fn GetPMT(&self, pid: u16, pwprogramnumber: *const u16) -> windows_core::Result<IPMT>;
    fn GetTSDT(&self) -> windows_core::Result<ITSDT>;
    fn GetNIT(&self, tableid: u8, pwnetworkid: *const u16) -> windows_core::Result<IDVB_NIT>;
    fn GetSDT(&self, tableid: u8, pwtransportstreamid: *const u16) -> windows_core::Result<IDVB_SDT>;
    fn GetEIT(&self, tableid: u8, pwserviceid: *const u16) -> windows_core::Result<IDVB_EIT>;
    fn GetBAT(&self, pwbouquetid: *const u16) -> windows_core::Result<IDVB_BAT>;
    fn GetRST(&self, dwtimeout: u32) -> windows_core::Result<IDVB_RST>;
    fn GetST(&self, pid: u16, dwtimeout: u32) -> windows_core::Result<IDVB_ST>;
    fn GetTDT(&self) -> windows_core::Result<IDVB_TDT>;
    fn GetTOT(&self) -> windows_core::Result<IDVB_TOT>;
    fn GetDIT(&self, dwtimeout: u32) -> windows_core::Result<IDVB_DIT>;
    fn GetSIT(&self, dwtimeout: u32) -> windows_core::Result<IDVB_SIT>;
}
impl IDvbSiParser_Vtbl {
    pub const fn new<Identity: IDvbSiParser_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, punkmpeg2data: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IDvbSiParser_Impl::Initialize(this, core::mem::transmute_copy(&punkmpeg2data)).into()
            }
        }
        unsafe extern "system" fn GetPAT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pppat: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetPAT(this) {
                    Ok(ok__) => {
                        pppat.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCAT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwtimeout: u32, ppcat: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetCAT(this, core::mem::transmute_copy(&dwtimeout)) {
                    Ok(ok__) => {
                        ppcat.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPMT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: u16, pwprogramnumber: *const u16, pppmt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetPMT(this, core::mem::transmute_copy(&pid), core::mem::transmute_copy(&pwprogramnumber)) {
                    Ok(ok__) => {
                        pppmt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTSDT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pptsdt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetTSDT(this) {
                    Ok(ok__) => {
                        pptsdt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetNIT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tableid: u8, pwnetworkid: *const u16, ppnit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetNIT(this, core::mem::transmute_copy(&tableid), core::mem::transmute_copy(&pwnetworkid)) {
                    Ok(ok__) => {
                        ppnit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSDT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tableid: u8, pwtransportstreamid: *const u16, ppsdt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetSDT(this, core::mem::transmute_copy(&tableid), core::mem::transmute_copy(&pwtransportstreamid)) {
                    Ok(ok__) => {
                        ppsdt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEIT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tableid: u8, pwserviceid: *const u16, ppeit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetEIT(this, core::mem::transmute_copy(&tableid), core::mem::transmute_copy(&pwserviceid)) {
                    Ok(ok__) => {
                        ppeit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetBAT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwbouquetid: *const u16, ppbat: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetBAT(this, core::mem::transmute_copy(&pwbouquetid)) {
                    Ok(ok__) => {
                        ppbat.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRST<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwtimeout: u32, pprst: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetRST(this, core::mem::transmute_copy(&dwtimeout)) {
                    Ok(ok__) => {
                        pprst.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetST<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: u16, dwtimeout: u32, ppst: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetST(this, core::mem::transmute_copy(&pid), core::mem::transmute_copy(&dwtimeout)) {
                    Ok(ok__) => {
                        ppst.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTDT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pptdt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetTDT(this) {
                    Ok(ok__) => {
                        pptdt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTOT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pptot: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetTOT(this) {
                    Ok(ok__) => {
                        pptot.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDIT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwtimeout: u32, ppdit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetDIT(this, core::mem::transmute_copy(&dwtimeout)) {
                    Ok(ok__) => {
                        ppdit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSIT<Identity: IDvbSiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwtimeout: u32, ppsit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser_Impl::GetSIT(this, core::mem::transmute_copy(&dwtimeout)) {
                    Ok(ok__) => {
                        ppsit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetPAT: GetPAT::<Identity, OFFSET>,
            GetCAT: GetCAT::<Identity, OFFSET>,
            GetPMT: GetPMT::<Identity, OFFSET>,
            GetTSDT: GetTSDT::<Identity, OFFSET>,
            GetNIT: GetNIT::<Identity, OFFSET>,
            GetSDT: GetSDT::<Identity, OFFSET>,
            GetEIT: GetEIT::<Identity, OFFSET>,
            GetBAT: GetBAT::<Identity, OFFSET>,
            GetRST: GetRST::<Identity, OFFSET>,
            GetST: GetST::<Identity, OFFSET>,
            GetTDT: GetTDT::<Identity, OFFSET>,
            GetTOT: GetTOT::<Identity, OFFSET>,
            GetDIT: GetDIT::<Identity, OFFSET>,
            GetSIT: GetSIT::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbSiParser as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbSiParser {}
windows_core::imp::define_interface!(IDvbSiParser2, IDvbSiParser2_Vtbl, 0x0ac5525f_f816_42f4_93ba_4c0f32f46e54);
impl core::ops::Deref for IDvbSiParser2 {
    type Target = IDvbSiParser;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IDvbSiParser2, windows_core::IUnknown, IDvbSiParser);
impl IDvbSiParser2 {
    pub unsafe fn GetEIT2(&self, tableid: u8, pwserviceid: Option<*const u16>, pbsegment: Option<*const u8>) -> windows_core::Result<IDVB_EIT2> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEIT2)(windows_core::Interface::as_raw(self), tableid, pwserviceid.unwrap_or(core::mem::zeroed()) as _, pbsegment.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbSiParser2_Vtbl {
    pub base__: IDvbSiParser_Vtbl,
    pub GetEIT2: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *const u16, *const u8, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IDvbSiParser2_Impl: IDvbSiParser_Impl {
    fn GetEIT2(&self, tableid: u8, pwserviceid: *const u16, pbsegment: *const u8) -> windows_core::Result<IDVB_EIT2>;
}
impl IDvbSiParser2_Vtbl {
    pub const fn new<Identity: IDvbSiParser2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetEIT2<Identity: IDvbSiParser2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tableid: u8, pwserviceid: *const u16, pbsegment: *const u8, ppeit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSiParser2_Impl::GetEIT2(this, core::mem::transmute_copy(&tableid), core::mem::transmute_copy(&pwserviceid), core::mem::transmute_copy(&pbsegment)) {
                    Ok(ok__) => {
                        ppeit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: IDvbSiParser_Vtbl::new::<Identity, OFFSET>(), GetEIT2: GetEIT2::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbSiParser2 as windows_core::Interface>::IID || iid == &<IDvbSiParser as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbSiParser2 {}
windows_core::imp::define_interface!(IDvbSubtitlingDescriptor, IDvbSubtitlingDescriptor_Vtbl, 0x9b25fe1d_fa23_4e50_9784_6df8b26f8a49);
windows_core::imp::interface_hierarchy!(IDvbSubtitlingDescriptor, windows_core::IUnknown);
impl IDvbSubtitlingDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordLangId(&self, brecordindex: u8) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordLangId)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordSubtitlingType(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordSubtitlingType)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCompositionPageID(&self, brecordindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCompositionPageID)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordAncillaryPageID(&self, brecordindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordAncillaryPageID)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbSubtitlingDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordLangId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32) -> windows_core::HRESULT,
    pub GetRecordSubtitlingType: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCompositionPageID: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u16) -> windows_core::HRESULT,
    pub GetRecordAncillaryPageID: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u16) -> windows_core::HRESULT,
}
pub trait IDvbSubtitlingDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordLangId(&self, brecordindex: u8) -> windows_core::Result<u32>;
    fn GetRecordSubtitlingType(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetRecordCompositionPageID(&self, brecordindex: u8) -> windows_core::Result<u16>;
    fn GetRecordAncillaryPageID(&self, brecordindex: u8) -> windows_core::Result<u16>;
}
impl IDvbSubtitlingDescriptor_Vtbl {
    pub const fn new<Identity: IDvbSubtitlingDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbSubtitlingDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSubtitlingDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbSubtitlingDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSubtitlingDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDvbSubtitlingDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSubtitlingDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordLangId<Identity: IDvbSubtitlingDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pulval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSubtitlingDescriptor_Impl::GetRecordLangId(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pulval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordSubtitlingType<Identity: IDvbSubtitlingDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSubtitlingDescriptor_Impl::GetRecordSubtitlingType(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCompositionPageID<Identity: IDvbSubtitlingDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSubtitlingDescriptor_Impl::GetRecordCompositionPageID(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordAncillaryPageID<Identity: IDvbSubtitlingDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbSubtitlingDescriptor_Impl::GetRecordAncillaryPageID(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordLangId: GetRecordLangId::<Identity, OFFSET>,
            GetRecordSubtitlingType: GetRecordSubtitlingType::<Identity, OFFSET>,
            GetRecordCompositionPageID: GetRecordCompositionPageID::<Identity, OFFSET>,
            GetRecordAncillaryPageID: GetRecordAncillaryPageID::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbSubtitlingDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbSubtitlingDescriptor {}
windows_core::imp::define_interface!(IDvbTeletextDescriptor, IDvbTeletextDescriptor_Vtbl, 0x9cd29d47_69c6_4f92_98a9_210af1b7303a);
windows_core::imp::interface_hierarchy!(IDvbTeletextDescriptor, windows_core::IUnknown);
impl IDvbTeletextDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordLangId(&self, brecordindex: u8) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordLangId)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordTeletextType(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordTeletextType)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordMagazineNumber(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordMagazineNumber)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordPageNumber(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordPageNumber)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbTeletextDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordLangId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32) -> windows_core::HRESULT,
    pub GetRecordTeletextType: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordMagazineNumber: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordPageNumber: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbTeletextDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordLangId(&self, brecordindex: u8) -> windows_core::Result<u32>;
    fn GetRecordTeletextType(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetRecordMagazineNumber(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetRecordPageNumber(&self, brecordindex: u8) -> windows_core::Result<u8>;
}
impl IDvbTeletextDescriptor_Vtbl {
    pub const fn new<Identity: IDvbTeletextDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbTeletextDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTeletextDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbTeletextDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTeletextDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IDvbTeletextDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTeletextDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordLangId<Identity: IDvbTeletextDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pulval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTeletextDescriptor_Impl::GetRecordLangId(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pulval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordTeletextType<Identity: IDvbTeletextDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTeletextDescriptor_Impl::GetRecordTeletextType(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordMagazineNumber<Identity: IDvbTeletextDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTeletextDescriptor_Impl::GetRecordMagazineNumber(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordPageNumber<Identity: IDvbTeletextDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTeletextDescriptor_Impl::GetRecordPageNumber(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordLangId: GetRecordLangId::<Identity, OFFSET>,
            GetRecordTeletextType: GetRecordTeletextType::<Identity, OFFSET>,
            GetRecordMagazineNumber: GetRecordMagazineNumber::<Identity, OFFSET>,
            GetRecordPageNumber: GetRecordPageNumber::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbTeletextDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbTeletextDescriptor {}
windows_core::imp::define_interface!(IDvbTerrestrial2DeliverySystemDescriptor, IDvbTerrestrial2DeliverySystemDescriptor_Vtbl, 0x20ee9be9_cd57_49ab_8f6e_1d07aeb8e482);
windows_core::imp::interface_hierarchy!(IDvbTerrestrial2DeliverySystemDescriptor, windows_core::IUnknown);
impl IDvbTerrestrial2DeliverySystemDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTagExtension(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTagExtension)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCentreFrequency(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCentreFrequency)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetPLPId(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPLPId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetT2SystemId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetT2SystemId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetMultipleInputMode(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetMultipleInputMode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetBandwidth(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetBandwidth)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetGuardInterval(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetGuardInterval)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTransmissionMode(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTransmissionMode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCellId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCellId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOtherFrequencyFlag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOtherFrequencyFlag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTFSFlag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTFSFlag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbTerrestrial2DeliverySystemDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTagExtension: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCentreFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetPLPId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetT2SystemId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetMultipleInputMode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetBandwidth: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetGuardInterval: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTransmissionMode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCellId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetOtherFrequencyFlag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTFSFlag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbTerrestrial2DeliverySystemDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetTagExtension(&self) -> windows_core::Result<u8>;
    fn GetCentreFrequency(&self) -> windows_core::Result<u32>;
    fn GetPLPId(&self) -> windows_core::Result<u8>;
    fn GetT2SystemId(&self) -> windows_core::Result<u16>;
    fn GetMultipleInputMode(&self) -> windows_core::Result<u8>;
    fn GetBandwidth(&self) -> windows_core::Result<u8>;
    fn GetGuardInterval(&self) -> windows_core::Result<u8>;
    fn GetTransmissionMode(&self) -> windows_core::Result<u8>;
    fn GetCellId(&self) -> windows_core::Result<u16>;
    fn GetOtherFrequencyFlag(&self) -> windows_core::Result<u8>;
    fn GetTFSFlag(&self) -> windows_core::Result<u8>;
}
impl IDvbTerrestrial2DeliverySystemDescriptor_Vtbl {
    pub const fn new<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTagExtension<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetTagExtension(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCentreFrequency<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetCentreFrequency(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPLPId<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetPLPId(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetT2SystemId<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetT2SystemId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetMultipleInputMode<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetMultipleInputMode(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetBandwidth<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetBandwidth(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetGuardInterval<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetGuardInterval(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTransmissionMode<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetTransmissionMode(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCellId<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetCellId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOtherFrequencyFlag<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetOtherFrequencyFlag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTFSFlag<Identity: IDvbTerrestrial2DeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrial2DeliverySystemDescriptor_Impl::GetTFSFlag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetTagExtension: GetTagExtension::<Identity, OFFSET>,
            GetCentreFrequency: GetCentreFrequency::<Identity, OFFSET>,
            GetPLPId: GetPLPId::<Identity, OFFSET>,
            GetT2SystemId: GetT2SystemId::<Identity, OFFSET>,
            GetMultipleInputMode: GetMultipleInputMode::<Identity, OFFSET>,
            GetBandwidth: GetBandwidth::<Identity, OFFSET>,
            GetGuardInterval: GetGuardInterval::<Identity, OFFSET>,
            GetTransmissionMode: GetTransmissionMode::<Identity, OFFSET>,
            GetCellId: GetCellId::<Identity, OFFSET>,
            GetOtherFrequencyFlag: GetOtherFrequencyFlag::<Identity, OFFSET>,
            GetTFSFlag: GetTFSFlag::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbTerrestrial2DeliverySystemDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbTerrestrial2DeliverySystemDescriptor {}
windows_core::imp::define_interface!(IDvbTerrestrialDeliverySystemDescriptor, IDvbTerrestrialDeliverySystemDescriptor_Vtbl, 0xed7e1b91_d12e_420c_b41d_a49d84fe1823);
windows_core::imp::interface_hierarchy!(IDvbTerrestrialDeliverySystemDescriptor, windows_core::IUnknown);
impl IDvbTerrestrialDeliverySystemDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCentreFrequency(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCentreFrequency)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetBandwidth(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetBandwidth)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetConstellation(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetConstellation)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetHierarchyInformation(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetHierarchyInformation)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCodeRateHPStream(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCodeRateHPStream)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCodeRateLPStream(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCodeRateLPStream)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetGuardInterval(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetGuardInterval)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTransmissionMode(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTransmissionMode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOtherFrequencyFlag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOtherFrequencyFlag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IDvbTerrestrialDeliverySystemDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCentreFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetBandwidth: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetConstellation: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetHierarchyInformation: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCodeRateHPStream: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCodeRateLPStream: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetGuardInterval: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTransmissionMode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetOtherFrequencyFlag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
}
pub trait IDvbTerrestrialDeliverySystemDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCentreFrequency(&self) -> windows_core::Result<u32>;
    fn GetBandwidth(&self) -> windows_core::Result<u8>;
    fn GetConstellation(&self) -> windows_core::Result<u8>;
    fn GetHierarchyInformation(&self) -> windows_core::Result<u8>;
    fn GetCodeRateHPStream(&self) -> windows_core::Result<u8>;
    fn GetCodeRateLPStream(&self) -> windows_core::Result<u8>;
    fn GetGuardInterval(&self) -> windows_core::Result<u8>;
    fn GetTransmissionMode(&self) -> windows_core::Result<u8>;
    fn GetOtherFrequencyFlag(&self) -> windows_core::Result<u8>;
}
impl IDvbTerrestrialDeliverySystemDescriptor_Vtbl {
    pub const fn new<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrialDeliverySystemDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrialDeliverySystemDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCentreFrequency<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrialDeliverySystemDescriptor_Impl::GetCentreFrequency(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetBandwidth<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrialDeliverySystemDescriptor_Impl::GetBandwidth(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetConstellation<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrialDeliverySystemDescriptor_Impl::GetConstellation(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetHierarchyInformation<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrialDeliverySystemDescriptor_Impl::GetHierarchyInformation(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCodeRateHPStream<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrialDeliverySystemDescriptor_Impl::GetCodeRateHPStream(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCodeRateLPStream<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrialDeliverySystemDescriptor_Impl::GetCodeRateLPStream(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetGuardInterval<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrialDeliverySystemDescriptor_Impl::GetGuardInterval(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTransmissionMode<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrialDeliverySystemDescriptor_Impl::GetTransmissionMode(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOtherFrequencyFlag<Identity: IDvbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IDvbTerrestrialDeliverySystemDescriptor_Impl::GetOtherFrequencyFlag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCentreFrequency: GetCentreFrequency::<Identity, OFFSET>,
            GetBandwidth: GetBandwidth::<Identity, OFFSET>,
            GetConstellation: GetConstellation::<Identity, OFFSET>,
            GetHierarchyInformation: GetHierarchyInformation::<Identity, OFFSET>,
            GetCodeRateHPStream: GetCodeRateHPStream::<Identity, OFFSET>,
            GetCodeRateLPStream: GetCodeRateLPStream::<Identity, OFFSET>,
            GetGuardInterval: GetGuardInterval::<Identity, OFFSET>,
            GetTransmissionMode: GetTransmissionMode::<Identity, OFFSET>,
            GetOtherFrequencyFlag: GetOtherFrequencyFlag::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IDvbTerrestrialDeliverySystemDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IDvbTerrestrialDeliverySystemDescriptor {}
windows_core::imp::define_interface!(IESCloseMmiEvent, IESCloseMmiEvent_Vtbl, 0x6b80e96f_55e2_45aa_b754_0c23c8e7d5c1);
impl core::ops::Deref for IESCloseMmiEvent {
    type Target = super::IESEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IESCloseMmiEvent, windows_core::IUnknown, super::IESEvent);
impl IESCloseMmiEvent {
    pub unsafe fn GetDialogNumber(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDialogNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IESCloseMmiEvent_Vtbl {
    pub base__: super::IESEvent_Vtbl,
    pub GetDialogNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IESCloseMmiEvent_Impl: super::IESEvent_Impl {
    fn GetDialogNumber(&self) -> windows_core::Result<u32>;
}
#[cfg(feature = "Win32_System_Com")]
impl IESCloseMmiEvent_Vtbl {
    pub const fn new<Identity: IESCloseMmiEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetDialogNumber<Identity: IESCloseMmiEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdialognumber: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESCloseMmiEvent_Impl::GetDialogNumber(this) {
                    Ok(ok__) => {
                        pdialognumber.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: super::IESEvent_Vtbl::new::<Identity, OFFSET>(), GetDialogNumber: GetDialogNumber::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IESCloseMmiEvent as windows_core::Interface>::IID || iid == &<super::IESEvent as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IESCloseMmiEvent {}
windows_core::imp::define_interface!(IESEventFactory, IESEventFactory_Vtbl, 0x506a09b8_7f86_4e04_ac05_3303bfe8fc49);
windows_core::imp::interface_hierarchy!(IESEventFactory, windows_core::IUnknown);
impl IESEventFactory {
    pub unsafe fn CreateESEvent<P0, P6>(&self, pserviceprovider: P0, dweventid: u32, guideventtype: windows_core::GUID, peventdata: &[u8], bstrbaseurl: &windows_core::BSTR, pinitcontext: P6) -> windows_core::Result<super::IESEvent>
    where
        P0: windows_core::Param<windows_core::IUnknown>,
        P6: windows_core::Param<windows_core::IUnknown>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CreateESEvent)(windows_core::Interface::as_raw(self), pserviceprovider.param().abi(), dweventid, core::mem::transmute(guideventtype), peventdata.len().try_into().unwrap(), core::mem::transmute(peventdata.as_ptr()), core::mem::transmute_copy(bstrbaseurl), pinitcontext.param().abi(), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IESEventFactory_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub CreateESEvent: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, u32, windows_core::GUID, u32, *const u8, *mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IESEventFactory_Impl: windows_core::IUnknownImpl {
    fn CreateESEvent(&self, pserviceprovider: windows_core::Ref<'_, windows_core::IUnknown>, dweventid: u32, guideventtype: &windows_core::GUID, dweventdatalength: u32, peventdata: *const u8, bstrbaseurl: &windows_core::BSTR, pinitcontext: windows_core::Ref<'_, windows_core::IUnknown>) -> windows_core::Result<super::IESEvent>;
}
impl IESEventFactory_Vtbl {
    pub const fn new<Identity: IESEventFactory_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn CreateESEvent<Identity: IESEventFactory_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pserviceprovider: *mut core::ffi::c_void, dweventid: u32, guideventtype: windows_core::GUID, dweventdatalength: u32, peventdata: *const u8, bstrbaseurl: *mut core::ffi::c_void, pinitcontext: *mut core::ffi::c_void, ppesevent: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESEventFactory_Impl::CreateESEvent(this, core::mem::transmute_copy(&pserviceprovider), core::mem::transmute_copy(&dweventid), core::mem::transmute(&guideventtype), core::mem::transmute_copy(&dweventdatalength), core::mem::transmute_copy(&peventdata), core::mem::transmute(&bstrbaseurl), core::mem::transmute_copy(&pinitcontext)) {
                    Ok(ok__) => {
                        ppesevent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), CreateESEvent: CreateESEvent::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IESEventFactory as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IESEventFactory {}
windows_core::imp::define_interface!(IESEventService, IESEventService_Vtbl, 0xed89a619_4c06_4b2f_99eb_c7669b13047c);
windows_core::imp::interface_hierarchy!(IESEventService, windows_core::IUnknown);
impl IESEventService {
    pub unsafe fn FireESEvent<P0>(&self, pesevent: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<super::IESEvent>,
    {
        unsafe { (windows_core::Interface::vtable(self).FireESEvent)(windows_core::Interface::as_raw(self), pesevent.param().abi()).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IESEventService_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub FireESEvent: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IESEventService_Impl: windows_core::IUnknownImpl {
    fn FireESEvent(&self, pesevent: windows_core::Ref<'_, super::IESEvent>) -> windows_core::Result<()>;
}
impl IESEventService_Vtbl {
    pub const fn new<Identity: IESEventService_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn FireESEvent<Identity: IESEventService_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pesevent: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IESEventService_Impl::FireESEvent(this, core::mem::transmute_copy(&pesevent)).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), FireESEvent: FireESEvent::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IESEventService as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IESEventService {}
windows_core::imp::define_interface!(IESEventServiceConfiguration, IESEventServiceConfiguration_Vtbl, 0x33b9daae_9309_491d_a051_bcad2a70cd66);
windows_core::imp::interface_hierarchy!(IESEventServiceConfiguration, windows_core::IUnknown);
impl IESEventServiceConfiguration {
    pub unsafe fn SetParent<P0>(&self, peventservice: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IESEventService>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetParent)(windows_core::Interface::as_raw(self), peventservice.param().abi()).ok() }
    }
    pub unsafe fn RemoveParent(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RemoveParent)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn SetOwner<P0>(&self, pesevents: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<super::IESEvents>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetOwner)(windows_core::Interface::as_raw(self), pesevents.param().abi()).ok() }
    }
    pub unsafe fn RemoveOwner(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RemoveOwner)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn SetGraph<P0>(&self, pgraph: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<super::IFilterGraph>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetGraph)(windows_core::Interface::as_raw(self), pgraph.param().abi()).ok() }
    }
    pub unsafe fn RemoveGraph<P0>(&self, pgraph: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<super::IFilterGraph>,
    {
        unsafe { (windows_core::Interface::vtable(self).RemoveGraph)(windows_core::Interface::as_raw(self), pgraph.param().abi()).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IESEventServiceConfiguration_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub SetParent: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RemoveParent: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetOwner: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RemoveOwner: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetGraph: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RemoveGraph: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IESEventServiceConfiguration_Impl: windows_core::IUnknownImpl {
    fn SetParent(&self, peventservice: windows_core::Ref<'_, IESEventService>) -> windows_core::Result<()>;
    fn RemoveParent(&self) -> windows_core::Result<()>;
    fn SetOwner(&self, pesevents: windows_core::Ref<'_, super::IESEvents>) -> windows_core::Result<()>;
    fn RemoveOwner(&self) -> windows_core::Result<()>;
    fn SetGraph(&self, pgraph: windows_core::Ref<'_, super::IFilterGraph>) -> windows_core::Result<()>;
    fn RemoveGraph(&self, pgraph: windows_core::Ref<'_, super::IFilterGraph>) -> windows_core::Result<()>;
}
impl IESEventServiceConfiguration_Vtbl {
    pub const fn new<Identity: IESEventServiceConfiguration_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetParent<Identity: IESEventServiceConfiguration_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, peventservice: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IESEventServiceConfiguration_Impl::SetParent(this, core::mem::transmute_copy(&peventservice)).into()
            }
        }
        unsafe extern "system" fn RemoveParent<Identity: IESEventServiceConfiguration_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IESEventServiceConfiguration_Impl::RemoveParent(this).into()
            }
        }
        unsafe extern "system" fn SetOwner<Identity: IESEventServiceConfiguration_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pesevents: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IESEventServiceConfiguration_Impl::SetOwner(this, core::mem::transmute_copy(&pesevents)).into()
            }
        }
        unsafe extern "system" fn RemoveOwner<Identity: IESEventServiceConfiguration_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IESEventServiceConfiguration_Impl::RemoveOwner(this).into()
            }
        }
        unsafe extern "system" fn SetGraph<Identity: IESEventServiceConfiguration_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pgraph: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IESEventServiceConfiguration_Impl::SetGraph(this, core::mem::transmute_copy(&pgraph)).into()
            }
        }
        unsafe extern "system" fn RemoveGraph<Identity: IESEventServiceConfiguration_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pgraph: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IESEventServiceConfiguration_Impl::RemoveGraph(this, core::mem::transmute_copy(&pgraph)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            SetParent: SetParent::<Identity, OFFSET>,
            RemoveParent: RemoveParent::<Identity, OFFSET>,
            SetOwner: SetOwner::<Identity, OFFSET>,
            RemoveOwner: RemoveOwner::<Identity, OFFSET>,
            SetGraph: SetGraph::<Identity, OFFSET>,
            RemoveGraph: RemoveGraph::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IESEventServiceConfiguration as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IESEventServiceConfiguration {}
windows_core::imp::define_interface!(IESFileExpiryDateEvent, IESFileExpiryDateEvent_Vtbl, 0xba9edcb6_4d36_4cfe_8c56_87a6b0ca48e1);
impl core::ops::Deref for IESFileExpiryDateEvent {
    type Target = super::IESEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IESFileExpiryDateEvent, windows_core::IUnknown, super::IESEvent);
impl IESFileExpiryDateEvent {
    pub unsafe fn GetTunerId(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTunerId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetExpiryDate(&self) -> windows_core::Result<u64> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetExpiryDate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetFinalExpiryDate(&self) -> windows_core::Result<u64> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetFinalExpiryDate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetMaxRenewalCount(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetMaxRenewalCount)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn IsEntitlementTokenPresent(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).IsEntitlementTokenPresent)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn DoesExpireAfterFirstUse(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DoesExpireAfterFirstUse)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IESFileExpiryDateEvent_Vtbl {
    pub base__: super::IESEvent_Vtbl,
    pub GetTunerId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub GetExpiryDate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u64) -> windows_core::HRESULT,
    pub GetFinalExpiryDate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u64) -> windows_core::HRESULT,
    pub GetMaxRenewalCount: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub IsEntitlementTokenPresent: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub DoesExpireAfterFirstUse: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IESFileExpiryDateEvent_Impl: super::IESEvent_Impl {
    fn GetTunerId(&self) -> windows_core::Result<windows_core::GUID>;
    fn GetExpiryDate(&self) -> windows_core::Result<u64>;
    fn GetFinalExpiryDate(&self) -> windows_core::Result<u64>;
    fn GetMaxRenewalCount(&self) -> windows_core::Result<u32>;
    fn IsEntitlementTokenPresent(&self) -> windows_core::Result<windows_core::BOOL>;
    fn DoesExpireAfterFirstUse(&self) -> windows_core::Result<windows_core::BOOL>;
}
#[cfg(feature = "Win32_System_Com")]
impl IESFileExpiryDateEvent_Vtbl {
    pub const fn new<Identity: IESFileExpiryDateEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTunerId<Identity: IESFileExpiryDateEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pguidtunerid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESFileExpiryDateEvent_Impl::GetTunerId(this) {
                    Ok(ok__) => {
                        pguidtunerid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetExpiryDate<Identity: IESFileExpiryDateEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pqwexpirydate: *mut u64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESFileExpiryDateEvent_Impl::GetExpiryDate(this) {
                    Ok(ok__) => {
                        pqwexpirydate.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetFinalExpiryDate<Identity: IESFileExpiryDateEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pqwexpirydate: *mut u64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESFileExpiryDateEvent_Impl::GetFinalExpiryDate(this) {
                    Ok(ok__) => {
                        pqwexpirydate.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetMaxRenewalCount<Identity: IESFileExpiryDateEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwmaxrenewalcount: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESFileExpiryDateEvent_Impl::GetMaxRenewalCount(this) {
                    Ok(ok__) => {
                        dwmaxrenewalcount.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn IsEntitlementTokenPresent<Identity: IESFileExpiryDateEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfenttokenpresent: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESFileExpiryDateEvent_Impl::IsEntitlementTokenPresent(this) {
                    Ok(ok__) => {
                        pfenttokenpresent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DoesExpireAfterFirstUse<Identity: IESFileExpiryDateEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfexpireafterfirstuse: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESFileExpiryDateEvent_Impl::DoesExpireAfterFirstUse(this) {
                    Ok(ok__) => {
                        pfexpireafterfirstuse.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::IESEvent_Vtbl::new::<Identity, OFFSET>(),
            GetTunerId: GetTunerId::<Identity, OFFSET>,
            GetExpiryDate: GetExpiryDate::<Identity, OFFSET>,
            GetFinalExpiryDate: GetFinalExpiryDate::<Identity, OFFSET>,
            GetMaxRenewalCount: GetMaxRenewalCount::<Identity, OFFSET>,
            IsEntitlementTokenPresent: IsEntitlementTokenPresent::<Identity, OFFSET>,
            DoesExpireAfterFirstUse: DoesExpireAfterFirstUse::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IESFileExpiryDateEvent as windows_core::Interface>::IID || iid == &<super::IESEvent as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IESFileExpiryDateEvent {}
windows_core::imp::define_interface!(IESIsdbCasResponseEvent, IESIsdbCasResponseEvent_Vtbl, 0x2017cb03_dc0f_4c24_83ca_36307b2cd19f);
impl core::ops::Deref for IESIsdbCasResponseEvent {
    type Target = super::IESEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IESIsdbCasResponseEvent, windows_core::IUnknown, super::IESEvent);
impl IESIsdbCasResponseEvent {
    pub unsafe fn GetRequestId(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRequestId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetStatus(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetStatus)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDataLength(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDataLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetResponseData(&self) -> windows_core::Result<*mut super::super::super::System::Com::SAFEARRAY> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetResponseData)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IESIsdbCasResponseEvent_Vtbl {
    pub base__: super::IESEvent_Vtbl,
    pub GetRequestId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetStatus: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetDataLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Com")]
    pub GetResponseData: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut super::super::super::System::Com::SAFEARRAY) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetResponseData: usize,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IESIsdbCasResponseEvent_Impl: super::IESEvent_Impl {
    fn GetRequestId(&self) -> windows_core::Result<u32>;
    fn GetStatus(&self) -> windows_core::Result<u32>;
    fn GetDataLength(&self) -> windows_core::Result<u32>;
    fn GetResponseData(&self) -> windows_core::Result<*mut super::super::super::System::Com::SAFEARRAY>;
}
#[cfg(feature = "Win32_System_Com")]
impl IESIsdbCasResponseEvent_Vtbl {
    pub const fn new<Identity: IESIsdbCasResponseEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetRequestId<Identity: IESIsdbCasResponseEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prequestid: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESIsdbCasResponseEvent_Impl::GetRequestId(this) {
                    Ok(ok__) => {
                        prequestid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetStatus<Identity: IESIsdbCasResponseEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pstatus: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESIsdbCasResponseEvent_Impl::GetStatus(this) {
                    Ok(ok__) => {
                        pstatus.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDataLength<Identity: IESIsdbCasResponseEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prequestlength: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESIsdbCasResponseEvent_Impl::GetDataLength(this) {
                    Ok(ok__) => {
                        prequestlength.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetResponseData<Identity: IESIsdbCasResponseEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbdata: *mut *mut super::super::super::System::Com::SAFEARRAY) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESIsdbCasResponseEvent_Impl::GetResponseData(this) {
                    Ok(ok__) => {
                        pbdata.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::IESEvent_Vtbl::new::<Identity, OFFSET>(),
            GetRequestId: GetRequestId::<Identity, OFFSET>,
            GetStatus: GetStatus::<Identity, OFFSET>,
            GetDataLength: GetDataLength::<Identity, OFFSET>,
            GetResponseData: GetResponseData::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IESIsdbCasResponseEvent as windows_core::Interface>::IID || iid == &<super::IESEvent as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IESIsdbCasResponseEvent {}
windows_core::imp::define_interface!(IESLicenseRenewalResultEvent, IESLicenseRenewalResultEvent_Vtbl, 0xd5a48ef5_a81b_4df0_acaa_5e35e7ea45d4);
impl core::ops::Deref for IESLicenseRenewalResultEvent {
    type Target = super::IESEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IESLicenseRenewalResultEvent, windows_core::IUnknown, super::IESEvent);
impl IESLicenseRenewalResultEvent {
    pub unsafe fn GetCallersId(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCallersId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetFileName(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetFileName)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn IsRenewalSuccessful(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).IsRenewalSuccessful)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn IsCheckEntitlementCallRequired(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).IsCheckEntitlementCallRequired)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDescrambledStatus(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDescrambledStatus)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRenewalResultCode(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRenewalResultCode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCASFailureCode(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCASFailureCode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRenewalHResult(&self) -> windows_core::Result<windows_core::HRESULT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRenewalHResult)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetEntitlementTokenLength(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEntitlementTokenLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetEntitlementToken(&self) -> windows_core::Result<*mut super::super::super::System::Com::SAFEARRAY> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEntitlementToken)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetExpiryDate(&self) -> windows_core::Result<u64> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetExpiryDate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IESLicenseRenewalResultEvent_Vtbl {
    pub base__: super::IESEvent_Vtbl,
    pub GetCallersId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetFileName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub IsRenewalSuccessful: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub IsCheckEntitlementCallRequired: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetDescrambledStatus: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRenewalResultCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetCASFailureCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRenewalHResult: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::HRESULT) -> windows_core::HRESULT,
    pub GetEntitlementTokenLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Com")]
    pub GetEntitlementToken: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut super::super::super::System::Com::SAFEARRAY) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetEntitlementToken: usize,
    pub GetExpiryDate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u64) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IESLicenseRenewalResultEvent_Impl: super::IESEvent_Impl {
    fn GetCallersId(&self) -> windows_core::Result<u32>;
    fn GetFileName(&self) -> windows_core::Result<windows_core::BSTR>;
    fn IsRenewalSuccessful(&self) -> windows_core::Result<windows_core::BOOL>;
    fn IsCheckEntitlementCallRequired(&self) -> windows_core::Result<windows_core::BOOL>;
    fn GetDescrambledStatus(&self) -> windows_core::Result<u32>;
    fn GetRenewalResultCode(&self) -> windows_core::Result<u32>;
    fn GetCASFailureCode(&self) -> windows_core::Result<u32>;
    fn GetRenewalHResult(&self) -> windows_core::Result<windows_core::HRESULT>;
    fn GetEntitlementTokenLength(&self) -> windows_core::Result<u32>;
    fn GetEntitlementToken(&self) -> windows_core::Result<*mut super::super::super::System::Com::SAFEARRAY>;
    fn GetExpiryDate(&self) -> windows_core::Result<u64>;
}
#[cfg(feature = "Win32_System_Com")]
impl IESLicenseRenewalResultEvent_Vtbl {
    pub const fn new<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetCallersId<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwcallersid: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESLicenseRenewalResultEvent_Impl::GetCallersId(this) {
                    Ok(ok__) => {
                        pdwcallersid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetFileName<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbstrfilename: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESLicenseRenewalResultEvent_Impl::GetFileName(this) {
                    Ok(ok__) => {
                        pbstrfilename.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn IsRenewalSuccessful<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfrenewalsuccessful: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESLicenseRenewalResultEvent_Impl::IsRenewalSuccessful(this) {
                    Ok(ok__) => {
                        pfrenewalsuccessful.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn IsCheckEntitlementCallRequired<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfcheckenttokencallneeded: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESLicenseRenewalResultEvent_Impl::IsCheckEntitlementCallRequired(this) {
                    Ok(ok__) => {
                        pfcheckenttokencallneeded.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDescrambledStatus<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdescrambledstatus: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESLicenseRenewalResultEvent_Impl::GetDescrambledStatus(this) {
                    Ok(ok__) => {
                        pdescrambledstatus.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRenewalResultCode<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwrenewalresultcode: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESLicenseRenewalResultEvent_Impl::GetRenewalResultCode(this) {
                    Ok(ok__) => {
                        pdwrenewalresultcode.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCASFailureCode<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwcasfailurecode: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESLicenseRenewalResultEvent_Impl::GetCASFailureCode(this) {
                    Ok(ok__) => {
                        pdwcasfailurecode.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRenewalHResult<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, phr: *mut windows_core::HRESULT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESLicenseRenewalResultEvent_Impl::GetRenewalHResult(this) {
                    Ok(ok__) => {
                        phr.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEntitlementTokenLength<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwlength: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESLicenseRenewalResultEvent_Impl::GetEntitlementTokenLength(this) {
                    Ok(ok__) => {
                        pdwlength.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEntitlementToken<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbdata: *mut *mut super::super::super::System::Com::SAFEARRAY) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESLicenseRenewalResultEvent_Impl::GetEntitlementToken(this) {
                    Ok(ok__) => {
                        pbdata.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetExpiryDate<Identity: IESLicenseRenewalResultEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pqwexpirydate: *mut u64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESLicenseRenewalResultEvent_Impl::GetExpiryDate(this) {
                    Ok(ok__) => {
                        pqwexpirydate.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::IESEvent_Vtbl::new::<Identity, OFFSET>(),
            GetCallersId: GetCallersId::<Identity, OFFSET>,
            GetFileName: GetFileName::<Identity, OFFSET>,
            IsRenewalSuccessful: IsRenewalSuccessful::<Identity, OFFSET>,
            IsCheckEntitlementCallRequired: IsCheckEntitlementCallRequired::<Identity, OFFSET>,
            GetDescrambledStatus: GetDescrambledStatus::<Identity, OFFSET>,
            GetRenewalResultCode: GetRenewalResultCode::<Identity, OFFSET>,
            GetCASFailureCode: GetCASFailureCode::<Identity, OFFSET>,
            GetRenewalHResult: GetRenewalHResult::<Identity, OFFSET>,
            GetEntitlementTokenLength: GetEntitlementTokenLength::<Identity, OFFSET>,
            GetEntitlementToken: GetEntitlementToken::<Identity, OFFSET>,
            GetExpiryDate: GetExpiryDate::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IESLicenseRenewalResultEvent as windows_core::Interface>::IID || iid == &<super::IESEvent as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IESLicenseRenewalResultEvent {}
windows_core::imp::define_interface!(IESOpenMmiEvent, IESOpenMmiEvent_Vtbl, 0xba4b6526_1a35_4635_8b56_3ec612746a8c);
impl core::ops::Deref for IESOpenMmiEvent {
    type Target = super::IESEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IESOpenMmiEvent, windows_core::IUnknown, super::IESEvent);
impl IESOpenMmiEvent {
    pub unsafe fn GetDialogNumber(&self, pdialogrequest: *mut u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDialogNumber)(windows_core::Interface::as_raw(self), pdialogrequest as _, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDialogType(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDialogType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetDialogData(&self) -> windows_core::Result<*mut super::super::super::System::Com::SAFEARRAY> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDialogData)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDialogStringData(&self, pbstrbaseurl: *mut windows_core::BSTR) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDialogStringData)(windows_core::Interface::as_raw(self), core::mem::transmute(pbstrbaseurl), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IESOpenMmiEvent_Vtbl {
    pub base__: super::IESEvent_Vtbl,
    pub GetDialogNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32, *mut u32) -> windows_core::HRESULT,
    pub GetDialogType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Com")]
    pub GetDialogData: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut super::super::super::System::Com::SAFEARRAY) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetDialogData: usize,
    pub GetDialogStringData: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IESOpenMmiEvent_Impl: super::IESEvent_Impl {
    fn GetDialogNumber(&self, pdialogrequest: *mut u32) -> windows_core::Result<u32>;
    fn GetDialogType(&self) -> windows_core::Result<windows_core::GUID>;
    fn GetDialogData(&self) -> windows_core::Result<*mut super::super::super::System::Com::SAFEARRAY>;
    fn GetDialogStringData(&self, pbstrbaseurl: *mut windows_core::BSTR) -> windows_core::Result<windows_core::BSTR>;
}
#[cfg(feature = "Win32_System_Com")]
impl IESOpenMmiEvent_Vtbl {
    pub const fn new<Identity: IESOpenMmiEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetDialogNumber<Identity: IESOpenMmiEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdialogrequest: *mut u32, pdialognumber: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESOpenMmiEvent_Impl::GetDialogNumber(this, core::mem::transmute_copy(&pdialogrequest)) {
                    Ok(ok__) => {
                        pdialognumber.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDialogType<Identity: IESOpenMmiEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guiddialogtype: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESOpenMmiEvent_Impl::GetDialogType(this) {
                    Ok(ok__) => {
                        guiddialogtype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDialogData<Identity: IESOpenMmiEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbdata: *mut *mut super::super::super::System::Com::SAFEARRAY) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESOpenMmiEvent_Impl::GetDialogData(this) {
                    Ok(ok__) => {
                        pbdata.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDialogStringData<Identity: IESOpenMmiEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbstrbaseurl: *mut *mut core::ffi::c_void, pbstrdata: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESOpenMmiEvent_Impl::GetDialogStringData(this, core::mem::transmute_copy(&pbstrbaseurl)) {
                    Ok(ok__) => {
                        pbstrdata.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::IESEvent_Vtbl::new::<Identity, OFFSET>(),
            GetDialogNumber: GetDialogNumber::<Identity, OFFSET>,
            GetDialogType: GetDialogType::<Identity, OFFSET>,
            GetDialogData: GetDialogData::<Identity, OFFSET>,
            GetDialogStringData: GetDialogStringData::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IESOpenMmiEvent as windows_core::Interface>::IID || iid == &<super::IESEvent as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IESOpenMmiEvent {}
windows_core::imp::define_interface!(IESRequestTunerEvent, IESRequestTunerEvent_Vtbl, 0x54c7a5e8_c3bb_4f51_af14_e0e2c0e34c6d);
impl core::ops::Deref for IESRequestTunerEvent {
    type Target = super::IESEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IESRequestTunerEvent, windows_core::IUnknown, super::IESEvent);
impl IESRequestTunerEvent {
    pub unsafe fn GetPriority(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPriority)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetReason(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetReason)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetConsequences(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetConsequences)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetEstimatedTime(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEstimatedTime)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IESRequestTunerEvent_Vtbl {
    pub base__: super::IESEvent_Vtbl,
    pub GetPriority: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetReason: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetConsequences: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetEstimatedTime: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IESRequestTunerEvent_Impl: super::IESEvent_Impl {
    fn GetPriority(&self) -> windows_core::Result<u8>;
    fn GetReason(&self) -> windows_core::Result<u8>;
    fn GetConsequences(&self) -> windows_core::Result<u8>;
    fn GetEstimatedTime(&self) -> windows_core::Result<u32>;
}
#[cfg(feature = "Win32_System_Com")]
impl IESRequestTunerEvent_Vtbl {
    pub const fn new<Identity: IESRequestTunerEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetPriority<Identity: IESRequestTunerEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbypriority: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESRequestTunerEvent_Impl::GetPriority(this) {
                    Ok(ok__) => {
                        pbypriority.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetReason<Identity: IESRequestTunerEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbyreason: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESRequestTunerEvent_Impl::GetReason(this) {
                    Ok(ok__) => {
                        pbyreason.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetConsequences<Identity: IESRequestTunerEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbyconsequences: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESRequestTunerEvent_Impl::GetConsequences(this) {
                    Ok(ok__) => {
                        pbyconsequences.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEstimatedTime<Identity: IESRequestTunerEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwestimatedtime: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESRequestTunerEvent_Impl::GetEstimatedTime(this) {
                    Ok(ok__) => {
                        pdwestimatedtime.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::IESEvent_Vtbl::new::<Identity, OFFSET>(),
            GetPriority: GetPriority::<Identity, OFFSET>,
            GetReason: GetReason::<Identity, OFFSET>,
            GetConsequences: GetConsequences::<Identity, OFFSET>,
            GetEstimatedTime: GetEstimatedTime::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IESRequestTunerEvent as windows_core::Interface>::IID || iid == &<super::IESEvent as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IESRequestTunerEvent {}
windows_core::imp::define_interface!(IESValueUpdatedEvent, IESValueUpdatedEvent_Vtbl, 0x8a24c46e_bb63_4664_8602_5d9c718c146d);
impl core::ops::Deref for IESValueUpdatedEvent {
    type Target = super::IESEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IESValueUpdatedEvent, windows_core::IUnknown, super::IESEvent);
impl IESValueUpdatedEvent {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetValueNames(&self) -> windows_core::Result<*mut super::super::super::System::Com::SAFEARRAY> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetValueNames)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IESValueUpdatedEvent_Vtbl {
    pub base__: super::IESEvent_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub GetValueNames: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut super::super::super::System::Com::SAFEARRAY) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetValueNames: usize,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IESValueUpdatedEvent_Impl: super::IESEvent_Impl {
    fn GetValueNames(&self) -> windows_core::Result<*mut super::super::super::System::Com::SAFEARRAY>;
}
#[cfg(feature = "Win32_System_Com")]
impl IESValueUpdatedEvent_Vtbl {
    pub const fn new<Identity: IESValueUpdatedEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetValueNames<Identity: IESValueUpdatedEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbstrnames: *mut *mut super::super::super::System::Com::SAFEARRAY) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IESValueUpdatedEvent_Impl::GetValueNames(this) {
                    Ok(ok__) => {
                        pbstrnames.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: super::IESEvent_Vtbl::new::<Identity, OFFSET>(), GetValueNames: GetValueNames::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IESValueUpdatedEvent as windows_core::Interface>::IID || iid == &<super::IESEvent as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IESValueUpdatedEvent {}
windows_core::imp::define_interface!(IETFilter, IETFilter_Vtbl, 0xc4c4c4b1_0049_4e2b_98fb_9537f6ce516d);
windows_core::imp::interface_hierarchy!(IETFilter, windows_core::IUnknown);
impl IETFilter {
    pub unsafe fn EvalRatObjOK(&self) -> windows_core::Result<windows_core::HRESULT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EvalRatObjOK)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCurrRating(&self, pensystem: *mut EnTvRat_System, penrating: *mut EnTvRat_GenericLevel, plbfenattr: *mut i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetCurrRating)(windows_core::Interface::as_raw(self), pensystem as _, penrating as _, plbfenattr as _).ok() }
    }
    pub unsafe fn GetCurrLicenseExpDate(&self, prottype: *const ProtType) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCurrLicenseExpDate)(windows_core::Interface::as_raw(self), prottype, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLastErrorCode(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLastErrorCode)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn SetRecordingOn(&self, frecstate: bool) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetRecordingOn)(windows_core::Interface::as_raw(self), frecstate.into()).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IETFilter_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub EvalRatObjOK: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::HRESULT) -> windows_core::HRESULT,
    pub GetCurrRating: unsafe extern "system" fn(*mut core::ffi::c_void, *mut EnTvRat_System, *mut EnTvRat_GenericLevel, *mut i32) -> windows_core::HRESULT,
    pub GetCurrLicenseExpDate: unsafe extern "system" fn(*mut core::ffi::c_void, *const ProtType, *mut i32) -> windows_core::HRESULT,
    pub GetLastErrorCode: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetRecordingOn: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::BOOL) -> windows_core::HRESULT,
}
pub trait IETFilter_Impl: windows_core::IUnknownImpl {
    fn EvalRatObjOK(&self) -> windows_core::Result<windows_core::HRESULT>;
    fn GetCurrRating(&self, pensystem: *mut EnTvRat_System, penrating: *mut EnTvRat_GenericLevel, plbfenattr: *mut i32) -> windows_core::Result<()>;
    fn GetCurrLicenseExpDate(&self, prottype: *const ProtType) -> windows_core::Result<i32>;
    fn GetLastErrorCode(&self) -> windows_core::Result<()>;
    fn SetRecordingOn(&self, frecstate: windows_core::BOOL) -> windows_core::Result<()>;
}
impl IETFilter_Vtbl {
    pub const fn new<Identity: IETFilter_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn EvalRatObjOK<Identity: IETFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, phrcocreateretval: *mut windows_core::HRESULT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IETFilter_Impl::EvalRatObjOK(this) {
                    Ok(ok__) => {
                        phrcocreateretval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCurrRating<Identity: IETFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pensystem: *mut EnTvRat_System, penrating: *mut EnTvRat_GenericLevel, plbfenattr: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IETFilter_Impl::GetCurrRating(this, core::mem::transmute_copy(&pensystem), core::mem::transmute_copy(&penrating), core::mem::transmute_copy(&plbfenattr)).into()
            }
        }
        unsafe extern "system" fn GetCurrLicenseExpDate<Identity: IETFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prottype: *const ProtType, lpdatetime: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IETFilter_Impl::GetCurrLicenseExpDate(this, core::mem::transmute_copy(&prottype)) {
                    Ok(ok__) => {
                        lpdatetime.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLastErrorCode<Identity: IETFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IETFilter_Impl::GetLastErrorCode(this).into()
            }
        }
        unsafe extern "system" fn SetRecordingOn<Identity: IETFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, frecstate: windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IETFilter_Impl::SetRecordingOn(this, core::mem::transmute_copy(&frecstate)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            EvalRatObjOK: EvalRatObjOK::<Identity, OFFSET>,
            GetCurrRating: GetCurrRating::<Identity, OFFSET>,
            GetCurrLicenseExpDate: GetCurrLicenseExpDate::<Identity, OFFSET>,
            GetLastErrorCode: GetLastErrorCode::<Identity, OFFSET>,
            SetRecordingOn: SetRecordingOn::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IETFilter as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IETFilter {}
windows_core::imp::define_interface!(IETFilterConfig, IETFilterConfig_Vtbl, 0xc4c4c4d1_0049_4e2b_98fb_9537f6ce516d);
windows_core::imp::interface_hierarchy!(IETFilterConfig, windows_core::IUnknown);
impl IETFilterConfig {
    pub unsafe fn InitLicense(&self, licenseid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).InitLicense)(windows_core::Interface::as_raw(self), licenseid).ok() }
    }
    pub unsafe fn GetSecureChannelObject(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSecureChannelObject)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IETFilterConfig_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub InitLicense: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub GetSecureChannelObject: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IETFilterConfig_Impl: windows_core::IUnknownImpl {
    fn InitLicense(&self, licenseid: i32) -> windows_core::Result<()>;
    fn GetSecureChannelObject(&self) -> windows_core::Result<windows_core::IUnknown>;
}
impl IETFilterConfig_Vtbl {
    pub const fn new<Identity: IETFilterConfig_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn InitLicense<Identity: IETFilterConfig_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, licenseid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IETFilterConfig_Impl::InitLicense(this, core::mem::transmute_copy(&licenseid)).into()
            }
        }
        unsafe extern "system" fn GetSecureChannelObject<Identity: IETFilterConfig_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppunkdrmsecurechannel: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IETFilterConfig_Impl::GetSecureChannelObject(this) {
                    Ok(ok__) => {
                        ppunkdrmsecurechannel.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            InitLicense: InitLicense::<Identity, OFFSET>,
            GetSecureChannelObject: GetSecureChannelObject::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IETFilterConfig as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IETFilterConfig {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IETFilterEvents, IETFilterEvents_Vtbl, 0xc4c4c4c1_0049_4e2b_98fb_9537f6ce516d);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IETFilterEvents {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IETFilterEvents, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IETFilterEvents_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IETFilterEvents_Impl: super::super::super::System::Com::IDispatch_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IETFilterEvents_Vtbl {
    pub const fn new<Identity: IETFilterEvents_Impl, const OFFSET: isize>() -> Self {
        Self { base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IETFilterEvents as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IETFilterEvents {}
windows_core::imp::define_interface!(IEnumComponentTypes, IEnumComponentTypes_Vtbl, 0x8a674b4a_1f63_11d3_b64c_00c04f79498e);
windows_core::imp::interface_hierarchy!(IEnumComponentTypes, windows_core::IUnknown);
impl IEnumComponentTypes {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn Next(&self, rgelt: &mut [Option<IComponentType>], pceltfetched: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Next)(windows_core::Interface::as_raw(self), rgelt.len().try_into().unwrap(), core::mem::transmute(rgelt.as_ptr()), pceltfetched as _).ok() }
    }
    pub unsafe fn Skip(&self, celt: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Skip)(windows_core::Interface::as_raw(self), celt).ok() }
    }
    pub unsafe fn Reset(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Reset)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IEnumComponentTypes> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IEnumComponentTypes_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub Next: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    Next: usize,
    pub Skip: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub Reset: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IEnumComponentTypes_Impl: windows_core::IUnknownImpl {
    fn Next(&self, celt: u32, rgelt: *mut Option<IComponentType>, pceltfetched: *mut u32) -> windows_core::Result<()>;
    fn Skip(&self, celt: u32) -> windows_core::Result<()>;
    fn Reset(&self) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IEnumComponentTypes>;
}
#[cfg(feature = "Win32_System_Com")]
impl IEnumComponentTypes_Vtbl {
    pub const fn new<Identity: IEnumComponentTypes_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Next<Identity: IEnumComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32, rgelt: *mut *mut core::ffi::c_void, pceltfetched: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumComponentTypes_Impl::Next(this, core::mem::transmute_copy(&celt), core::mem::transmute_copy(&rgelt), core::mem::transmute_copy(&pceltfetched)).into()
            }
        }
        unsafe extern "system" fn Skip<Identity: IEnumComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumComponentTypes_Impl::Skip(this, core::mem::transmute_copy(&celt)).into()
            }
        }
        unsafe extern "system" fn Reset<Identity: IEnumComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumComponentTypes_Impl::Reset(this).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IEnumComponentTypes_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IEnumComponentTypes_Impl::Clone(this) {
                    Ok(ok__) => {
                        ppenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Next: Next::<Identity, OFFSET>,
            Skip: Skip::<Identity, OFFSET>,
            Reset: Reset::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IEnumComponentTypes as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IEnumComponentTypes {}
windows_core::imp::define_interface!(IEnumComponents, IEnumComponents_Vtbl, 0x2a6e2939_2595_11d3_b64c_00c04f79498e);
windows_core::imp::interface_hierarchy!(IEnumComponents, windows_core::IUnknown);
impl IEnumComponents {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn Next(&self, rgelt: &mut [Option<IComponent>], pceltfetched: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Next)(windows_core::Interface::as_raw(self), rgelt.len().try_into().unwrap(), core::mem::transmute(rgelt.as_ptr()), pceltfetched as _).ok() }
    }
    pub unsafe fn Skip(&self, celt: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Skip)(windows_core::Interface::as_raw(self), celt).ok() }
    }
    pub unsafe fn Reset(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Reset)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IEnumComponents> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IEnumComponents_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub Next: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    Next: usize,
    pub Skip: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub Reset: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IEnumComponents_Impl: windows_core::IUnknownImpl {
    fn Next(&self, celt: u32, rgelt: *mut Option<IComponent>, pceltfetched: *mut u32) -> windows_core::Result<()>;
    fn Skip(&self, celt: u32) -> windows_core::Result<()>;
    fn Reset(&self) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IEnumComponents>;
}
#[cfg(feature = "Win32_System_Com")]
impl IEnumComponents_Vtbl {
    pub const fn new<Identity: IEnumComponents_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Next<Identity: IEnumComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32, rgelt: *mut *mut core::ffi::c_void, pceltfetched: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumComponents_Impl::Next(this, core::mem::transmute_copy(&celt), core::mem::transmute_copy(&rgelt), core::mem::transmute_copy(&pceltfetched)).into()
            }
        }
        unsafe extern "system" fn Skip<Identity: IEnumComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumComponents_Impl::Skip(this, core::mem::transmute_copy(&celt)).into()
            }
        }
        unsafe extern "system" fn Reset<Identity: IEnumComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumComponents_Impl::Reset(this).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IEnumComponents_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IEnumComponents_Impl::Clone(this) {
                    Ok(ok__) => {
                        ppenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Next: Next::<Identity, OFFSET>,
            Skip: Skip::<Identity, OFFSET>,
            Reset: Reset::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IEnumComponents as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IEnumComponents {}
windows_core::imp::define_interface!(IEnumGuideDataProperties, IEnumGuideDataProperties_Vtbl, 0xae44423b_4571_475c_ad2c_f40a771d80ef);
windows_core::imp::interface_hierarchy!(IEnumGuideDataProperties, windows_core::IUnknown);
impl IEnumGuideDataProperties {
    pub unsafe fn Next(&self, celt: u32, ppprop: *mut Option<IGuideDataProperty>, pcelt: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Next)(windows_core::Interface::as_raw(self), celt, core::mem::transmute(ppprop), pcelt as _).ok() }
    }
    pub unsafe fn Skip(&self, celt: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Skip)(windows_core::Interface::as_raw(self), celt).ok() }
    }
    pub unsafe fn Reset(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Reset)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IEnumGuideDataProperties> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IEnumGuideDataProperties_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Next: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub Skip: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub Reset: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IEnumGuideDataProperties_Impl: windows_core::IUnknownImpl {
    fn Next(&self, celt: u32, ppprop: windows_core::OutRef<'_, IGuideDataProperty>, pcelt: *mut u32) -> windows_core::Result<()>;
    fn Skip(&self, celt: u32) -> windows_core::Result<()>;
    fn Reset(&self) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IEnumGuideDataProperties>;
}
impl IEnumGuideDataProperties_Vtbl {
    pub const fn new<Identity: IEnumGuideDataProperties_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Next<Identity: IEnumGuideDataProperties_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32, ppprop: *mut *mut core::ffi::c_void, pcelt: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumGuideDataProperties_Impl::Next(this, core::mem::transmute_copy(&celt), core::mem::transmute_copy(&ppprop), core::mem::transmute_copy(&pcelt)).into()
            }
        }
        unsafe extern "system" fn Skip<Identity: IEnumGuideDataProperties_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumGuideDataProperties_Impl::Skip(this, core::mem::transmute_copy(&celt)).into()
            }
        }
        unsafe extern "system" fn Reset<Identity: IEnumGuideDataProperties_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumGuideDataProperties_Impl::Reset(this).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IEnumGuideDataProperties_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IEnumGuideDataProperties_Impl::Clone(this) {
                    Ok(ok__) => {
                        ppenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Next: Next::<Identity, OFFSET>,
            Skip: Skip::<Identity, OFFSET>,
            Reset: Reset::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IEnumGuideDataProperties as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IEnumGuideDataProperties {}
windows_core::imp::define_interface!(IEnumMSVidGraphSegment, IEnumMSVidGraphSegment_Vtbl, 0x3dd2903e_e0aa_11d2_b63a_00c04f79498e);
windows_core::imp::interface_hierarchy!(IEnumMSVidGraphSegment, windows_core::IUnknown);
impl IEnumMSVidGraphSegment {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn Next(&self, celt: u32, rgelt: *mut Option<IMSVidGraphSegment>, pceltfetched: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Next)(windows_core::Interface::as_raw(self), celt, core::mem::transmute(rgelt), pceltfetched as _).ok() }
    }
    pub unsafe fn Skip(&self, celt: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Skip)(windows_core::Interface::as_raw(self), celt).ok() }
    }
    pub unsafe fn Reset(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Reset)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IEnumMSVidGraphSegment> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IEnumMSVidGraphSegment_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub Next: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    Next: usize,
    pub Skip: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub Reset: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IEnumMSVidGraphSegment_Impl: windows_core::IUnknownImpl {
    fn Next(&self, celt: u32, rgelt: windows_core::OutRef<'_, IMSVidGraphSegment>, pceltfetched: *mut u32) -> windows_core::Result<()>;
    fn Skip(&self, celt: u32) -> windows_core::Result<()>;
    fn Reset(&self) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IEnumMSVidGraphSegment>;
}
#[cfg(feature = "Win32_System_Com")]
impl IEnumMSVidGraphSegment_Vtbl {
    pub const fn new<Identity: IEnumMSVidGraphSegment_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Next<Identity: IEnumMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32, rgelt: *mut *mut core::ffi::c_void, pceltfetched: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumMSVidGraphSegment_Impl::Next(this, core::mem::transmute_copy(&celt), core::mem::transmute_copy(&rgelt), core::mem::transmute_copy(&pceltfetched)).into()
            }
        }
        unsafe extern "system" fn Skip<Identity: IEnumMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumMSVidGraphSegment_Impl::Skip(this, core::mem::transmute_copy(&celt)).into()
            }
        }
        unsafe extern "system" fn Reset<Identity: IEnumMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumMSVidGraphSegment_Impl::Reset(this).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IEnumMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IEnumMSVidGraphSegment_Impl::Clone(this) {
                    Ok(ok__) => {
                        ppenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Next: Next::<Identity, OFFSET>,
            Skip: Skip::<Identity, OFFSET>,
            Reset: Reset::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IEnumMSVidGraphSegment as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IEnumMSVidGraphSegment {}
windows_core::imp::define_interface!(IEnumStreamBufferRecordingAttrib, IEnumStreamBufferRecordingAttrib_Vtbl, 0xc18a9162_1e82_4142_8c73_5690fa62fe33);
windows_core::imp::interface_hierarchy!(IEnumStreamBufferRecordingAttrib, windows_core::IUnknown);
impl IEnumStreamBufferRecordingAttrib {
    pub unsafe fn Next(&self, pstreambufferattribute: &mut [STREAMBUFFER_ATTRIBUTE], pcreceived: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Next)(windows_core::Interface::as_raw(self), pstreambufferattribute.len().try_into().unwrap(), core::mem::transmute(pstreambufferattribute.as_ptr()), pcreceived as _).ok() }
    }
    pub unsafe fn Skip(&self, crecords: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Skip)(windows_core::Interface::as_raw(self), crecords).ok() }
    }
    pub unsafe fn Reset(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Reset)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IEnumStreamBufferRecordingAttrib> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IEnumStreamBufferRecordingAttrib_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Next: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut STREAMBUFFER_ATTRIBUTE, *mut u32) -> windows_core::HRESULT,
    pub Skip: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub Reset: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IEnumStreamBufferRecordingAttrib_Impl: windows_core::IUnknownImpl {
    fn Next(&self, crequest: u32, pstreambufferattribute: *mut STREAMBUFFER_ATTRIBUTE, pcreceived: *mut u32) -> windows_core::Result<()>;
    fn Skip(&self, crecords: u32) -> windows_core::Result<()>;
    fn Reset(&self) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IEnumStreamBufferRecordingAttrib>;
}
impl IEnumStreamBufferRecordingAttrib_Vtbl {
    pub const fn new<Identity: IEnumStreamBufferRecordingAttrib_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Next<Identity: IEnumStreamBufferRecordingAttrib_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, crequest: u32, pstreambufferattribute: *mut STREAMBUFFER_ATTRIBUTE, pcreceived: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumStreamBufferRecordingAttrib_Impl::Next(this, core::mem::transmute_copy(&crequest), core::mem::transmute_copy(&pstreambufferattribute), core::mem::transmute_copy(&pcreceived)).into()
            }
        }
        unsafe extern "system" fn Skip<Identity: IEnumStreamBufferRecordingAttrib_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, crecords: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumStreamBufferRecordingAttrib_Impl::Skip(this, core::mem::transmute_copy(&crecords)).into()
            }
        }
        unsafe extern "system" fn Reset<Identity: IEnumStreamBufferRecordingAttrib_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumStreamBufferRecordingAttrib_Impl::Reset(this).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IEnumStreamBufferRecordingAttrib_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppienumstreambufferattrib: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IEnumStreamBufferRecordingAttrib_Impl::Clone(this) {
                    Ok(ok__) => {
                        ppienumstreambufferattrib.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Next: Next::<Identity, OFFSET>,
            Skip: Skip::<Identity, OFFSET>,
            Reset: Reset::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IEnumStreamBufferRecordingAttrib as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IEnumStreamBufferRecordingAttrib {}
windows_core::imp::define_interface!(IEnumTuneRequests, IEnumTuneRequests_Vtbl, 0x1993299c_ced6_4788_87a3_420067dce0c7);
windows_core::imp::interface_hierarchy!(IEnumTuneRequests, windows_core::IUnknown);
impl IEnumTuneRequests {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn Next(&self, celt: u32, ppprop: *mut Option<ITuneRequest>, pcelt: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Next)(windows_core::Interface::as_raw(self), celt, core::mem::transmute(ppprop), pcelt as _).ok() }
    }
    pub unsafe fn Skip(&self, celt: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Skip)(windows_core::Interface::as_raw(self), celt).ok() }
    }
    pub unsafe fn Reset(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Reset)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IEnumTuneRequests> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IEnumTuneRequests_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub Next: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    Next: usize,
    pub Skip: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub Reset: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IEnumTuneRequests_Impl: windows_core::IUnknownImpl {
    fn Next(&self, celt: u32, ppprop: windows_core::OutRef<'_, ITuneRequest>, pcelt: *mut u32) -> windows_core::Result<()>;
    fn Skip(&self, celt: u32) -> windows_core::Result<()>;
    fn Reset(&self) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IEnumTuneRequests>;
}
#[cfg(feature = "Win32_System_Com")]
impl IEnumTuneRequests_Vtbl {
    pub const fn new<Identity: IEnumTuneRequests_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Next<Identity: IEnumTuneRequests_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32, ppprop: *mut *mut core::ffi::c_void, pcelt: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumTuneRequests_Impl::Next(this, core::mem::transmute_copy(&celt), core::mem::transmute_copy(&ppprop), core::mem::transmute_copy(&pcelt)).into()
            }
        }
        unsafe extern "system" fn Skip<Identity: IEnumTuneRequests_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumTuneRequests_Impl::Skip(this, core::mem::transmute_copy(&celt)).into()
            }
        }
        unsafe extern "system" fn Reset<Identity: IEnumTuneRequests_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumTuneRequests_Impl::Reset(this).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IEnumTuneRequests_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IEnumTuneRequests_Impl::Clone(this) {
                    Ok(ok__) => {
                        ppenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Next: Next::<Identity, OFFSET>,
            Skip: Skip::<Identity, OFFSET>,
            Reset: Reset::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IEnumTuneRequests as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IEnumTuneRequests {}
windows_core::imp::define_interface!(IEnumTuningSpaces, IEnumTuningSpaces_Vtbl, 0x8b8eb248_fc2b_11d2_9d8c_00c04f72d980);
windows_core::imp::interface_hierarchy!(IEnumTuningSpaces, windows_core::IUnknown);
impl IEnumTuningSpaces {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn Next(&self, rgelt: &mut [Option<ITuningSpace>], pceltfetched: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Next)(windows_core::Interface::as_raw(self), rgelt.len().try_into().unwrap(), core::mem::transmute(rgelt.as_ptr()), pceltfetched as _).ok() }
    }
    pub unsafe fn Skip(&self, celt: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Skip)(windows_core::Interface::as_raw(self), celt).ok() }
    }
    pub unsafe fn Reset(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Reset)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<IEnumTuningSpaces> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IEnumTuningSpaces_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub Next: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    Next: usize,
    pub Skip: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub Reset: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IEnumTuningSpaces_Impl: windows_core::IUnknownImpl {
    fn Next(&self, celt: u32, rgelt: *mut Option<ITuningSpace>, pceltfetched: *mut u32) -> windows_core::Result<()>;
    fn Skip(&self, celt: u32) -> windows_core::Result<()>;
    fn Reset(&self) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<IEnumTuningSpaces>;
}
#[cfg(feature = "Win32_System_Com")]
impl IEnumTuningSpaces_Vtbl {
    pub const fn new<Identity: IEnumTuningSpaces_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Next<Identity: IEnumTuningSpaces_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32, rgelt: *mut *mut core::ffi::c_void, pceltfetched: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumTuningSpaces_Impl::Next(this, core::mem::transmute_copy(&celt), core::mem::transmute_copy(&rgelt), core::mem::transmute_copy(&pceltfetched)).into()
            }
        }
        unsafe extern "system" fn Skip<Identity: IEnumTuningSpaces_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, celt: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumTuningSpaces_Impl::Skip(this, core::mem::transmute_copy(&celt)).into()
            }
        }
        unsafe extern "system" fn Reset<Identity: IEnumTuningSpaces_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEnumTuningSpaces_Impl::Reset(this).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: IEnumTuningSpaces_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IEnumTuningSpaces_Impl::Clone(this) {
                    Ok(ok__) => {
                        ppenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Next: Next::<Identity, OFFSET>,
            Skip: Skip::<Identity, OFFSET>,
            Reset: Reset::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IEnumTuningSpaces as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IEnumTuningSpaces {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IEvalRat, IEvalRat_Vtbl, 0xc5c5c5b1_3abc_11d6_b25b_00c04fa0c026);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IEvalRat {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IEvalRat, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IEvalRat {
    pub unsafe fn get_BlockedRatingAttributes(&self, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_BlockedRatingAttributes)(windows_core::Interface::as_raw(self), ensystem, enlevel, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn put_BlockedRatingAttributes(&self, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel, lbfattrs: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).put_BlockedRatingAttributes)(windows_core::Interface::as_raw(self), ensystem, enlevel, lbfattrs).ok() }
    }
    pub unsafe fn BlockUnRated(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).BlockUnRated)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetBlockUnRated(&self, fblockunratedshows: bool) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetBlockUnRated)(windows_core::Interface::as_raw(self), fblockunratedshows.into()).ok() }
    }
    pub unsafe fn MostRestrictiveRating(&self, ensystem1: EnTvRat_System, enenlevel1: EnTvRat_GenericLevel, lbfenattr1: i32, ensystem2: EnTvRat_System, enenlevel2: EnTvRat_GenericLevel, lbfenattr2: i32, pensystem: *mut EnTvRat_System, penenlevel: *mut EnTvRat_GenericLevel, plbfenattr: *mut i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).MostRestrictiveRating)(windows_core::Interface::as_raw(self), ensystem1, enenlevel1, lbfenattr1, ensystem2, enenlevel2, lbfenattr2, pensystem as _, penenlevel as _, plbfenattr as _).ok() }
    }
    pub unsafe fn TestRating(&self, enshowsystem: EnTvRat_System, enshowlevel: EnTvRat_GenericLevel, lbfenshowattributes: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).TestRating)(windows_core::Interface::as_raw(self), enshowsystem, enshowlevel, lbfenshowattributes).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IEvalRat_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub get_BlockedRatingAttributes: unsafe extern "system" fn(*mut core::ffi::c_void, EnTvRat_System, EnTvRat_GenericLevel, *mut i32) -> windows_core::HRESULT,
    pub put_BlockedRatingAttributes: unsafe extern "system" fn(*mut core::ffi::c_void, EnTvRat_System, EnTvRat_GenericLevel, i32) -> windows_core::HRESULT,
    pub BlockUnRated: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub SetBlockUnRated: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::BOOL) -> windows_core::HRESULT,
    pub MostRestrictiveRating: unsafe extern "system" fn(*mut core::ffi::c_void, EnTvRat_System, EnTvRat_GenericLevel, i32, EnTvRat_System, EnTvRat_GenericLevel, i32, *mut EnTvRat_System, *mut EnTvRat_GenericLevel, *mut i32) -> windows_core::HRESULT,
    pub TestRating: unsafe extern "system" fn(*mut core::ffi::c_void, EnTvRat_System, EnTvRat_GenericLevel, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IEvalRat_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn get_BlockedRatingAttributes(&self, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel) -> windows_core::Result<i32>;
    fn put_BlockedRatingAttributes(&self, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel, lbfattrs: i32) -> windows_core::Result<()>;
    fn BlockUnRated(&self) -> windows_core::Result<windows_core::BOOL>;
    fn SetBlockUnRated(&self, fblockunratedshows: windows_core::BOOL) -> windows_core::Result<()>;
    fn MostRestrictiveRating(&self, ensystem1: EnTvRat_System, enenlevel1: EnTvRat_GenericLevel, lbfenattr1: i32, ensystem2: EnTvRat_System, enenlevel2: EnTvRat_GenericLevel, lbfenattr2: i32, pensystem: *mut EnTvRat_System, penenlevel: *mut EnTvRat_GenericLevel, plbfenattr: *mut i32) -> windows_core::Result<()>;
    fn TestRating(&self, enshowsystem: EnTvRat_System, enshowlevel: EnTvRat_GenericLevel, lbfenshowattributes: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IEvalRat_Vtbl {
    pub const fn new<Identity: IEvalRat_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn get_BlockedRatingAttributes<Identity: IEvalRat_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel, plbfattrs: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IEvalRat_Impl::get_BlockedRatingAttributes(this, core::mem::transmute_copy(&ensystem), core::mem::transmute_copy(&enlevel)) {
                    Ok(ok__) => {
                        plbfattrs.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn put_BlockedRatingAttributes<Identity: IEvalRat_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ensystem: EnTvRat_System, enlevel: EnTvRat_GenericLevel, lbfattrs: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEvalRat_Impl::put_BlockedRatingAttributes(this, core::mem::transmute_copy(&ensystem), core::mem::transmute_copy(&enlevel), core::mem::transmute_copy(&lbfattrs)).into()
            }
        }
        unsafe extern "system" fn BlockUnRated<Identity: IEvalRat_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfblockunratedshows: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IEvalRat_Impl::BlockUnRated(this) {
                    Ok(ok__) => {
                        pfblockunratedshows.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetBlockUnRated<Identity: IEvalRat_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fblockunratedshows: windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEvalRat_Impl::SetBlockUnRated(this, core::mem::transmute_copy(&fblockunratedshows)).into()
            }
        }
        unsafe extern "system" fn MostRestrictiveRating<Identity: IEvalRat_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ensystem1: EnTvRat_System, enenlevel1: EnTvRat_GenericLevel, lbfenattr1: i32, ensystem2: EnTvRat_System, enenlevel2: EnTvRat_GenericLevel, lbfenattr2: i32, pensystem: *mut EnTvRat_System, penenlevel: *mut EnTvRat_GenericLevel, plbfenattr: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEvalRat_Impl::MostRestrictiveRating(this, core::mem::transmute_copy(&ensystem1), core::mem::transmute_copy(&enenlevel1), core::mem::transmute_copy(&lbfenattr1), core::mem::transmute_copy(&ensystem2), core::mem::transmute_copy(&enenlevel2), core::mem::transmute_copy(&lbfenattr2), core::mem::transmute_copy(&pensystem), core::mem::transmute_copy(&penenlevel), core::mem::transmute_copy(&plbfenattr)).into()
            }
        }
        unsafe extern "system" fn TestRating<Identity: IEvalRat_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, enshowsystem: EnTvRat_System, enshowlevel: EnTvRat_GenericLevel, lbfenshowattributes: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IEvalRat_Impl::TestRating(this, core::mem::transmute_copy(&enshowsystem), core::mem::transmute_copy(&enshowlevel), core::mem::transmute_copy(&lbfenshowattributes)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            get_BlockedRatingAttributes: get_BlockedRatingAttributes::<Identity, OFFSET>,
            put_BlockedRatingAttributes: put_BlockedRatingAttributes::<Identity, OFFSET>,
            BlockUnRated: BlockUnRated::<Identity, OFFSET>,
            SetBlockUnRated: SetBlockUnRated::<Identity, OFFSET>,
            MostRestrictiveRating: MostRestrictiveRating::<Identity, OFFSET>,
            TestRating: TestRating::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IEvalRat as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IEvalRat {}
windows_core::imp::define_interface!(IGenericDescriptor, IGenericDescriptor_Vtbl, 0x6a5918f8_a77a_4f61_aed0_5702bdcda3e6);
windows_core::imp::interface_hierarchy!(IGenericDescriptor, windows_core::IUnknown);
impl IGenericDescriptor {
    pub unsafe fn Initialize(&self, pbdesc: *const u8, bcount: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), pbdesc, bcount).ok() }
    }
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetBody(&self) -> windows_core::Result<*mut u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetBody)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IGenericDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *const u8, i32) -> windows_core::HRESULT,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetBody: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut u8) -> windows_core::HRESULT,
}
pub trait IGenericDescriptor_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, pbdesc: *const u8, bcount: i32) -> windows_core::Result<()>;
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetBody(&self) -> windows_core::Result<*mut u8>;
}
impl IGenericDescriptor_Vtbl {
    pub const fn new<Identity: IGenericDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IGenericDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbdesc: *const u8, bcount: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IGenericDescriptor_Impl::Initialize(this, core::mem::transmute_copy(&pbdesc), core::mem::transmute_copy(&bcount)).into()
            }
        }
        unsafe extern "system" fn GetTag<Identity: IGenericDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGenericDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IGenericDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGenericDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetBody<Identity: IGenericDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppbval: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGenericDescriptor_Impl::GetBody(this) {
                    Ok(ok__) => {
                        ppbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetBody: GetBody::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IGenericDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IGenericDescriptor {}
windows_core::imp::define_interface!(IGenericDescriptor2, IGenericDescriptor2_Vtbl, 0xbf02fb7e_9792_4e10_a68d_033a2cc246a5);
impl core::ops::Deref for IGenericDescriptor2 {
    type Target = IGenericDescriptor;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IGenericDescriptor2, windows_core::IUnknown, IGenericDescriptor);
impl IGenericDescriptor2 {
    pub unsafe fn Initialize(&self, pbdesc: *const u8, wcount: u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), pbdesc, wcount).ok() }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IGenericDescriptor2_Vtbl {
    pub base__: IGenericDescriptor_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *const u8, u16) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
}
pub trait IGenericDescriptor2_Impl: IGenericDescriptor_Impl {
    fn Initialize(&self, pbdesc: *const u8, wcount: u16) -> windows_core::Result<()>;
    fn GetLength(&self) -> windows_core::Result<u16>;
}
impl IGenericDescriptor2_Vtbl {
    pub const fn new<Identity: IGenericDescriptor2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IGenericDescriptor2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbdesc: *const u8, wcount: u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IGenericDescriptor2_Impl::Initialize(this, core::mem::transmute_copy(&pbdesc), core::mem::transmute_copy(&wcount)).into()
            }
        }
        unsafe extern "system" fn GetLength<Identity: IGenericDescriptor2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGenericDescriptor2_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: IGenericDescriptor_Vtbl::new::<Identity, OFFSET>(), Initialize: Initialize::<Identity, OFFSET>, GetLength: GetLength::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IGenericDescriptor2 as windows_core::Interface>::IID || iid == &<IGenericDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IGenericDescriptor2 {}
windows_core::imp::define_interface!(IGpnvsCommonBase, IGpnvsCommonBase_Vtbl, 0x907e0b5c_e42d_4f04_91f0_26f401f36907);
windows_core::imp::interface_hierarchy!(IGpnvsCommonBase, windows_core::IUnknown);
impl IGpnvsCommonBase {
    pub unsafe fn GetValueUpdateName(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetValueUpdateName)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IGpnvsCommonBase_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetValueUpdateName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IGpnvsCommonBase_Impl: windows_core::IUnknownImpl {
    fn GetValueUpdateName(&self) -> windows_core::Result<windows_core::BSTR>;
}
impl IGpnvsCommonBase_Vtbl {
    pub const fn new<Identity: IGpnvsCommonBase_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetValueUpdateName<Identity: IGpnvsCommonBase_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGpnvsCommonBase_Impl::GetValueUpdateName(this) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), GetValueUpdateName: GetValueUpdateName::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IGpnvsCommonBase as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IGpnvsCommonBase {}
windows_core::imp::define_interface!(IGuideData, IGuideData_Vtbl, 0x61571138_5b01_43cd_aeaf_60b784a0bf93);
windows_core::imp::interface_hierarchy!(IGuideData, windows_core::IUnknown);
impl IGuideData {
    pub unsafe fn GetServices(&self) -> windows_core::Result<IEnumTuneRequests> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServices)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetServiceProperties<P0>(&self, ptunerequest: P0) -> windows_core::Result<IEnumGuideDataProperties>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceProperties)(windows_core::Interface::as_raw(self), ptunerequest.param().abi(), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn GetGuideProgramIDs(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetGuideProgramIDs)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn GetProgramProperties(&self, varprogramdescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IEnumGuideDataProperties> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetProgramProperties)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varprogramdescriptionid), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn GetScheduleEntryIDs(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetScheduleEntryIDs)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn GetScheduleEntryProperties(&self, varscheduleentrydescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IEnumGuideDataProperties> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetScheduleEntryProperties)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varscheduleentrydescriptionid), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IGuideData_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetServices: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Com")]
    pub GetServiceProperties: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetServiceProperties: usize,
    #[cfg(feature = "Win32_System_Ole")]
    pub GetGuideProgramIDs: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    GetGuideProgramIDs: usize,
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub GetProgramProperties: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    GetProgramProperties: usize,
    #[cfg(feature = "Win32_System_Ole")]
    pub GetScheduleEntryIDs: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    GetScheduleEntryIDs: usize,
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub GetScheduleEntryProperties: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    GetScheduleEntryProperties: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IGuideData_Impl: windows_core::IUnknownImpl {
    fn GetServices(&self) -> windows_core::Result<IEnumTuneRequests>;
    fn GetServiceProperties(&self, ptunerequest: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<IEnumGuideDataProperties>;
    fn GetGuideProgramIDs(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn GetProgramProperties(&self, varprogramdescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IEnumGuideDataProperties>;
    fn GetScheduleEntryIDs(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn GetScheduleEntryProperties(&self, varscheduleentrydescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IEnumGuideDataProperties>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IGuideData_Vtbl {
    pub const fn new<Identity: IGuideData_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetServices<Identity: IGuideData_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppenumtunerequests: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGuideData_Impl::GetServices(this) {
                    Ok(ok__) => {
                        ppenumtunerequests.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceProperties<Identity: IGuideData_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ptunerequest: *mut core::ffi::c_void, ppenumproperties: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGuideData_Impl::GetServiceProperties(this, core::mem::transmute_copy(&ptunerequest)) {
                    Ok(ok__) => {
                        ppenumproperties.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetGuideProgramIDs<Identity: IGuideData_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, penumprograms: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGuideData_Impl::GetGuideProgramIDs(this) {
                    Ok(ok__) => {
                        penumprograms.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetProgramProperties<Identity: IGuideData_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varprogramdescriptionid: super::super::super::System::Variant::VARIANT, ppenumproperties: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGuideData_Impl::GetProgramProperties(this, core::mem::transmute(&varprogramdescriptionid)) {
                    Ok(ok__) => {
                        ppenumproperties.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetScheduleEntryIDs<Identity: IGuideData_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, penumscheduleentries: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGuideData_Impl::GetScheduleEntryIDs(this) {
                    Ok(ok__) => {
                        penumscheduleentries.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetScheduleEntryProperties<Identity: IGuideData_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varscheduleentrydescriptionid: super::super::super::System::Variant::VARIANT, ppenumproperties: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGuideData_Impl::GetScheduleEntryProperties(this, core::mem::transmute(&varscheduleentrydescriptionid)) {
                    Ok(ok__) => {
                        ppenumproperties.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetServices: GetServices::<Identity, OFFSET>,
            GetServiceProperties: GetServiceProperties::<Identity, OFFSET>,
            GetGuideProgramIDs: GetGuideProgramIDs::<Identity, OFFSET>,
            GetProgramProperties: GetProgramProperties::<Identity, OFFSET>,
            GetScheduleEntryIDs: GetScheduleEntryIDs::<Identity, OFFSET>,
            GetScheduleEntryProperties: GetScheduleEntryProperties::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IGuideData as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IGuideData {}
windows_core::imp::define_interface!(IGuideDataEvent, IGuideDataEvent_Vtbl, 0xefda0c80_f395_42c3_9b3c_56b37dec7bb7);
windows_core::imp::interface_hierarchy!(IGuideDataEvent, windows_core::IUnknown);
impl IGuideDataEvent {
    pub unsafe fn GuideDataAcquired(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GuideDataAcquired)(windows_core::Interface::as_raw(self)).ok() }
    }
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn ProgramChanged(&self, varprogramdescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ProgramChanged)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varprogramdescriptionid)).ok() }
    }
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn ServiceChanged(&self, varservicedescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ServiceChanged)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varservicedescriptionid)).ok() }
    }
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn ScheduleEntryChanged(&self, varscheduleentrydescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ScheduleEntryChanged)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varscheduleentrydescriptionid)).ok() }
    }
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn ProgramDeleted(&self, varprogramdescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ProgramDeleted)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varprogramdescriptionid)).ok() }
    }
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn ServiceDeleted(&self, varservicedescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ServiceDeleted)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varservicedescriptionid)).ok() }
    }
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn ScheduleDeleted(&self, varscheduleentrydescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ScheduleDeleted)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varscheduleentrydescriptionid)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IGuideDataEvent_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GuideDataAcquired: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub ProgramChanged: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    ProgramChanged: usize,
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub ServiceChanged: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    ServiceChanged: usize,
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub ScheduleEntryChanged: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    ScheduleEntryChanged: usize,
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub ProgramDeleted: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    ProgramDeleted: usize,
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub ServiceDeleted: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    ServiceDeleted: usize,
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub ScheduleDeleted: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    ScheduleDeleted: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IGuideDataEvent_Impl: windows_core::IUnknownImpl {
    fn GuideDataAcquired(&self) -> windows_core::Result<()>;
    fn ProgramChanged(&self, varprogramdescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn ServiceChanged(&self, varservicedescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn ScheduleEntryChanged(&self, varscheduleentrydescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn ProgramDeleted(&self, varprogramdescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn ServiceDeleted(&self, varservicedescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn ScheduleDeleted(&self, varscheduleentrydescriptionid: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IGuideDataEvent_Vtbl {
    pub const fn new<Identity: IGuideDataEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GuideDataAcquired<Identity: IGuideDataEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IGuideDataEvent_Impl::GuideDataAcquired(this).into()
            }
        }
        unsafe extern "system" fn ProgramChanged<Identity: IGuideDataEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varprogramdescriptionid: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IGuideDataEvent_Impl::ProgramChanged(this, core::mem::transmute(&varprogramdescriptionid)).into()
            }
        }
        unsafe extern "system" fn ServiceChanged<Identity: IGuideDataEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varservicedescriptionid: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IGuideDataEvent_Impl::ServiceChanged(this, core::mem::transmute(&varservicedescriptionid)).into()
            }
        }
        unsafe extern "system" fn ScheduleEntryChanged<Identity: IGuideDataEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varscheduleentrydescriptionid: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IGuideDataEvent_Impl::ScheduleEntryChanged(this, core::mem::transmute(&varscheduleentrydescriptionid)).into()
            }
        }
        unsafe extern "system" fn ProgramDeleted<Identity: IGuideDataEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varprogramdescriptionid: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IGuideDataEvent_Impl::ProgramDeleted(this, core::mem::transmute(&varprogramdescriptionid)).into()
            }
        }
        unsafe extern "system" fn ServiceDeleted<Identity: IGuideDataEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varservicedescriptionid: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IGuideDataEvent_Impl::ServiceDeleted(this, core::mem::transmute(&varservicedescriptionid)).into()
            }
        }
        unsafe extern "system" fn ScheduleDeleted<Identity: IGuideDataEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varscheduleentrydescriptionid: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IGuideDataEvent_Impl::ScheduleDeleted(this, core::mem::transmute(&varscheduleentrydescriptionid)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GuideDataAcquired: GuideDataAcquired::<Identity, OFFSET>,
            ProgramChanged: ProgramChanged::<Identity, OFFSET>,
            ServiceChanged: ServiceChanged::<Identity, OFFSET>,
            ScheduleEntryChanged: ScheduleEntryChanged::<Identity, OFFSET>,
            ProgramDeleted: ProgramDeleted::<Identity, OFFSET>,
            ServiceDeleted: ServiceDeleted::<Identity, OFFSET>,
            ScheduleDeleted: ScheduleDeleted::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IGuideDataEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IGuideDataEvent {}
windows_core::imp::define_interface!(IGuideDataLoader, IGuideDataLoader_Vtbl, 0x4764ff7c_fa95_4525_af4d_d32236db9e38);
windows_core::imp::interface_hierarchy!(IGuideDataLoader, windows_core::IUnknown);
impl IGuideDataLoader {
    pub unsafe fn Init<P0>(&self, pguidestore: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IGuideData>,
    {
        unsafe { (windows_core::Interface::vtable(self).Init)(windows_core::Interface::as_raw(self), pguidestore.param().abi()).ok() }
    }
    pub unsafe fn Terminate(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Terminate)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IGuideDataLoader_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Init: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Terminate: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IGuideDataLoader_Impl: windows_core::IUnknownImpl {
    fn Init(&self, pguidestore: windows_core::Ref<'_, IGuideData>) -> windows_core::Result<()>;
    fn Terminate(&self) -> windows_core::Result<()>;
}
impl IGuideDataLoader_Vtbl {
    pub const fn new<Identity: IGuideDataLoader_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Init<Identity: IGuideDataLoader_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pguidestore: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IGuideDataLoader_Impl::Init(this, core::mem::transmute_copy(&pguidestore)).into()
            }
        }
        unsafe extern "system" fn Terminate<Identity: IGuideDataLoader_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IGuideDataLoader_Impl::Terminate(this).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), Init: Init::<Identity, OFFSET>, Terminate: Terminate::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IGuideDataLoader as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IGuideDataLoader {}
windows_core::imp::define_interface!(IGuideDataProperty, IGuideDataProperty_Vtbl, 0x88ec5e58_bb73_41d6_99ce_66c524b8b591);
windows_core::imp::interface_hierarchy!(IGuideDataProperty, windows_core::IUnknown);
impl IGuideDataProperty {
    pub unsafe fn Name(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Name)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn Language(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Language)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Value(&self) -> windows_core::Result<super::super::super::System::Variant::VARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Value)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IGuideDataProperty_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Name: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Language: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Value: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Value: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IGuideDataProperty_Impl: windows_core::IUnknownImpl {
    fn Name(&self) -> windows_core::Result<windows_core::BSTR>;
    fn Language(&self) -> windows_core::Result<i32>;
    fn Value(&self) -> windows_core::Result<super::super::super::System::Variant::VARIANT>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IGuideDataProperty_Vtbl {
    pub const fn new<Identity: IGuideDataProperty_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Name<Identity: IGuideDataProperty_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGuideDataProperty_Impl::Name(this) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Language<Identity: IGuideDataProperty_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, idlang: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGuideDataProperty_Impl::Language(this) {
                    Ok(ok__) => {
                        idlang.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Value<Identity: IGuideDataProperty_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pvar: *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IGuideDataProperty_Impl::Value(this) {
                    Ok(ok__) => {
                        pvar.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Name: Name::<Identity, OFFSET>,
            Language: Language::<Identity, OFFSET>,
            Value: Value::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IGuideDataProperty as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IGuideDataProperty {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IISDBSLocator, IISDBSLocator_Vtbl, 0xc9897087_e29c_473f_9e4b_7072123dea14);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IISDBSLocator {
    type Target = IDVBSLocator;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IISDBSLocator, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ILocator, IDigitalLocator, IDVBSLocator);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IISDBSLocator_Vtbl {
    pub base__: IDVBSLocator_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IISDBSLocator_Impl: IDVBSLocator_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IISDBSLocator_Vtbl {
    pub const fn new<Identity: IISDBSLocator_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IDVBSLocator_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IISDBSLocator as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ILocator as windows_core::Interface>::IID || iid == &<IDigitalLocator as windows_core::Interface>::IID || iid == &<IDVBSLocator as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IISDBSLocator {}
windows_core::imp::define_interface!(IISDB_BIT, IISDB_BIT_Vtbl, 0x537cd71e_0e46_4173_9001_ba043f3e49e2);
windows_core::imp::interface_hierarchy!(IISDB_BIT, windows_core::IUnknown);
impl IISDB_BIT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOriginalNetworkId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOriginalNetworkId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetBroadcastViewPropriety(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetBroadcastViewPropriety)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordBroadcasterId(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordBroadcasterId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetVersionHash(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionHash)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IISDB_BIT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetOriginalNetworkId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetBroadcastViewPropriety: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordBroadcasterId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionHash: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
pub trait IISDB_BIT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetOriginalNetworkId(&self) -> windows_core::Result<u16>;
    fn GetBroadcastViewPropriety(&self) -> windows_core::Result<u8>;
    fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordBroadcasterId(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetVersionHash(&self) -> windows_core::Result<u32>;
}
impl IISDB_BIT_Vtbl {
    pub const fn new<Identity: IISDB_BIT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_BIT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_BIT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOriginalNetworkId<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_BIT_Impl::GetOriginalNetworkId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetBroadcastViewPropriety<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_BIT_Impl::GetBroadcastViewPropriety(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_BIT_Impl::GetCountOfTableDescriptors(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_BIT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_BIT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_BIT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordBroadcasterId<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_BIT_Impl::GetRecordBroadcasterId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_BIT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_BIT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_BIT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetVersionHash<Identity: IISDB_BIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwversionhash: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_BIT_Impl::GetVersionHash(this) {
                    Ok(ok__) => {
                        pdwversionhash.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetOriginalNetworkId: GetOriginalNetworkId::<Identity, OFFSET>,
            GetBroadcastViewPropriety: GetBroadcastViewPropriety::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordBroadcasterId: GetRecordBroadcasterId::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            GetVersionHash: GetVersionHash::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IISDB_BIT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IISDB_BIT {}
windows_core::imp::define_interface!(IISDB_CDT, IISDB_CDT_Vtbl, 0x25fa92c2_8b80_4787_a841_3a0e8f17984b);
windows_core::imp::interface_hierarchy!(IISDB_CDT, windows_core::IUnknown);
impl IISDB_CDT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1, bsectionnumber: u8) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi(), bsectionnumber).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDownloadDataId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDownloadDataId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSectionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSectionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOriginalNetworkId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOriginalNetworkId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDataType(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDataType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetSizeOfDataModule(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSizeOfDataModule)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDataModule(&self) -> windows_core::Result<*mut u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDataModule)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetVersionHash(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionHash)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IISDB_CDT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void, u8) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetDownloadDataId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetSectionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetOriginalNetworkId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetDataType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetSizeOfDataModule: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetDataModule: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut u8) -> windows_core::HRESULT,
    pub GetVersionHash: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
pub trait IISDB_CDT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>, bsectionnumber: u8) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetDownloadDataId(&self) -> windows_core::Result<u16>;
    fn GetSectionNumber(&self) -> windows_core::Result<u8>;
    fn GetOriginalNetworkId(&self) -> windows_core::Result<u16>;
    fn GetDataType(&self) -> windows_core::Result<u8>;
    fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetSizeOfDataModule(&self) -> windows_core::Result<u32>;
    fn GetDataModule(&self) -> windows_core::Result<*mut u8>;
    fn GetVersionHash(&self) -> windows_core::Result<u32>;
}
impl IISDB_CDT_Vtbl {
    pub const fn new<Identity: IISDB_CDT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void, bsectionnumber: u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_CDT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata), core::mem::transmute_copy(&bsectionnumber)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_CDT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDownloadDataId<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_CDT_Impl::GetDownloadDataId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSectionNumber<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_CDT_Impl::GetSectionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOriginalNetworkId<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_CDT_Impl::GetOriginalNetworkId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDataType<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_CDT_Impl::GetDataType(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_CDT_Impl::GetCountOfTableDescriptors(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_CDT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_CDT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetSizeOfDataModule<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_CDT_Impl::GetSizeOfDataModule(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDataModule<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbdata: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_CDT_Impl::GetDataModule(this) {
                    Ok(ok__) => {
                        pbdata.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetVersionHash<Identity: IISDB_CDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwversionhash: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_CDT_Impl::GetVersionHash(this) {
                    Ok(ok__) => {
                        pdwversionhash.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetDownloadDataId: GetDownloadDataId::<Identity, OFFSET>,
            GetSectionNumber: GetSectionNumber::<Identity, OFFSET>,
            GetOriginalNetworkId: GetOriginalNetworkId::<Identity, OFFSET>,
            GetDataType: GetDataType::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
            GetSizeOfDataModule: GetSizeOfDataModule::<Identity, OFFSET>,
            GetDataModule: GetDataModule::<Identity, OFFSET>,
            GetVersionHash: GetVersionHash::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IISDB_CDT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IISDB_CDT {}
windows_core::imp::define_interface!(IISDB_EMM, IISDB_EMM_Vtbl, 0x0edb556d_43ad_4938_9668_321b2ffecfd3);
windows_core::imp::interface_hierarchy!(IISDB_EMM, windows_core::IUnknown);
impl IISDB_EMM {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableIdExtension(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableIdExtension)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDataBytes(&self, pwbufferlength: *mut u16, pbbuffer: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetDataBytes)(windows_core::Interface::as_raw(self), pwbufferlength as _, pbbuffer as _).ok() }
    }
    pub unsafe fn GetSharedEmmMessage(&self, pwlength: *mut u16, ppbmessage: *mut *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetSharedEmmMessage)(windows_core::Interface::as_raw(self), pwlength as _, ppbmessage as _).ok() }
    }
    pub unsafe fn GetIndividualEmmMessage<P0>(&self, punknown: P0, pwlength: *mut u16, ppbmessage: *mut *mut u8) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::IUnknown>,
    {
        unsafe { (windows_core::Interface::vtable(self).GetIndividualEmmMessage)(windows_core::Interface::as_raw(self), punknown.param().abi(), pwlength as _, ppbmessage as _).ok() }
    }
    pub unsafe fn GetVersionHash(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionHash)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IISDB_EMM_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTableIdExtension: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetDataBytes: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16, *mut u8) -> windows_core::HRESULT,
    pub GetSharedEmmMessage: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16, *mut *mut u8) -> windows_core::HRESULT,
    pub GetIndividualEmmMessage: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut u16, *mut *mut u8) -> windows_core::HRESULT,
    pub GetVersionHash: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
pub trait IISDB_EMM_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetTableIdExtension(&self) -> windows_core::Result<u16>;
    fn GetDataBytes(&self, pwbufferlength: *mut u16, pbbuffer: *mut u8) -> windows_core::Result<()>;
    fn GetSharedEmmMessage(&self, pwlength: *mut u16, ppbmessage: *mut *mut u8) -> windows_core::Result<()>;
    fn GetIndividualEmmMessage(&self, punknown: windows_core::Ref<'_, windows_core::IUnknown>, pwlength: *mut u16, ppbmessage: *mut *mut u8) -> windows_core::Result<()>;
    fn GetVersionHash(&self) -> windows_core::Result<u32>;
}
impl IISDB_EMM_Vtbl {
    pub const fn new<Identity: IISDB_EMM_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IISDB_EMM_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_EMM_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IISDB_EMM_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_EMM_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableIdExtension<Identity: IISDB_EMM_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_EMM_Impl::GetTableIdExtension(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDataBytes<Identity: IISDB_EMM_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwbufferlength: *mut u16, pbbuffer: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_EMM_Impl::GetDataBytes(this, core::mem::transmute_copy(&pwbufferlength), core::mem::transmute_copy(&pbbuffer)).into()
            }
        }
        unsafe extern "system" fn GetSharedEmmMessage<Identity: IISDB_EMM_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwlength: *mut u16, ppbmessage: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_EMM_Impl::GetSharedEmmMessage(this, core::mem::transmute_copy(&pwlength), core::mem::transmute_copy(&ppbmessage)).into()
            }
        }
        unsafe extern "system" fn GetIndividualEmmMessage<Identity: IISDB_EMM_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, punknown: *mut core::ffi::c_void, pwlength: *mut u16, ppbmessage: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_EMM_Impl::GetIndividualEmmMessage(this, core::mem::transmute_copy(&punknown), core::mem::transmute_copy(&pwlength), core::mem::transmute_copy(&ppbmessage)).into()
            }
        }
        unsafe extern "system" fn GetVersionHash<Identity: IISDB_EMM_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwversionhash: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_EMM_Impl::GetVersionHash(this) {
                    Ok(ok__) => {
                        pdwversionhash.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetTableIdExtension: GetTableIdExtension::<Identity, OFFSET>,
            GetDataBytes: GetDataBytes::<Identity, OFFSET>,
            GetSharedEmmMessage: GetSharedEmmMessage::<Identity, OFFSET>,
            GetIndividualEmmMessage: GetIndividualEmmMessage::<Identity, OFFSET>,
            GetVersionHash: GetVersionHash::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IISDB_EMM as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IISDB_EMM {}
windows_core::imp::define_interface!(IISDB_LDT, IISDB_LDT_Vtbl, 0x141a546b_02ff_4fb9_a3a3_2f074b74a9a9);
windows_core::imp::interface_hierarchy!(IISDB_LDT, windows_core::IUnknown);
impl IISDB_LDT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOriginalServiceId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOriginalServiceId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTransportStreamId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTransportStreamId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOriginalNetworkId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOriginalNetworkId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptionId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptionId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetVersionHash(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionHash)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IISDB_LDT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetOriginalServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetTransportStreamId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetOriginalNetworkId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptionId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionHash: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
pub trait IISDB_LDT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetOriginalServiceId(&self) -> windows_core::Result<u16>;
    fn GetTransportStreamId(&self) -> windows_core::Result<u16>;
    fn GetOriginalNetworkId(&self) -> windows_core::Result<u16>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordDescriptionId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetVersionHash(&self) -> windows_core::Result<u32>;
}
impl IISDB_LDT_Vtbl {
    pub const fn new<Identity: IISDB_LDT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IISDB_LDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_LDT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IISDB_LDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_LDT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOriginalServiceId<Identity: IISDB_LDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_LDT_Impl::GetOriginalServiceId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTransportStreamId<Identity: IISDB_LDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_LDT_Impl::GetTransportStreamId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOriginalNetworkId<Identity: IISDB_LDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_LDT_Impl::GetOriginalNetworkId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IISDB_LDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_LDT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptionId<Identity: IISDB_LDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_LDT_Impl::GetRecordDescriptionId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IISDB_LDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_LDT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IISDB_LDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_LDT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IISDB_LDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_LDT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetVersionHash<Identity: IISDB_LDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwversionhash: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_LDT_Impl::GetVersionHash(this) {
                    Ok(ok__) => {
                        pdwversionhash.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetOriginalServiceId: GetOriginalServiceId::<Identity, OFFSET>,
            GetTransportStreamId: GetTransportStreamId::<Identity, OFFSET>,
            GetOriginalNetworkId: GetOriginalNetworkId::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordDescriptionId: GetRecordDescriptionId::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            GetVersionHash: GetVersionHash::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IISDB_LDT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IISDB_LDT {}
windows_core::imp::define_interface!(IISDB_NBIT, IISDB_NBIT_Vtbl, 0x1b1863ef_08f1_40b7_a559_3b1eff8cafa6);
windows_core::imp::interface_hierarchy!(IISDB_NBIT, windows_core::IUnknown);
impl IISDB_NBIT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOriginalNetworkId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOriginalNetworkId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordInformationId(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordInformationId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordInformationType(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordInformationType)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptionBodyLocation(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptionBodyLocation)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordMessageSectionNumber(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordMessageSectionNumber)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordUserDefined(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordUserDefined)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordNumberOfKeys(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordNumberOfKeys)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordKeys(&self, dwrecordindex: u32) -> windows_core::Result<*mut u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordKeys)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetVersionHash(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionHash)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IISDB_NBIT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetOriginalNetworkId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordInformationId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordInformationType: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordDescriptionBodyLocation: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordMessageSectionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordUserDefined: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordNumberOfKeys: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordKeys: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut u8) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionHash: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
pub trait IISDB_NBIT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetOriginalNetworkId(&self) -> windows_core::Result<u16>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordInformationId(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordInformationType(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordDescriptionBodyLocation(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordMessageSectionNumber(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordUserDefined(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordNumberOfKeys(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordKeys(&self, dwrecordindex: u32) -> windows_core::Result<*mut u8>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetVersionHash(&self) -> windows_core::Result<u32>;
}
impl IISDB_NBIT_Vtbl {
    pub const fn new<Identity: IISDB_NBIT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_NBIT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOriginalNetworkId<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetOriginalNetworkId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordInformationId<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetRecordInformationId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordInformationType<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetRecordInformationType(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptionBodyLocation<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetRecordDescriptionBodyLocation(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordMessageSectionNumber<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetRecordMessageSectionNumber(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordUserDefined<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetRecordUserDefined(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordNumberOfKeys<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetRecordNumberOfKeys(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordKeys<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbkeys: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetRecordKeys(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbkeys.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_NBIT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetVersionHash<Identity: IISDB_NBIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwversionhash: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_NBIT_Impl::GetVersionHash(this) {
                    Ok(ok__) => {
                        pdwversionhash.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetOriginalNetworkId: GetOriginalNetworkId::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordInformationId: GetRecordInformationId::<Identity, OFFSET>,
            GetRecordInformationType: GetRecordInformationType::<Identity, OFFSET>,
            GetRecordDescriptionBodyLocation: GetRecordDescriptionBodyLocation::<Identity, OFFSET>,
            GetRecordMessageSectionNumber: GetRecordMessageSectionNumber::<Identity, OFFSET>,
            GetRecordUserDefined: GetRecordUserDefined::<Identity, OFFSET>,
            GetRecordNumberOfKeys: GetRecordNumberOfKeys::<Identity, OFFSET>,
            GetRecordKeys: GetRecordKeys::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            GetVersionHash: GetVersionHash::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IISDB_NBIT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IISDB_NBIT {}
windows_core::imp::define_interface!(IISDB_SDT, IISDB_SDT_Vtbl, 0x3f3dc9a2_bb32_4fb9_ae9e_d856848927a3);
impl core::ops::Deref for IISDB_SDT {
    type Target = IDVB_SDT;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IISDB_SDT, windows_core::IUnknown, IDVB_SDT);
impl IISDB_SDT {
    pub unsafe fn GetRecordEITUserDefinedFlags(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordEITUserDefinedFlags)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IISDB_SDT_Vtbl {
    pub base__: IDVB_SDT_Vtbl,
    pub GetRecordEITUserDefinedFlags: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
}
pub trait IISDB_SDT_Impl: IDVB_SDT_Impl {
    fn GetRecordEITUserDefinedFlags(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
}
impl IISDB_SDT_Vtbl {
    pub const fn new<Identity: IISDB_SDT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetRecordEITUserDefinedFlags<Identity: IISDB_SDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDT_Impl::GetRecordEITUserDefinedFlags(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: IDVB_SDT_Vtbl::new::<Identity, OFFSET>(), GetRecordEITUserDefinedFlags: GetRecordEITUserDefinedFlags::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IISDB_SDT as windows_core::Interface>::IID || iid == &<IDVB_SDT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IISDB_SDT {}
windows_core::imp::define_interface!(IISDB_SDTT, IISDB_SDTT_Vtbl, 0xee60ef2d_813a_4dc7_bf92_ea13dac85313);
windows_core::imp::interface_hierarchy!(IISDB_SDTT, windows_core::IUnknown);
impl IISDB_SDTT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableIdExt(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableIdExt)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTransportStreamId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTransportStreamId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOriginalNetworkId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOriginalNetworkId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetServiceId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordGroup(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordGroup)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordTargetVersion(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordTargetVersion)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordNewVersion(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordNewVersion)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDownloadLevel(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDownloadLevel)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordVersionIndicator(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordVersionIndicator)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordScheduleTimeShiftInformation(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordScheduleTimeShiftInformation)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfSchedules(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfSchedules)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordStartTimeByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<MPEG_DATE_AND_TIME> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordStartTimeByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDurationByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<MPEG_TIME> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDurationByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: Option<*mut u32>, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie.unwrap_or(core::mem::zeroed()) as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetVersionHash(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionHash)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IISDB_SDTT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTableIdExt: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetTransportStreamId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetOriginalNetworkId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordGroup: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordTargetVersion: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordNewVersion: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordDownloadLevel: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordVersionIndicator: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordScheduleTimeShiftInformation: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCountOfSchedules: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordStartTimeByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT,
    pub GetRecordDurationByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut MPEG_TIME) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionHash: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
pub trait IISDB_SDTT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetTableIdExt(&self) -> windows_core::Result<u16>;
    fn GetTransportStreamId(&self) -> windows_core::Result<u16>;
    fn GetOriginalNetworkId(&self) -> windows_core::Result<u16>;
    fn GetServiceId(&self) -> windows_core::Result<u16>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordGroup(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordTargetVersion(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordNewVersion(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordDownloadLevel(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordVersionIndicator(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordScheduleTimeShiftInformation(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordCountOfSchedules(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordStartTimeByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<MPEG_DATE_AND_TIME>;
    fn GetRecordDurationByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<MPEG_TIME>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetVersionHash(&self) -> windows_core::Result<u32>;
}
impl IISDB_SDTT_Vtbl {
    pub const fn new<Identity: IISDB_SDTT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_SDTT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableIdExt<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetTableIdExt(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTransportStreamId<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetTransportStreamId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOriginalNetworkId<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetOriginalNetworkId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceId<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetServiceId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordGroup<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetRecordGroup(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordTargetVersion<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetRecordTargetVersion(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordNewVersion<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetRecordNewVersion(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDownloadLevel<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetRecordDownloadLevel(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordVersionIndicator<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetRecordVersionIndicator(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordScheduleTimeShiftInformation<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetRecordScheduleTimeShiftInformation(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfSchedules<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetRecordCountOfSchedules(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordStartTimeByIndex<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, pmdtval: *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetRecordStartTimeByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        pmdtval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDurationByIndex<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, pmdval: *mut MPEG_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetRecordDurationByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        pmdval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IISDB_SDTT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetVersionHash<Identity: IISDB_SDTT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwversionhash: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IISDB_SDTT_Impl::GetVersionHash(this) {
                    Ok(ok__) => {
                        pdwversionhash.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetTableIdExt: GetTableIdExt::<Identity, OFFSET>,
            GetTransportStreamId: GetTransportStreamId::<Identity, OFFSET>,
            GetOriginalNetworkId: GetOriginalNetworkId::<Identity, OFFSET>,
            GetServiceId: GetServiceId::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordGroup: GetRecordGroup::<Identity, OFFSET>,
            GetRecordTargetVersion: GetRecordTargetVersion::<Identity, OFFSET>,
            GetRecordNewVersion: GetRecordNewVersion::<Identity, OFFSET>,
            GetRecordDownloadLevel: GetRecordDownloadLevel::<Identity, OFFSET>,
            GetRecordVersionIndicator: GetRecordVersionIndicator::<Identity, OFFSET>,
            GetRecordScheduleTimeShiftInformation: GetRecordScheduleTimeShiftInformation::<Identity, OFFSET>,
            GetRecordCountOfSchedules: GetRecordCountOfSchedules::<Identity, OFFSET>,
            GetRecordStartTimeByIndex: GetRecordStartTimeByIndex::<Identity, OFFSET>,
            GetRecordDurationByIndex: GetRecordDurationByIndex::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            GetVersionHash: GetVersionHash::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IISDB_SDTT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IISDB_SDTT {}
windows_core::imp::define_interface!(IIsdbAudioComponentDescriptor, IIsdbAudioComponentDescriptor_Vtbl, 0x679d2002_2425_4be4_a4c7_d6632a574f4d);
windows_core::imp::interface_hierarchy!(IIsdbAudioComponentDescriptor, windows_core::IUnknown);
impl IIsdbAudioComponentDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetStreamContent(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetStreamContent)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetComponentType(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetComponentType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetComponentTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetComponentTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetStreamType(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetStreamType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSimulcastGroupTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSimulcastGroupTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetESMultiLingualFlag(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetESMultiLingualFlag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetMainComponentFlag(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetMainComponentFlag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetQualityIndicator(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetQualityIndicator)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSamplingRate(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSamplingRate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLanguageCode(&self, pszcode: &mut [u8; 4]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLanguageCode)(windows_core::Interface::as_raw(self), core::mem::transmute(pszcode.as_ptr())).ok() }
    }
    pub unsafe fn GetLanguageCode2(&self, pszcode: &mut [u8; 4]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLanguageCode2)(windows_core::Interface::as_raw(self), core::mem::transmute(pszcode.as_ptr())).ok() }
    }
    pub unsafe fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTextW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbAudioComponentDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetStreamContent: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetComponentType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetComponentTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetStreamType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSimulcastGroupTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetESMultiLingualFlag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetMainComponentFlag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetQualityIndicator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSamplingRate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLanguageCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLanguageCode2: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTextW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IIsdbAudioComponentDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetStreamContent(&self) -> windows_core::Result<u8>;
    fn GetComponentType(&self) -> windows_core::Result<u8>;
    fn GetComponentTag(&self) -> windows_core::Result<u8>;
    fn GetStreamType(&self) -> windows_core::Result<u8>;
    fn GetSimulcastGroupTag(&self) -> windows_core::Result<u8>;
    fn GetESMultiLingualFlag(&self) -> windows_core::Result<windows_core::BOOL>;
    fn GetMainComponentFlag(&self) -> windows_core::Result<windows_core::BOOL>;
    fn GetQualityIndicator(&self) -> windows_core::Result<u8>;
    fn GetSamplingRate(&self) -> windows_core::Result<u8>;
    fn GetLanguageCode(&self, pszcode: *mut u8) -> windows_core::Result<()>;
    fn GetLanguageCode2(&self, pszcode: *mut u8) -> windows_core::Result<()>;
    fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IIsdbAudioComponentDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetStreamContent<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetStreamContent(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetComponentType<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetComponentType(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetComponentTag<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetComponentTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetStreamType<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetStreamType(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSimulcastGroupTag<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetSimulcastGroupTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetESMultiLingualFlag<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetESMultiLingualFlag(this) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetMainComponentFlag<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfval: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetMainComponentFlag(this) {
                    Ok(ok__) => {
                        pfval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetQualityIndicator<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetQualityIndicator(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSamplingRate<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetSamplingRate(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLanguageCode<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszcode: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbAudioComponentDescriptor_Impl::GetLanguageCode(this, core::mem::transmute_copy(&pszcode)).into()
            }
        }
        unsafe extern "system" fn GetLanguageCode2<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszcode: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbAudioComponentDescriptor_Impl::GetLanguageCode2(this, core::mem::transmute_copy(&pszcode)).into()
            }
        }
        unsafe extern "system" fn GetTextW<Identity: IIsdbAudioComponentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrtext: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbAudioComponentDescriptor_Impl::GetTextW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrtext.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetStreamContent: GetStreamContent::<Identity, OFFSET>,
            GetComponentType: GetComponentType::<Identity, OFFSET>,
            GetComponentTag: GetComponentTag::<Identity, OFFSET>,
            GetStreamType: GetStreamType::<Identity, OFFSET>,
            GetSimulcastGroupTag: GetSimulcastGroupTag::<Identity, OFFSET>,
            GetESMultiLingualFlag: GetESMultiLingualFlag::<Identity, OFFSET>,
            GetMainComponentFlag: GetMainComponentFlag::<Identity, OFFSET>,
            GetQualityIndicator: GetQualityIndicator::<Identity, OFFSET>,
            GetSamplingRate: GetSamplingRate::<Identity, OFFSET>,
            GetLanguageCode: GetLanguageCode::<Identity, OFFSET>,
            GetLanguageCode2: GetLanguageCode2::<Identity, OFFSET>,
            GetTextW: GetTextW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbAudioComponentDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbAudioComponentDescriptor {}
windows_core::imp::define_interface!(IIsdbCAContractInformationDescriptor, IIsdbCAContractInformationDescriptor_Vtbl, 0x08e18b25_a28f_4e92_821e_4fced5cc2291);
windows_core::imp::interface_hierarchy!(IIsdbCAContractInformationDescriptor, windows_core::IUnknown);
impl IIsdbCAContractInformationDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCASystemId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCASystemId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCAUnitId(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCAUnitId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordComponentTag(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordComponentTag)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetContractVerificationInfoLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetContractVerificationInfoLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetContractVerificationInfo(&self, bbuflength: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetContractVerificationInfo)(windows_core::Interface::as_raw(self), bbuflength, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetFeeNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetFeeNameW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbCAContractInformationDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCASystemId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetCAUnitId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordComponentTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetContractVerificationInfoLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetContractVerificationInfo: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetFeeNameW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IIsdbCAContractInformationDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCASystemId(&self) -> windows_core::Result<u16>;
    fn GetCAUnitId(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordComponentTag(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetContractVerificationInfoLength(&self) -> windows_core::Result<u8>;
    fn GetContractVerificationInfo(&self, bbuflength: u8) -> windows_core::Result<u8>;
    fn GetFeeNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IIsdbCAContractInformationDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbCAContractInformationDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbCAContractInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAContractInformationDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbCAContractInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAContractInformationDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCASystemId<Identity: IIsdbCAContractInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAContractInformationDescriptor_Impl::GetCASystemId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCAUnitId<Identity: IIsdbCAContractInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAContractInformationDescriptor_Impl::GetCAUnitId(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IIsdbCAContractInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAContractInformationDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordComponentTag<Identity: IIsdbCAContractInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAContractInformationDescriptor_Impl::GetRecordComponentTag(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetContractVerificationInfoLength<Identity: IIsdbCAContractInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAContractInformationDescriptor_Impl::GetContractVerificationInfoLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetContractVerificationInfo<Identity: IIsdbCAContractInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bbuflength: u8, pbbuf: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAContractInformationDescriptor_Impl::GetContractVerificationInfo(this, core::mem::transmute_copy(&bbuflength)) {
                    Ok(ok__) => {
                        pbbuf.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetFeeNameW<Identity: IIsdbCAContractInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAContractInformationDescriptor_Impl::GetFeeNameW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCASystemId: GetCASystemId::<Identity, OFFSET>,
            GetCAUnitId: GetCAUnitId::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordComponentTag: GetRecordComponentTag::<Identity, OFFSET>,
            GetContractVerificationInfoLength: GetContractVerificationInfoLength::<Identity, OFFSET>,
            GetContractVerificationInfo: GetContractVerificationInfo::<Identity, OFFSET>,
            GetFeeNameW: GetFeeNameW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbCAContractInformationDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbCAContractInformationDescriptor {}
windows_core::imp::define_interface!(IIsdbCADescriptor, IIsdbCADescriptor_Vtbl, 0x0570aa47_52bc_42ae_8ca5_969f41e81aea);
windows_core::imp::interface_hierarchy!(IIsdbCADescriptor, windows_core::IUnknown);
impl IIsdbCADescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCASystemId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCASystemId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetReservedBits(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetReservedBits)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCAPID(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCAPID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetPrivateDataBytes(&self, pbbufferlength: *mut u8, pbbuffer: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetPrivateDataBytes)(windows_core::Interface::as_raw(self), pbbufferlength as _, pbbuffer as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbCADescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCASystemId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetReservedBits: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCAPID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetPrivateDataBytes: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IIsdbCADescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCASystemId(&self) -> windows_core::Result<u16>;
    fn GetReservedBits(&self) -> windows_core::Result<u8>;
    fn GetCAPID(&self) -> windows_core::Result<u16>;
    fn GetPrivateDataBytes(&self, pbbufferlength: *mut u8, pbbuffer: *mut u8) -> windows_core::Result<()>;
}
impl IIsdbCADescriptor_Vtbl {
    pub const fn new<Identity: IIsdbCADescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbCADescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCADescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbCADescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCADescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCASystemId<Identity: IIsdbCADescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCADescriptor_Impl::GetCASystemId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetReservedBits<Identity: IIsdbCADescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCADescriptor_Impl::GetReservedBits(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCAPID<Identity: IIsdbCADescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCADescriptor_Impl::GetCAPID(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPrivateDataBytes<Identity: IIsdbCADescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbbufferlength: *mut u8, pbbuffer: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbCADescriptor_Impl::GetPrivateDataBytes(this, core::mem::transmute_copy(&pbbufferlength), core::mem::transmute_copy(&pbbuffer)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCASystemId: GetCASystemId::<Identity, OFFSET>,
            GetReservedBits: GetReservedBits::<Identity, OFFSET>,
            GetCAPID: GetCAPID::<Identity, OFFSET>,
            GetPrivateDataBytes: GetPrivateDataBytes::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbCADescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbCADescriptor {}
windows_core::imp::define_interface!(IIsdbCAServiceDescriptor, IIsdbCAServiceDescriptor_Vtbl, 0x39cbeb97_ff0b_42a7_9ab9_7b9cfe70a77a);
windows_core::imp::interface_hierarchy!(IIsdbCAServiceDescriptor, windows_core::IUnknown);
impl IIsdbCAServiceDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCASystemId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCASystemId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCABroadcasterGroupId(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCABroadcasterGroupId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetMessageControl(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetMessageControl)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetServiceIds(&self, pbnumserviceids: *mut u8, pwserviceids: *mut u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetServiceIds)(windows_core::Interface::as_raw(self), pbnumserviceids as _, pwserviceids as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbCAServiceDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCASystemId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetCABroadcasterGroupId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetMessageControl: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetServiceIds: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8, *mut u16) -> windows_core::HRESULT,
}
pub trait IIsdbCAServiceDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCASystemId(&self) -> windows_core::Result<u16>;
    fn GetCABroadcasterGroupId(&self) -> windows_core::Result<u8>;
    fn GetMessageControl(&self) -> windows_core::Result<u8>;
    fn GetServiceIds(&self, pbnumserviceids: *mut u8, pwserviceids: *mut u16) -> windows_core::Result<()>;
}
impl IIsdbCAServiceDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbCAServiceDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbCAServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAServiceDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbCAServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAServiceDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCASystemId<Identity: IIsdbCAServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAServiceDescriptor_Impl::GetCASystemId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCABroadcasterGroupId<Identity: IIsdbCAServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAServiceDescriptor_Impl::GetCABroadcasterGroupId(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetMessageControl<Identity: IIsdbCAServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbCAServiceDescriptor_Impl::GetMessageControl(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceIds<Identity: IIsdbCAServiceDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbnumserviceids: *mut u8, pwserviceids: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbCAServiceDescriptor_Impl::GetServiceIds(this, core::mem::transmute_copy(&pbnumserviceids), core::mem::transmute_copy(&pwserviceids)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCASystemId: GetCASystemId::<Identity, OFFSET>,
            GetCABroadcasterGroupId: GetCABroadcasterGroupId::<Identity, OFFSET>,
            GetMessageControl: GetMessageControl::<Identity, OFFSET>,
            GetServiceIds: GetServiceIds::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbCAServiceDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbCAServiceDescriptor {}
windows_core::imp::define_interface!(IIsdbComponentGroupDescriptor, IIsdbComponentGroupDescriptor_Vtbl, 0xa494f17f_c592_47d8_8943_64c9a34be7b9);
windows_core::imp::interface_hierarchy!(IIsdbComponentGroupDescriptor, windows_core::IUnknown);
impl IIsdbComponentGroupDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetComponentGroupType(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetComponentGroupType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordGroupId(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordGroupId)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordNumberOfCAUnit(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordNumberOfCAUnit)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCAUnitCAUnitId(&self, brecordindex: u8, bcaunitindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCAUnitCAUnitId)(windows_core::Interface::as_raw(self), brecordindex, bcaunitindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCAUnitNumberOfComponents(&self, brecordindex: u8, bcaunitindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCAUnitNumberOfComponents)(windows_core::Interface::as_raw(self), brecordindex, bcaunitindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCAUnitComponentTag(&self, brecordindex: u8, bcaunitindex: u8, bcomponentindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCAUnitComponentTag)(windows_core::Interface::as_raw(self), brecordindex, bcaunitindex, bcomponentindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordTotalBitRate(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordTotalBitRate)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordTextW(&self, brecordindex: u8, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordTextW)(windows_core::Interface::as_raw(self), brecordindex, convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbComponentGroupDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetComponentGroupType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordGroupId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordNumberOfCAUnit: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCAUnitCAUnitId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCAUnitNumberOfComponents: unsafe extern "system" fn(*mut core::ffi::c_void, u8, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCAUnitComponentTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, u8, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordTotalBitRate: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordTextW: unsafe extern "system" fn(*mut core::ffi::c_void, u8, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IIsdbComponentGroupDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetComponentGroupType(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordGroupId(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetRecordNumberOfCAUnit(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetRecordCAUnitCAUnitId(&self, brecordindex: u8, bcaunitindex: u8) -> windows_core::Result<u8>;
    fn GetRecordCAUnitNumberOfComponents(&self, brecordindex: u8, bcaunitindex: u8) -> windows_core::Result<u8>;
    fn GetRecordCAUnitComponentTag(&self, brecordindex: u8, bcaunitindex: u8, bcomponentindex: u8) -> windows_core::Result<u8>;
    fn GetRecordTotalBitRate(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetRecordTextW(&self, brecordindex: u8, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IIsdbComponentGroupDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbComponentGroupDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbComponentGroupDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetComponentGroupType<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbComponentGroupDescriptor_Impl::GetComponentGroupType(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbComponentGroupDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordGroupId<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbComponentGroupDescriptor_Impl::GetRecordGroupId(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordNumberOfCAUnit<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbComponentGroupDescriptor_Impl::GetRecordNumberOfCAUnit(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCAUnitCAUnitId<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, bcaunitindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbComponentGroupDescriptor_Impl::GetRecordCAUnitCAUnitId(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&bcaunitindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCAUnitNumberOfComponents<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, bcaunitindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbComponentGroupDescriptor_Impl::GetRecordCAUnitNumberOfComponents(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&bcaunitindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCAUnitComponentTag<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, bcaunitindex: u8, bcomponentindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbComponentGroupDescriptor_Impl::GetRecordCAUnitComponentTag(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&bcaunitindex), core::mem::transmute_copy(&bcomponentindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordTotalBitRate<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbComponentGroupDescriptor_Impl::GetRecordTotalBitRate(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordTextW<Identity: IIsdbComponentGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, convmode: DVB_STRCONV_MODE, pbstrtext: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbComponentGroupDescriptor_Impl::GetRecordTextW(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrtext.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetComponentGroupType: GetComponentGroupType::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordGroupId: GetRecordGroupId::<Identity, OFFSET>,
            GetRecordNumberOfCAUnit: GetRecordNumberOfCAUnit::<Identity, OFFSET>,
            GetRecordCAUnitCAUnitId: GetRecordCAUnitCAUnitId::<Identity, OFFSET>,
            GetRecordCAUnitNumberOfComponents: GetRecordCAUnitNumberOfComponents::<Identity, OFFSET>,
            GetRecordCAUnitComponentTag: GetRecordCAUnitComponentTag::<Identity, OFFSET>,
            GetRecordTotalBitRate: GetRecordTotalBitRate::<Identity, OFFSET>,
            GetRecordTextW: GetRecordTextW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbComponentGroupDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbComponentGroupDescriptor {}
windows_core::imp::define_interface!(IIsdbDataContentDescriptor, IIsdbDataContentDescriptor_Vtbl, 0xa428100a_e646_4bd6_aa14_6087bdc08cd5);
windows_core::imp::interface_hierarchy!(IIsdbDataContentDescriptor, windows_core::IUnknown);
impl IIsdbDataContentDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDataComponentId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDataComponentId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetEntryComponent(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEntryComponent)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSelectorLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSelectorLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSelectorBytes(&self, bbuflength: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSelectorBytes)(windows_core::Interface::as_raw(self), bbuflength, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordComponentRef(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordComponentRef)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLanguageCode(&self, pszcode: &mut [u8; 4]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLanguageCode)(windows_core::Interface::as_raw(self), core::mem::transmute(pszcode.as_ptr())).ok() }
    }
    pub unsafe fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTextW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbDataContentDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetDataComponentId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetEntryComponent: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSelectorLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSelectorBytes: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordComponentRef: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetLanguageCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTextW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IIsdbDataContentDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetDataComponentId(&self) -> windows_core::Result<u16>;
    fn GetEntryComponent(&self) -> windows_core::Result<u8>;
    fn GetSelectorLength(&self) -> windows_core::Result<u8>;
    fn GetSelectorBytes(&self, bbuflength: u8) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordComponentRef(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetLanguageCode(&self, pszcode: *mut u8) -> windows_core::Result<()>;
    fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IIsdbDataContentDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbDataContentDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbDataContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDataContentDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbDataContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDataContentDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDataComponentId<Identity: IIsdbDataContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDataContentDescriptor_Impl::GetDataComponentId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEntryComponent<Identity: IIsdbDataContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDataContentDescriptor_Impl::GetEntryComponent(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSelectorLength<Identity: IIsdbDataContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDataContentDescriptor_Impl::GetSelectorLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSelectorBytes<Identity: IIsdbDataContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bbuflength: u8, pbbuf: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDataContentDescriptor_Impl::GetSelectorBytes(this, core::mem::transmute_copy(&bbuflength)) {
                    Ok(ok__) => {
                        pbbuf.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IIsdbDataContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDataContentDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordComponentRef<Identity: IIsdbDataContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDataContentDescriptor_Impl::GetRecordComponentRef(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLanguageCode<Identity: IIsdbDataContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszcode: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbDataContentDescriptor_Impl::GetLanguageCode(this, core::mem::transmute_copy(&pszcode)).into()
            }
        }
        unsafe extern "system" fn GetTextW<Identity: IIsdbDataContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrtext: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDataContentDescriptor_Impl::GetTextW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrtext.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetDataComponentId: GetDataComponentId::<Identity, OFFSET>,
            GetEntryComponent: GetEntryComponent::<Identity, OFFSET>,
            GetSelectorLength: GetSelectorLength::<Identity, OFFSET>,
            GetSelectorBytes: GetSelectorBytes::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordComponentRef: GetRecordComponentRef::<Identity, OFFSET>,
            GetLanguageCode: GetLanguageCode::<Identity, OFFSET>,
            GetTextW: GetTextW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbDataContentDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbDataContentDescriptor {}
windows_core::imp::define_interface!(IIsdbDigitalCopyControlDescriptor, IIsdbDigitalCopyControlDescriptor_Vtbl, 0x1a28417e_266a_4bb8_a4bd_d782bcfb8161);
windows_core::imp::interface_hierarchy!(IIsdbDigitalCopyControlDescriptor, windows_core::IUnknown);
impl IIsdbDigitalCopyControlDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCopyControl(&self, pbdigitalrecordingcontroldata: *mut u8, pbcopycontroltype: *mut u8, pbapscontroldata: *mut u8, pbmaximumbitrate: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetCopyControl)(windows_core::Interface::as_raw(self), pbdigitalrecordingcontroldata as _, pbcopycontroltype as _, pbapscontroldata as _, pbmaximumbitrate as _).ok() }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCopyControl(&self, brecordindex: u8, pbcomponenttag: *mut u8, pbdigitalrecordingcontroldata: *mut u8, pbcopycontroltype: *mut u8, pbapscontroldata: *mut u8, pbmaximumbitrate: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordCopyControl)(windows_core::Interface::as_raw(self), brecordindex, pbcomponenttag as _, pbdigitalrecordingcontroldata as _, pbcopycontroltype as _, pbapscontroldata as _, pbmaximumbitrate as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbDigitalCopyControlDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCopyControl: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8, *mut u8, *mut u8, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordCopyControl: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8, *mut u8, *mut u8, *mut u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IIsdbDigitalCopyControlDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCopyControl(&self, pbdigitalrecordingcontroldata: *mut u8, pbcopycontroltype: *mut u8, pbapscontroldata: *mut u8, pbmaximumbitrate: *mut u8) -> windows_core::Result<()>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordCopyControl(&self, brecordindex: u8, pbcomponenttag: *mut u8, pbdigitalrecordingcontroldata: *mut u8, pbcopycontroltype: *mut u8, pbapscontroldata: *mut u8, pbmaximumbitrate: *mut u8) -> windows_core::Result<()>;
}
impl IIsdbDigitalCopyControlDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbDigitalCopyControlDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbDigitalCopyControlDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDigitalCopyControlDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbDigitalCopyControlDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDigitalCopyControlDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCopyControl<Identity: IIsdbDigitalCopyControlDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbdigitalrecordingcontroldata: *mut u8, pbcopycontroltype: *mut u8, pbapscontroldata: *mut u8, pbmaximumbitrate: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbDigitalCopyControlDescriptor_Impl::GetCopyControl(this, core::mem::transmute_copy(&pbdigitalrecordingcontroldata), core::mem::transmute_copy(&pbcopycontroltype), core::mem::transmute_copy(&pbapscontroldata), core::mem::transmute_copy(&pbmaximumbitrate)).into()
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IIsdbDigitalCopyControlDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDigitalCopyControlDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCopyControl<Identity: IIsdbDigitalCopyControlDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbcomponenttag: *mut u8, pbdigitalrecordingcontroldata: *mut u8, pbcopycontroltype: *mut u8, pbapscontroldata: *mut u8, pbmaximumbitrate: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbDigitalCopyControlDescriptor_Impl::GetRecordCopyControl(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&pbcomponenttag), core::mem::transmute_copy(&pbdigitalrecordingcontroldata), core::mem::transmute_copy(&pbcopycontroltype), core::mem::transmute_copy(&pbapscontroldata), core::mem::transmute_copy(&pbmaximumbitrate)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCopyControl: GetCopyControl::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordCopyControl: GetRecordCopyControl::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbDigitalCopyControlDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbDigitalCopyControlDescriptor {}
windows_core::imp::define_interface!(IIsdbDownloadContentDescriptor, IIsdbDownloadContentDescriptor_Vtbl, 0x5298661e_cb88_4f5f_a1de_5f440c185b92);
windows_core::imp::interface_hierarchy!(IIsdbDownloadContentDescriptor, windows_core::IUnknown);
impl IIsdbDownloadContentDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetFlags(&self, pfreboot: *mut windows_core::BOOL, pfaddon: *mut windows_core::BOOL, pfcompatibility: *mut windows_core::BOOL, pfmoduleinfo: *mut windows_core::BOOL, pftextinfo: *mut windows_core::BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetFlags)(windows_core::Interface::as_raw(self), pfreboot as _, pfaddon as _, pfcompatibility as _, pfmoduleinfo as _, pftextinfo as _).ok() }
    }
    pub unsafe fn GetComponentSize(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetComponentSize)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDownloadId(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDownloadId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTimeOutValueDII(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTimeOutValueDII)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLeakRate(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLeakRate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetComponentTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetComponentTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCompatiblityDescriptorLength(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCompatiblityDescriptorLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCompatiblityDescriptor(&self) -> windows_core::Result<*mut u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCompatiblityDescriptor)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordModuleId(&self, wrecordindex: u16) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordModuleId)(windows_core::Interface::as_raw(self), wrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordModuleSize(&self, wrecordindex: u16) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordModuleSize)(windows_core::Interface::as_raw(self), wrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordModuleInfoLength(&self, wrecordindex: u16) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordModuleInfoLength)(windows_core::Interface::as_raw(self), wrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordModuleInfo(&self, wrecordindex: u16) -> windows_core::Result<*mut u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordModuleInfo)(windows_core::Interface::as_raw(self), wrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTextLanguageCode(&self, szcode: &mut [u8; 4]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTextLanguageCode)(windows_core::Interface::as_raw(self), core::mem::transmute(szcode.as_ptr())).ok() }
    }
    pub unsafe fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTextW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbDownloadContentDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetFlags: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL, *mut windows_core::BOOL, *mut windows_core::BOOL, *mut windows_core::BOOL, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub GetComponentSize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetDownloadId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTimeOutValueDII: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetLeakRate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetComponentTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCompatiblityDescriptorLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetCompatiblityDescriptor: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetRecordModuleId: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *mut u16) -> windows_core::HRESULT,
    pub GetRecordModuleSize: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *mut u32) -> windows_core::HRESULT,
    pub GetRecordModuleInfoLength: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *mut u8) -> windows_core::HRESULT,
    pub GetRecordModuleInfo: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *mut *mut u8) -> windows_core::HRESULT,
    pub GetTextLanguageCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTextW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IIsdbDownloadContentDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetFlags(&self, pfreboot: *mut windows_core::BOOL, pfaddon: *mut windows_core::BOOL, pfcompatibility: *mut windows_core::BOOL, pfmoduleinfo: *mut windows_core::BOOL, pftextinfo: *mut windows_core::BOOL) -> windows_core::Result<()>;
    fn GetComponentSize(&self) -> windows_core::Result<u32>;
    fn GetDownloadId(&self) -> windows_core::Result<u32>;
    fn GetTimeOutValueDII(&self) -> windows_core::Result<u32>;
    fn GetLeakRate(&self) -> windows_core::Result<u32>;
    fn GetComponentTag(&self) -> windows_core::Result<u8>;
    fn GetCompatiblityDescriptorLength(&self) -> windows_core::Result<u16>;
    fn GetCompatiblityDescriptor(&self) -> windows_core::Result<*mut u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u16>;
    fn GetRecordModuleId(&self, wrecordindex: u16) -> windows_core::Result<u16>;
    fn GetRecordModuleSize(&self, wrecordindex: u16) -> windows_core::Result<u32>;
    fn GetRecordModuleInfoLength(&self, wrecordindex: u16) -> windows_core::Result<u8>;
    fn GetRecordModuleInfo(&self, wrecordindex: u16) -> windows_core::Result<*mut u8>;
    fn GetTextLanguageCode(&self, szcode: *mut u8) -> windows_core::Result<()>;
    fn GetTextW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IIsdbDownloadContentDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetFlags<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfreboot: *mut windows_core::BOOL, pfaddon: *mut windows_core::BOOL, pfcompatibility: *mut windows_core::BOOL, pfmoduleinfo: *mut windows_core::BOOL, pftextinfo: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbDownloadContentDescriptor_Impl::GetFlags(this, core::mem::transmute_copy(&pfreboot), core::mem::transmute_copy(&pfaddon), core::mem::transmute_copy(&pfcompatibility), core::mem::transmute_copy(&pfmoduleinfo), core::mem::transmute_copy(&pftextinfo)).into()
            }
        }
        unsafe extern "system" fn GetComponentSize<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetComponentSize(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDownloadId<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetDownloadId(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTimeOutValueDII<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetTimeOutValueDII(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLeakRate<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetLeakRate(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetComponentTag<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetComponentTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCompatiblityDescriptorLength<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwlength: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetCompatiblityDescriptorLength(this) {
                    Ok(ok__) => {
                        pwlength.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCompatiblityDescriptor<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppbdata: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetCompatiblityDescriptor(this) {
                    Ok(ok__) => {
                        ppbdata.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordModuleId<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, wrecordindex: u16, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetRecordModuleId(this, core::mem::transmute_copy(&wrecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordModuleSize<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, wrecordindex: u16, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetRecordModuleSize(this, core::mem::transmute_copy(&wrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordModuleInfoLength<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, wrecordindex: u16, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetRecordModuleInfoLength(this, core::mem::transmute_copy(&wrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordModuleInfo<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, wrecordindex: u16, ppbdata: *mut *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetRecordModuleInfo(this, core::mem::transmute_copy(&wrecordindex)) {
                    Ok(ok__) => {
                        ppbdata.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTextLanguageCode<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, szcode: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbDownloadContentDescriptor_Impl::GetTextLanguageCode(this, core::mem::transmute_copy(&szcode)).into()
            }
        }
        unsafe extern "system" fn GetTextW<Identity: IIsdbDownloadContentDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbDownloadContentDescriptor_Impl::GetTextW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetFlags: GetFlags::<Identity, OFFSET>,
            GetComponentSize: GetComponentSize::<Identity, OFFSET>,
            GetDownloadId: GetDownloadId::<Identity, OFFSET>,
            GetTimeOutValueDII: GetTimeOutValueDII::<Identity, OFFSET>,
            GetLeakRate: GetLeakRate::<Identity, OFFSET>,
            GetComponentTag: GetComponentTag::<Identity, OFFSET>,
            GetCompatiblityDescriptorLength: GetCompatiblityDescriptorLength::<Identity, OFFSET>,
            GetCompatiblityDescriptor: GetCompatiblityDescriptor::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordModuleId: GetRecordModuleId::<Identity, OFFSET>,
            GetRecordModuleSize: GetRecordModuleSize::<Identity, OFFSET>,
            GetRecordModuleInfoLength: GetRecordModuleInfoLength::<Identity, OFFSET>,
            GetRecordModuleInfo: GetRecordModuleInfo::<Identity, OFFSET>,
            GetTextLanguageCode: GetTextLanguageCode::<Identity, OFFSET>,
            GetTextW: GetTextW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbDownloadContentDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbDownloadContentDescriptor {}
windows_core::imp::define_interface!(IIsdbEmergencyInformationDescriptor, IIsdbEmergencyInformationDescriptor_Vtbl, 0xba6fa681_b973_4da1_9207_ac3e7f0341eb);
windows_core::imp::interface_hierarchy!(IIsdbEmergencyInformationDescriptor, windows_core::IUnknown);
impl IIsdbEmergencyInformationDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetServiceId(&self, brecordindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceId)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetStartEndFlag(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetStartEndFlag)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSignalLevel(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSignalLevel)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetAreaCode(&self, brecordindex: u8, ppwval: *mut *mut u16, pbnumareacodes: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetAreaCode)(windows_core::Interface::as_raw(self), brecordindex, ppwval as _, pbnumareacodes as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbEmergencyInformationDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetServiceId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u16) -> windows_core::HRESULT,
    pub GetStartEndFlag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetSignalLevel: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetAreaCode: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut *mut u16, *mut u8) -> windows_core::HRESULT,
}
pub trait IIsdbEmergencyInformationDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetServiceId(&self, brecordindex: u8) -> windows_core::Result<u16>;
    fn GetStartEndFlag(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetSignalLevel(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetAreaCode(&self, brecordindex: u8, ppwval: *mut *mut u16, pbnumareacodes: *mut u8) -> windows_core::Result<()>;
}
impl IIsdbEmergencyInformationDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbEmergencyInformationDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbEmergencyInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbEmergencyInformationDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbEmergencyInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbEmergencyInformationDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IIsdbEmergencyInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbEmergencyInformationDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceId<Identity: IIsdbEmergencyInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbEmergencyInformationDescriptor_Impl::GetServiceId(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetStartEndFlag<Identity: IIsdbEmergencyInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbEmergencyInformationDescriptor_Impl::GetStartEndFlag(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSignalLevel<Identity: IIsdbEmergencyInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbEmergencyInformationDescriptor_Impl::GetSignalLevel(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetAreaCode<Identity: IIsdbEmergencyInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, ppwval: *mut *mut u16, pbnumareacodes: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbEmergencyInformationDescriptor_Impl::GetAreaCode(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&ppwval), core::mem::transmute_copy(&pbnumareacodes)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetServiceId: GetServiceId::<Identity, OFFSET>,
            GetStartEndFlag: GetStartEndFlag::<Identity, OFFSET>,
            GetSignalLevel: GetSignalLevel::<Identity, OFFSET>,
            GetAreaCode: GetAreaCode::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbEmergencyInformationDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbEmergencyInformationDescriptor {}
windows_core::imp::define_interface!(IIsdbEventGroupDescriptor, IIsdbEventGroupDescriptor_Vtbl, 0x94b06780_2e2a_44dc_a966_cc56fdabc6c2);
windows_core::imp::interface_hierarchy!(IIsdbEventGroupDescriptor, windows_core::IUnknown);
impl IIsdbEventGroupDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetGroupType(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetGroupType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordEvent(&self, brecordindex: u8, pwserviceid: *mut u16, pweventid: *mut u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordEvent)(windows_core::Interface::as_raw(self), brecordindex, pwserviceid as _, pweventid as _).ok() }
    }
    pub unsafe fn GetCountOfRefRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRefRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRefRecordEvent(&self, brecordindex: u8, pworiginalnetworkid: *mut u16, pwtransportstreamid: *mut u16, pwserviceid: *mut u16, pweventid: *mut u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRefRecordEvent)(windows_core::Interface::as_raw(self), brecordindex, pworiginalnetworkid as _, pwtransportstreamid as _, pwserviceid as _, pweventid as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbEventGroupDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetGroupType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordEvent: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u16, *mut u16) -> windows_core::HRESULT,
    pub GetCountOfRefRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRefRecordEvent: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u16, *mut u16, *mut u16, *mut u16) -> windows_core::HRESULT,
}
pub trait IIsdbEventGroupDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetGroupType(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordEvent(&self, brecordindex: u8, pwserviceid: *mut u16, pweventid: *mut u16) -> windows_core::Result<()>;
    fn GetCountOfRefRecords(&self) -> windows_core::Result<u8>;
    fn GetRefRecordEvent(&self, brecordindex: u8, pworiginalnetworkid: *mut u16, pwtransportstreamid: *mut u16, pwserviceid: *mut u16, pweventid: *mut u16) -> windows_core::Result<()>;
}
impl IIsdbEventGroupDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbEventGroupDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbEventGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbEventGroupDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbEventGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbEventGroupDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetGroupType<Identity: IIsdbEventGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbEventGroupDescriptor_Impl::GetGroupType(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IIsdbEventGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbEventGroupDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordEvent<Identity: IIsdbEventGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pwserviceid: *mut u16, pweventid: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbEventGroupDescriptor_Impl::GetRecordEvent(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&pwserviceid), core::mem::transmute_copy(&pweventid)).into()
            }
        }
        unsafe extern "system" fn GetCountOfRefRecords<Identity: IIsdbEventGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbEventGroupDescriptor_Impl::GetCountOfRefRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRefRecordEvent<Identity: IIsdbEventGroupDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pworiginalnetworkid: *mut u16, pwtransportstreamid: *mut u16, pwserviceid: *mut u16, pweventid: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbEventGroupDescriptor_Impl::GetRefRecordEvent(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&pworiginalnetworkid), core::mem::transmute_copy(&pwtransportstreamid), core::mem::transmute_copy(&pwserviceid), core::mem::transmute_copy(&pweventid)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetGroupType: GetGroupType::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordEvent: GetRecordEvent::<Identity, OFFSET>,
            GetCountOfRefRecords: GetCountOfRefRecords::<Identity, OFFSET>,
            GetRefRecordEvent: GetRefRecordEvent::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbEventGroupDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbEventGroupDescriptor {}
windows_core::imp::define_interface!(IIsdbHierarchicalTransmissionDescriptor, IIsdbHierarchicalTransmissionDescriptor_Vtbl, 0xb7b3ae90_ee0b_446d_8769_f7e2aa266aa6);
windows_core::imp::interface_hierarchy!(IIsdbHierarchicalTransmissionDescriptor, windows_core::IUnknown);
impl IIsdbHierarchicalTransmissionDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetFutureUse1(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetFutureUse1)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetQualityLevel(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetQualityLevel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetFutureUse2(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetFutureUse2)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetReferencePid(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetReferencePid)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbHierarchicalTransmissionDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetFutureUse1: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetQualityLevel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetFutureUse2: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetReferencePid: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
}
pub trait IIsdbHierarchicalTransmissionDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetFutureUse1(&self) -> windows_core::Result<u8>;
    fn GetQualityLevel(&self) -> windows_core::Result<u8>;
    fn GetFutureUse2(&self) -> windows_core::Result<u8>;
    fn GetReferencePid(&self) -> windows_core::Result<u16>;
}
impl IIsdbHierarchicalTransmissionDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbHierarchicalTransmissionDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbHierarchicalTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbHierarchicalTransmissionDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbHierarchicalTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbHierarchicalTransmissionDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetFutureUse1<Identity: IIsdbHierarchicalTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbHierarchicalTransmissionDescriptor_Impl::GetFutureUse1(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetQualityLevel<Identity: IIsdbHierarchicalTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbHierarchicalTransmissionDescriptor_Impl::GetQualityLevel(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetFutureUse2<Identity: IIsdbHierarchicalTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbHierarchicalTransmissionDescriptor_Impl::GetFutureUse2(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetReferencePid<Identity: IIsdbHierarchicalTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbHierarchicalTransmissionDescriptor_Impl::GetReferencePid(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetFutureUse1: GetFutureUse1::<Identity, OFFSET>,
            GetQualityLevel: GetQualityLevel::<Identity, OFFSET>,
            GetFutureUse2: GetFutureUse2::<Identity, OFFSET>,
            GetReferencePid: GetReferencePid::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbHierarchicalTransmissionDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbHierarchicalTransmissionDescriptor {}
windows_core::imp::define_interface!(IIsdbLogoTransmissionDescriptor, IIsdbLogoTransmissionDescriptor_Vtbl, 0xe0103f49_4ae1_4f07_9098_756db1fa88cd);
windows_core::imp::interface_hierarchy!(IIsdbLogoTransmissionDescriptor, windows_core::IUnknown);
impl IIsdbLogoTransmissionDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLogoTransmissionType(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLogoTransmissionType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLogoId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLogoId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLogoVersion(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLogoVersion)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDownloadDataId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDownloadDataId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLogoCharW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLogoCharW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbLogoTransmissionDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLogoTransmissionType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLogoId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetLogoVersion: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetDownloadDataId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetLogoCharW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IIsdbLogoTransmissionDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetLogoTransmissionType(&self) -> windows_core::Result<u8>;
    fn GetLogoId(&self) -> windows_core::Result<u16>;
    fn GetLogoVersion(&self) -> windows_core::Result<u16>;
    fn GetDownloadDataId(&self) -> windows_core::Result<u16>;
    fn GetLogoCharW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IIsdbLogoTransmissionDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbLogoTransmissionDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbLogoTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbLogoTransmissionDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbLogoTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbLogoTransmissionDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLogoTransmissionType<Identity: IIsdbLogoTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbLogoTransmissionDescriptor_Impl::GetLogoTransmissionType(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLogoId<Identity: IIsdbLogoTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbLogoTransmissionDescriptor_Impl::GetLogoId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLogoVersion<Identity: IIsdbLogoTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbLogoTransmissionDescriptor_Impl::GetLogoVersion(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDownloadDataId<Identity: IIsdbLogoTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbLogoTransmissionDescriptor_Impl::GetDownloadDataId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLogoCharW<Identity: IIsdbLogoTransmissionDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrchar: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbLogoTransmissionDescriptor_Impl::GetLogoCharW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrchar.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetLogoTransmissionType: GetLogoTransmissionType::<Identity, OFFSET>,
            GetLogoId: GetLogoId::<Identity, OFFSET>,
            GetLogoVersion: GetLogoVersion::<Identity, OFFSET>,
            GetDownloadDataId: GetDownloadDataId::<Identity, OFFSET>,
            GetLogoCharW: GetLogoCharW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbLogoTransmissionDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbLogoTransmissionDescriptor {}
windows_core::imp::define_interface!(IIsdbSIParameterDescriptor, IIsdbSIParameterDescriptor_Vtbl, 0xf837dc36_867c_426a_9111_f62093951a45);
windows_core::imp::interface_hierarchy!(IIsdbSIParameterDescriptor, windows_core::IUnknown);
impl IIsdbSIParameterDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetParameterVersion(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetParameterVersion)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetUpdateTime(&self) -> windows_core::Result<MPEG_DATE> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetUpdateTime)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordNumberOfTable(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordNumberOfTable)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableId(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableId)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptionLength(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptionLength)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptionBytes(&self, brecordindex: u8, pbbufferlength: *mut u8, pbbuffer: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptionBytes)(windows_core::Interface::as_raw(self), brecordindex, pbbufferlength as _, pbbuffer as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbSIParameterDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetParameterVersion: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetUpdateTime: unsafe extern "system" fn(*mut core::ffi::c_void, *mut MPEG_DATE) -> windows_core::HRESULT,
    pub GetRecordNumberOfTable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTableId: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetTableDescriptionLength: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetTableDescriptionBytes: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IIsdbSIParameterDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetParameterVersion(&self) -> windows_core::Result<u8>;
    fn GetUpdateTime(&self) -> windows_core::Result<MPEG_DATE>;
    fn GetRecordNumberOfTable(&self) -> windows_core::Result<u8>;
    fn GetTableId(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetTableDescriptionLength(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetTableDescriptionBytes(&self, brecordindex: u8, pbbufferlength: *mut u8, pbbuffer: *mut u8) -> windows_core::Result<()>;
}
impl IIsdbSIParameterDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbSIParameterDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbSIParameterDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSIParameterDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbSIParameterDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSIParameterDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetParameterVersion<Identity: IIsdbSIParameterDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSIParameterDescriptor_Impl::GetParameterVersion(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetUpdateTime<Identity: IIsdbSIParameterDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut MPEG_DATE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSIParameterDescriptor_Impl::GetUpdateTime(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordNumberOfTable<Identity: IIsdbSIParameterDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSIParameterDescriptor_Impl::GetRecordNumberOfTable(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableId<Identity: IIsdbSIParameterDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSIParameterDescriptor_Impl::GetTableId(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptionLength<Identity: IIsdbSIParameterDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSIParameterDescriptor_Impl::GetTableDescriptionLength(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptionBytes<Identity: IIsdbSIParameterDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbbufferlength: *mut u8, pbbuffer: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbSIParameterDescriptor_Impl::GetTableDescriptionBytes(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&pbbufferlength), core::mem::transmute_copy(&pbbuffer)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetParameterVersion: GetParameterVersion::<Identity, OFFSET>,
            GetUpdateTime: GetUpdateTime::<Identity, OFFSET>,
            GetRecordNumberOfTable: GetRecordNumberOfTable::<Identity, OFFSET>,
            GetTableId: GetTableId::<Identity, OFFSET>,
            GetTableDescriptionLength: GetTableDescriptionLength::<Identity, OFFSET>,
            GetTableDescriptionBytes: GetTableDescriptionBytes::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbSIParameterDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbSIParameterDescriptor {}
windows_core::imp::define_interface!(IIsdbSeriesDescriptor, IIsdbSeriesDescriptor_Vtbl, 0x07ef6370_1660_4f26_87fc_614adab24b11);
windows_core::imp::interface_hierarchy!(IIsdbSeriesDescriptor, windows_core::IUnknown);
impl IIsdbSeriesDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSeriesId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSeriesId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRepeatLabel(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRepeatLabel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetProgramPattern(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetProgramPattern)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetExpireDate(&self, pfvalid: *mut windows_core::BOOL, pmdtval: *mut MPEG_DATE_AND_TIME) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetExpireDate)(windows_core::Interface::as_raw(self), pfvalid as _, pmdtval as _).ok() }
    }
    pub unsafe fn GetEpisodeNumber(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEpisodeNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLastEpisodeNumber(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLastEpisodeNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSeriesNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSeriesNameW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbSeriesDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSeriesId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetRepeatLabel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetProgramPattern: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetExpireDate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL, *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT,
    pub GetEpisodeNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetLastEpisodeNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetSeriesNameW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IIsdbSeriesDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetSeriesId(&self) -> windows_core::Result<u16>;
    fn GetRepeatLabel(&self) -> windows_core::Result<u8>;
    fn GetProgramPattern(&self) -> windows_core::Result<u8>;
    fn GetExpireDate(&self, pfvalid: *mut windows_core::BOOL, pmdtval: *mut MPEG_DATE_AND_TIME) -> windows_core::Result<()>;
    fn GetEpisodeNumber(&self) -> windows_core::Result<u16>;
    fn GetLastEpisodeNumber(&self) -> windows_core::Result<u16>;
    fn GetSeriesNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
}
impl IIsdbSeriesDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbSeriesDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbSeriesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSeriesDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbSeriesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSeriesDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSeriesId<Identity: IIsdbSeriesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSeriesDescriptor_Impl::GetSeriesId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRepeatLabel<Identity: IIsdbSeriesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSeriesDescriptor_Impl::GetRepeatLabel(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetProgramPattern<Identity: IIsdbSeriesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSeriesDescriptor_Impl::GetProgramPattern(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetExpireDate<Identity: IIsdbSeriesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfvalid: *mut windows_core::BOOL, pmdtval: *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IIsdbSeriesDescriptor_Impl::GetExpireDate(this, core::mem::transmute_copy(&pfvalid), core::mem::transmute_copy(&pmdtval)).into()
            }
        }
        unsafe extern "system" fn GetEpisodeNumber<Identity: IIsdbSeriesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSeriesDescriptor_Impl::GetEpisodeNumber(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLastEpisodeNumber<Identity: IIsdbSeriesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSeriesDescriptor_Impl::GetLastEpisodeNumber(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSeriesNameW<Identity: IIsdbSeriesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSeriesDescriptor_Impl::GetSeriesNameW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetSeriesId: GetSeriesId::<Identity, OFFSET>,
            GetRepeatLabel: GetRepeatLabel::<Identity, OFFSET>,
            GetProgramPattern: GetProgramPattern::<Identity, OFFSET>,
            GetExpireDate: GetExpireDate::<Identity, OFFSET>,
            GetEpisodeNumber: GetEpisodeNumber::<Identity, OFFSET>,
            GetLastEpisodeNumber: GetLastEpisodeNumber::<Identity, OFFSET>,
            GetSeriesNameW: GetSeriesNameW::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbSeriesDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbSeriesDescriptor {}
windows_core::imp::define_interface!(IIsdbSiParser2, IIsdbSiParser2_Vtbl, 0x900e4bb7_18cd_453f_98be_3be6aa211772);
impl core::ops::Deref for IIsdbSiParser2 {
    type Target = IDvbSiParser2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IIsdbSiParser2, windows_core::IUnknown, IDvbSiParser, IDvbSiParser2);
impl IIsdbSiParser2 {
    pub unsafe fn GetSDT(&self, tableid: u8, pwtransportstreamid: Option<*const u16>) -> windows_core::Result<IISDB_SDT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSDT)(windows_core::Interface::as_raw(self), tableid, pwtransportstreamid.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetBIT(&self, tableid: u8, pworiginalnetworkid: Option<*const u16>) -> windows_core::Result<IISDB_BIT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetBIT)(windows_core::Interface::as_raw(self), tableid, pworiginalnetworkid.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetNBIT(&self, tableid: u8, pworiginalnetworkid: Option<*const u16>) -> windows_core::Result<IISDB_NBIT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNBIT)(windows_core::Interface::as_raw(self), tableid, pworiginalnetworkid.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetLDT(&self, tableid: u8, pworiginalserviceid: Option<*const u16>) -> windows_core::Result<IISDB_LDT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLDT)(windows_core::Interface::as_raw(self), tableid, pworiginalserviceid.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetSDTT(&self, tableid: u8, pwtableidext: Option<*const u16>) -> windows_core::Result<IISDB_SDTT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSDTT)(windows_core::Interface::as_raw(self), tableid, pwtableidext.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetCDT(&self, tableid: u8, bsectionnumber: u8, pwdownloaddataid: Option<*const u16>) -> windows_core::Result<IISDB_CDT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCDT)(windows_core::Interface::as_raw(self), tableid, bsectionnumber, pwdownloaddataid.unwrap_or(core::mem::zeroed()) as _, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetEMM(&self, pid: u16, wtableidext: u16) -> windows_core::Result<IISDB_EMM> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEMM)(windows_core::Interface::as_raw(self), pid, wtableidext, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbSiParser2_Vtbl {
    pub base__: IDvbSiParser2_Vtbl,
    pub GetSDT: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetBIT: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetNBIT: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetLDT: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetSDTT: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCDT: unsafe extern "system" fn(*mut core::ffi::c_void, u8, u8, *const u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetEMM: unsafe extern "system" fn(*mut core::ffi::c_void, u16, u16, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IIsdbSiParser2_Impl: IDvbSiParser2_Impl {
    fn GetSDT(&self, tableid: u8, pwtransportstreamid: *const u16) -> windows_core::Result<IISDB_SDT>;
    fn GetBIT(&self, tableid: u8, pworiginalnetworkid: *const u16) -> windows_core::Result<IISDB_BIT>;
    fn GetNBIT(&self, tableid: u8, pworiginalnetworkid: *const u16) -> windows_core::Result<IISDB_NBIT>;
    fn GetLDT(&self, tableid: u8, pworiginalserviceid: *const u16) -> windows_core::Result<IISDB_LDT>;
    fn GetSDTT(&self, tableid: u8, pwtableidext: *const u16) -> windows_core::Result<IISDB_SDTT>;
    fn GetCDT(&self, tableid: u8, bsectionnumber: u8, pwdownloaddataid: *const u16) -> windows_core::Result<IISDB_CDT>;
    fn GetEMM(&self, pid: u16, wtableidext: u16) -> windows_core::Result<IISDB_EMM>;
}
impl IIsdbSiParser2_Vtbl {
    pub const fn new<Identity: IIsdbSiParser2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetSDT<Identity: IIsdbSiParser2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tableid: u8, pwtransportstreamid: *const u16, ppsdt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSiParser2_Impl::GetSDT(this, core::mem::transmute_copy(&tableid), core::mem::transmute_copy(&pwtransportstreamid)) {
                    Ok(ok__) => {
                        ppsdt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetBIT<Identity: IIsdbSiParser2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tableid: u8, pworiginalnetworkid: *const u16, ppbit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSiParser2_Impl::GetBIT(this, core::mem::transmute_copy(&tableid), core::mem::transmute_copy(&pworiginalnetworkid)) {
                    Ok(ok__) => {
                        ppbit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetNBIT<Identity: IIsdbSiParser2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tableid: u8, pworiginalnetworkid: *const u16, ppnbit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSiParser2_Impl::GetNBIT(this, core::mem::transmute_copy(&tableid), core::mem::transmute_copy(&pworiginalnetworkid)) {
                    Ok(ok__) => {
                        ppnbit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLDT<Identity: IIsdbSiParser2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tableid: u8, pworiginalserviceid: *const u16, ppldt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSiParser2_Impl::GetLDT(this, core::mem::transmute_copy(&tableid), core::mem::transmute_copy(&pworiginalserviceid)) {
                    Ok(ok__) => {
                        ppldt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSDTT<Identity: IIsdbSiParser2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tableid: u8, pwtableidext: *const u16, ppsdtt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSiParser2_Impl::GetSDTT(this, core::mem::transmute_copy(&tableid), core::mem::transmute_copy(&pwtableidext)) {
                    Ok(ok__) => {
                        ppsdtt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCDT<Identity: IIsdbSiParser2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tableid: u8, bsectionnumber: u8, pwdownloaddataid: *const u16, ppcdt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSiParser2_Impl::GetCDT(this, core::mem::transmute_copy(&tableid), core::mem::transmute_copy(&bsectionnumber), core::mem::transmute_copy(&pwdownloaddataid)) {
                    Ok(ok__) => {
                        ppcdt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEMM<Identity: IIsdbSiParser2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: u16, wtableidext: u16, ppemm: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbSiParser2_Impl::GetEMM(this, core::mem::transmute_copy(&pid), core::mem::transmute_copy(&wtableidext)) {
                    Ok(ok__) => {
                        ppemm.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IDvbSiParser2_Vtbl::new::<Identity, OFFSET>(),
            GetSDT: GetSDT::<Identity, OFFSET>,
            GetBIT: GetBIT::<Identity, OFFSET>,
            GetNBIT: GetNBIT::<Identity, OFFSET>,
            GetLDT: GetLDT::<Identity, OFFSET>,
            GetSDTT: GetSDTT::<Identity, OFFSET>,
            GetCDT: GetCDT::<Identity, OFFSET>,
            GetEMM: GetEMM::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbSiParser2 as windows_core::Interface>::IID || iid == &<IDvbSiParser as windows_core::Interface>::IID || iid == &<IDvbSiParser2 as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbSiParser2 {}
windows_core::imp::define_interface!(IIsdbTSInformationDescriptor, IIsdbTSInformationDescriptor_Vtbl, 0xd7ad183e_38f5_4210_b55f_ec8d601bbd47);
windows_core::imp::interface_hierarchy!(IIsdbTSInformationDescriptor, windows_core::IUnknown);
impl IIsdbTSInformationDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRemoteControlKeyId(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRemoteControlKeyId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTSNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTSNameW)(windows_core::Interface::as_raw(self), convmode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordTransmissionTypeInfo(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordTransmissionTypeInfo)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordNumberOfServices(&self, brecordindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordNumberOfServices)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordServiceIdByIndex(&self, brecordindex: u8, bserviceindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordServiceIdByIndex)(windows_core::Interface::as_raw(self), brecordindex, bserviceindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbTSInformationDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRemoteControlKeyId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTSNameW: unsafe extern "system" fn(*mut core::ffi::c_void, DVB_STRCONV_MODE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordTransmissionTypeInfo: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordNumberOfServices: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetRecordServiceIdByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u8, u8, *mut u16) -> windows_core::HRESULT,
}
pub trait IIsdbTSInformationDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetRemoteControlKeyId(&self) -> windows_core::Result<u8>;
    fn GetTSNameW(&self, convmode: DVB_STRCONV_MODE) -> windows_core::Result<windows_core::BSTR>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordTransmissionTypeInfo(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetRecordNumberOfServices(&self, brecordindex: u8) -> windows_core::Result<u8>;
    fn GetRecordServiceIdByIndex(&self, brecordindex: u8, bserviceindex: u8) -> windows_core::Result<u16>;
}
impl IIsdbTSInformationDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbTSInformationDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbTSInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTSInformationDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbTSInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTSInformationDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRemoteControlKeyId<Identity: IIsdbTSInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTSInformationDescriptor_Impl::GetRemoteControlKeyId(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTSNameW<Identity: IIsdbTSInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, convmode: DVB_STRCONV_MODE, pbstrname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTSInformationDescriptor_Impl::GetTSNameW(this, core::mem::transmute_copy(&convmode)) {
                    Ok(ok__) => {
                        pbstrname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IIsdbTSInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTSInformationDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordTransmissionTypeInfo<Identity: IIsdbTSInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTSInformationDescriptor_Impl::GetRecordTransmissionTypeInfo(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordNumberOfServices<Identity: IIsdbTSInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTSInformationDescriptor_Impl::GetRecordNumberOfServices(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordServiceIdByIndex<Identity: IIsdbTSInformationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, bserviceindex: u8, pdwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTSInformationDescriptor_Impl::GetRecordServiceIdByIndex(this, core::mem::transmute_copy(&brecordindex), core::mem::transmute_copy(&bserviceindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetRemoteControlKeyId: GetRemoteControlKeyId::<Identity, OFFSET>,
            GetTSNameW: GetTSNameW::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordTransmissionTypeInfo: GetRecordTransmissionTypeInfo::<Identity, OFFSET>,
            GetRecordNumberOfServices: GetRecordNumberOfServices::<Identity, OFFSET>,
            GetRecordServiceIdByIndex: GetRecordServiceIdByIndex::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbTSInformationDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbTSInformationDescriptor {}
windows_core::imp::define_interface!(IIsdbTerrestrialDeliverySystemDescriptor, IIsdbTerrestrialDeliverySystemDescriptor_Vtbl, 0x39fae0a6_d151_44dd_a28a_765de5991670);
windows_core::imp::interface_hierarchy!(IIsdbTerrestrialDeliverySystemDescriptor, windows_core::IUnknown);
impl IIsdbTerrestrialDeliverySystemDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetAreaCode(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetAreaCode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetGuardInterval(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetGuardInterval)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTransmissionMode(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTransmissionMode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordFrequency(&self, brecordindex: u8) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordFrequency)(windows_core::Interface::as_raw(self), brecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IIsdbTerrestrialDeliverySystemDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetAreaCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetGuardInterval: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetTransmissionMode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRecordFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32) -> windows_core::HRESULT,
}
pub trait IIsdbTerrestrialDeliverySystemDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u8>;
    fn GetAreaCode(&self) -> windows_core::Result<u16>;
    fn GetGuardInterval(&self) -> windows_core::Result<u8>;
    fn GetTransmissionMode(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u8>;
    fn GetRecordFrequency(&self, brecordindex: u8) -> windows_core::Result<u32>;
}
impl IIsdbTerrestrialDeliverySystemDescriptor_Vtbl {
    pub const fn new<Identity: IIsdbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IIsdbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTerrestrialDeliverySystemDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IIsdbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTerrestrialDeliverySystemDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetAreaCode<Identity: IIsdbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTerrestrialDeliverySystemDescriptor_Impl::GetAreaCode(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetGuardInterval<Identity: IIsdbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTerrestrialDeliverySystemDescriptor_Impl::GetGuardInterval(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTransmissionMode<Identity: IIsdbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTerrestrialDeliverySystemDescriptor_Impl::GetTransmissionMode(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IIsdbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTerrestrialDeliverySystemDescriptor_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordFrequency<Identity: IIsdbTerrestrialDeliverySystemDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brecordindex: u8, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IIsdbTerrestrialDeliverySystemDescriptor_Impl::GetRecordFrequency(this, core::mem::transmute_copy(&brecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetAreaCode: GetAreaCode::<Identity, OFFSET>,
            GetGuardInterval: GetGuardInterval::<Identity, OFFSET>,
            GetTransmissionMode: GetTransmissionMode::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordFrequency: GetRecordFrequency::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IIsdbTerrestrialDeliverySystemDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IIsdbTerrestrialDeliverySystemDescriptor {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(ILanguageComponentType, ILanguageComponentType_Vtbl, 0xb874c8ba_0fa2_11d3_9d8e_00c04f72d980);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for ILanguageComponentType {
    type Target = IComponentType;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(ILanguageComponentType, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IComponentType);
#[cfg(feature = "Win32_System_Com")]
impl ILanguageComponentType {
    pub unsafe fn LangID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).LangID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetLangID(&self, langid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetLangID)(windows_core::Interface::as_raw(self), langid).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct ILanguageComponentType_Vtbl {
    pub base__: IComponentType_Vtbl,
    pub LangID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetLangID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait ILanguageComponentType_Impl: IComponentType_Impl {
    fn LangID(&self) -> windows_core::Result<i32>;
    fn SetLangID(&self, langid: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl ILanguageComponentType_Vtbl {
    pub const fn new<Identity: ILanguageComponentType_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn LangID<Identity: ILanguageComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, langid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ILanguageComponentType_Impl::LangID(this) {
                    Ok(ok__) => {
                        langid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetLangID<Identity: ILanguageComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, langid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ILanguageComponentType_Impl::SetLangID(this, core::mem::transmute_copy(&langid)).into()
            }
        }
        Self { base__: IComponentType_Vtbl::new::<Identity, OFFSET>(), LangID: LangID::<Identity, OFFSET>, SetLangID: SetLangID::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ILanguageComponentType as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IComponentType as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for ILanguageComponentType {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(ILocator, ILocator_Vtbl, 0x286d7f89_760c_4f89_80c4_66841d2507aa);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for ILocator {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(ILocator, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl ILocator {
    pub unsafe fn CarrierFrequency(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CarrierFrequency)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetCarrierFrequency(&self, frequency: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCarrierFrequency)(windows_core::Interface::as_raw(self), frequency).ok() }
    }
    pub unsafe fn InnerFEC(&self) -> windows_core::Result<super::FECMethod> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).InnerFEC)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetInnerFEC(&self, fec: super::FECMethod) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetInnerFEC)(windows_core::Interface::as_raw(self), fec).ok() }
    }
    pub unsafe fn InnerFECRate(&self) -> windows_core::Result<super::BinaryConvolutionCodeRate> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).InnerFECRate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetInnerFECRate(&self, fec: super::BinaryConvolutionCodeRate) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetInnerFECRate)(windows_core::Interface::as_raw(self), fec).ok() }
    }
    pub unsafe fn OuterFEC(&self) -> windows_core::Result<super::FECMethod> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).OuterFEC)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetOuterFEC(&self, fec: super::FECMethod) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetOuterFEC)(windows_core::Interface::as_raw(self), fec).ok() }
    }
    pub unsafe fn OuterFECRate(&self) -> windows_core::Result<super::BinaryConvolutionCodeRate> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).OuterFECRate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetOuterFECRate(&self, fec: super::BinaryConvolutionCodeRate) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetOuterFECRate)(windows_core::Interface::as_raw(self), fec).ok() }
    }
    pub unsafe fn Modulation(&self) -> windows_core::Result<super::ModulationType> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Modulation)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetModulation(&self, modulation: super::ModulationType) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetModulation)(windows_core::Interface::as_raw(self), modulation).ok() }
    }
    pub unsafe fn SymbolRate(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SymbolRate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSymbolRate(&self, rate: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSymbolRate)(windows_core::Interface::as_raw(self), rate).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<ILocator> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct ILocator_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub CarrierFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetCarrierFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub InnerFEC: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::FECMethod) -> windows_core::HRESULT,
    pub SetInnerFEC: unsafe extern "system" fn(*mut core::ffi::c_void, super::FECMethod) -> windows_core::HRESULT,
    pub InnerFECRate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::BinaryConvolutionCodeRate) -> windows_core::HRESULT,
    pub SetInnerFECRate: unsafe extern "system" fn(*mut core::ffi::c_void, super::BinaryConvolutionCodeRate) -> windows_core::HRESULT,
    pub OuterFEC: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::FECMethod) -> windows_core::HRESULT,
    pub SetOuterFEC: unsafe extern "system" fn(*mut core::ffi::c_void, super::FECMethod) -> windows_core::HRESULT,
    pub OuterFECRate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::BinaryConvolutionCodeRate) -> windows_core::HRESULT,
    pub SetOuterFECRate: unsafe extern "system" fn(*mut core::ffi::c_void, super::BinaryConvolutionCodeRate) -> windows_core::HRESULT,
    pub Modulation: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::ModulationType) -> windows_core::HRESULT,
    pub SetModulation: unsafe extern "system" fn(*mut core::ffi::c_void, super::ModulationType) -> windows_core::HRESULT,
    pub SymbolRate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetSymbolRate: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait ILocator_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn CarrierFrequency(&self) -> windows_core::Result<i32>;
    fn SetCarrierFrequency(&self, frequency: i32) -> windows_core::Result<()>;
    fn InnerFEC(&self) -> windows_core::Result<super::FECMethod>;
    fn SetInnerFEC(&self, fec: super::FECMethod) -> windows_core::Result<()>;
    fn InnerFECRate(&self) -> windows_core::Result<super::BinaryConvolutionCodeRate>;
    fn SetInnerFECRate(&self, fec: super::BinaryConvolutionCodeRate) -> windows_core::Result<()>;
    fn OuterFEC(&self) -> windows_core::Result<super::FECMethod>;
    fn SetOuterFEC(&self, fec: super::FECMethod) -> windows_core::Result<()>;
    fn OuterFECRate(&self) -> windows_core::Result<super::BinaryConvolutionCodeRate>;
    fn SetOuterFECRate(&self, fec: super::BinaryConvolutionCodeRate) -> windows_core::Result<()>;
    fn Modulation(&self) -> windows_core::Result<super::ModulationType>;
    fn SetModulation(&self, modulation: super::ModulationType) -> windows_core::Result<()>;
    fn SymbolRate(&self) -> windows_core::Result<i32>;
    fn SetSymbolRate(&self, rate: i32) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<ILocator>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl ILocator_Vtbl {
    pub const fn new<Identity: ILocator_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn CarrierFrequency<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, frequency: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ILocator_Impl::CarrierFrequency(this) {
                    Ok(ok__) => {
                        frequency.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCarrierFrequency<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, frequency: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ILocator_Impl::SetCarrierFrequency(this, core::mem::transmute_copy(&frequency)).into()
            }
        }
        unsafe extern "system" fn InnerFEC<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: *mut super::FECMethod) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ILocator_Impl::InnerFEC(this) {
                    Ok(ok__) => {
                        fec.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetInnerFEC<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: super::FECMethod) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ILocator_Impl::SetInnerFEC(this, core::mem::transmute_copy(&fec)).into()
            }
        }
        unsafe extern "system" fn InnerFECRate<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: *mut super::BinaryConvolutionCodeRate) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ILocator_Impl::InnerFECRate(this) {
                    Ok(ok__) => {
                        fec.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetInnerFECRate<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: super::BinaryConvolutionCodeRate) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ILocator_Impl::SetInnerFECRate(this, core::mem::transmute_copy(&fec)).into()
            }
        }
        unsafe extern "system" fn OuterFEC<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: *mut super::FECMethod) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ILocator_Impl::OuterFEC(this) {
                    Ok(ok__) => {
                        fec.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetOuterFEC<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: super::FECMethod) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ILocator_Impl::SetOuterFEC(this, core::mem::transmute_copy(&fec)).into()
            }
        }
        unsafe extern "system" fn OuterFECRate<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: *mut super::BinaryConvolutionCodeRate) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ILocator_Impl::OuterFECRate(this) {
                    Ok(ok__) => {
                        fec.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetOuterFECRate<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fec: super::BinaryConvolutionCodeRate) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ILocator_Impl::SetOuterFECRate(this, core::mem::transmute_copy(&fec)).into()
            }
        }
        unsafe extern "system" fn Modulation<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, modulation: *mut super::ModulationType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ILocator_Impl::Modulation(this) {
                    Ok(ok__) => {
                        modulation.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetModulation<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, modulation: super::ModulationType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ILocator_Impl::SetModulation(this, core::mem::transmute_copy(&modulation)).into()
            }
        }
        unsafe extern "system" fn SymbolRate<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rate: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ILocator_Impl::SymbolRate(this) {
                    Ok(ok__) => {
                        rate.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSymbolRate<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rate: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ILocator_Impl::SetSymbolRate(this, core::mem::transmute_copy(&rate)).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: ILocator_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newlocator: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ILocator_Impl::Clone(this) {
                    Ok(ok__) => {
                        newlocator.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            CarrierFrequency: CarrierFrequency::<Identity, OFFSET>,
            SetCarrierFrequency: SetCarrierFrequency::<Identity, OFFSET>,
            InnerFEC: InnerFEC::<Identity, OFFSET>,
            SetInnerFEC: SetInnerFEC::<Identity, OFFSET>,
            InnerFECRate: InnerFECRate::<Identity, OFFSET>,
            SetInnerFECRate: SetInnerFECRate::<Identity, OFFSET>,
            OuterFEC: OuterFEC::<Identity, OFFSET>,
            SetOuterFEC: SetOuterFEC::<Identity, OFFSET>,
            OuterFECRate: OuterFECRate::<Identity, OFFSET>,
            SetOuterFECRate: SetOuterFECRate::<Identity, OFFSET>,
            Modulation: Modulation::<Identity, OFFSET>,
            SetModulation: SetModulation::<Identity, OFFSET>,
            SymbolRate: SymbolRate::<Identity, OFFSET>,
            SetSymbolRate: SetSymbolRate::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ILocator as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for ILocator {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMPEG2Component, IMPEG2Component_Vtbl, 0x1493e353_1eb6_473c_802d_8e6b8ec9d2a9);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMPEG2Component {
    type Target = IComponent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMPEG2Component, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IComponent);
#[cfg(feature = "Win32_System_Com")]
impl IMPEG2Component {
    pub unsafe fn PID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).PID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetPID(&self, pid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetPID)(windows_core::Interface::as_raw(self), pid).ok() }
    }
    pub unsafe fn PCRPID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).PCRPID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetPCRPID(&self, pcrpid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetPCRPID)(windows_core::Interface::as_raw(self), pcrpid).ok() }
    }
    pub unsafe fn ProgramNumber(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ProgramNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetProgramNumber(&self, programnumber: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetProgramNumber)(windows_core::Interface::as_raw(self), programnumber).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMPEG2Component_Vtbl {
    pub base__: IComponent_Vtbl,
    pub PID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetPID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub PCRPID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetPCRPID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub ProgramNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetProgramNumber: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMPEG2Component_Impl: IComponent_Impl {
    fn PID(&self) -> windows_core::Result<i32>;
    fn SetPID(&self, pid: i32) -> windows_core::Result<()>;
    fn PCRPID(&self) -> windows_core::Result<i32>;
    fn SetPCRPID(&self, pcrpid: i32) -> windows_core::Result<()>;
    fn ProgramNumber(&self) -> windows_core::Result<i32>;
    fn SetProgramNumber(&self, programnumber: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMPEG2Component_Vtbl {
    pub const fn new<Identity: IMPEG2Component_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn PID<Identity: IMPEG2Component_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMPEG2Component_Impl::PID(this) {
                    Ok(ok__) => {
                        pid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetPID<Identity: IMPEG2Component_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMPEG2Component_Impl::SetPID(this, core::mem::transmute_copy(&pid)).into()
            }
        }
        unsafe extern "system" fn PCRPID<Identity: IMPEG2Component_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pcrpid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMPEG2Component_Impl::PCRPID(this) {
                    Ok(ok__) => {
                        pcrpid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetPCRPID<Identity: IMPEG2Component_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pcrpid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMPEG2Component_Impl::SetPCRPID(this, core::mem::transmute_copy(&pcrpid)).into()
            }
        }
        unsafe extern "system" fn ProgramNumber<Identity: IMPEG2Component_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, programnumber: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMPEG2Component_Impl::ProgramNumber(this) {
                    Ok(ok__) => {
                        programnumber.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetProgramNumber<Identity: IMPEG2Component_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, programnumber: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMPEG2Component_Impl::SetProgramNumber(this, core::mem::transmute_copy(&programnumber)).into()
            }
        }
        Self {
            base__: IComponent_Vtbl::new::<Identity, OFFSET>(),
            PID: PID::<Identity, OFFSET>,
            SetPID: SetPID::<Identity, OFFSET>,
            PCRPID: PCRPID::<Identity, OFFSET>,
            SetPCRPID: SetPCRPID::<Identity, OFFSET>,
            ProgramNumber: ProgramNumber::<Identity, OFFSET>,
            SetProgramNumber: SetProgramNumber::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMPEG2Component as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IComponent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMPEG2Component {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMPEG2ComponentType, IMPEG2ComponentType_Vtbl, 0x2c073d84_b51c_48c9_aa9f_68971e1f6e38);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMPEG2ComponentType {
    type Target = ILanguageComponentType;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMPEG2ComponentType, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IComponentType, ILanguageComponentType);
#[cfg(feature = "Win32_System_Com")]
impl IMPEG2ComponentType {
    pub unsafe fn StreamType(&self) -> windows_core::Result<super::MPEG2StreamType> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).StreamType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetStreamType(&self, mp2streamtype: super::MPEG2StreamType) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetStreamType)(windows_core::Interface::as_raw(self), mp2streamtype).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMPEG2ComponentType_Vtbl {
    pub base__: ILanguageComponentType_Vtbl,
    pub StreamType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::MPEG2StreamType) -> windows_core::HRESULT,
    pub SetStreamType: unsafe extern "system" fn(*mut core::ffi::c_void, super::MPEG2StreamType) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMPEG2ComponentType_Impl: ILanguageComponentType_Impl {
    fn StreamType(&self) -> windows_core::Result<super::MPEG2StreamType>;
    fn SetStreamType(&self, mp2streamtype: super::MPEG2StreamType) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMPEG2ComponentType_Vtbl {
    pub const fn new<Identity: IMPEG2ComponentType_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn StreamType<Identity: IMPEG2ComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mp2streamtype: *mut super::MPEG2StreamType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMPEG2ComponentType_Impl::StreamType(this) {
                    Ok(ok__) => {
                        mp2streamtype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetStreamType<Identity: IMPEG2ComponentType_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mp2streamtype: super::MPEG2StreamType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMPEG2ComponentType_Impl::SetStreamType(this, core::mem::transmute_copy(&mp2streamtype)).into()
            }
        }
        Self {
            base__: ILanguageComponentType_Vtbl::new::<Identity, OFFSET>(),
            StreamType: StreamType::<Identity, OFFSET>,
            SetStreamType: SetStreamType::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMPEG2ComponentType as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IComponentType as windows_core::Interface>::IID || iid == &<ILanguageComponentType as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMPEG2ComponentType {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMPEG2TuneRequest, IMPEG2TuneRequest_Vtbl, 0xeb7d987f_8a01_42ad_b8ae_574deee44d1a);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMPEG2TuneRequest {
    type Target = ITuneRequest;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMPEG2TuneRequest, windows_core::IUnknown, super::super::super::System::Com::IDispatch, ITuneRequest);
#[cfg(feature = "Win32_System_Com")]
impl IMPEG2TuneRequest {
    pub unsafe fn TSID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TSID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetTSID(&self, tsid: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetTSID)(windows_core::Interface::as_raw(self), tsid).ok() }
    }
    pub unsafe fn ProgNo(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ProgNo)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetProgNo(&self, progno: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetProgNo)(windows_core::Interface::as_raw(self), progno).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMPEG2TuneRequest_Vtbl {
    pub base__: ITuneRequest_Vtbl,
    pub TSID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetTSID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub ProgNo: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetProgNo: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMPEG2TuneRequest_Impl: ITuneRequest_Impl {
    fn TSID(&self) -> windows_core::Result<i32>;
    fn SetTSID(&self, tsid: i32) -> windows_core::Result<()>;
    fn ProgNo(&self) -> windows_core::Result<i32>;
    fn SetProgNo(&self, progno: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMPEG2TuneRequest_Vtbl {
    pub const fn new<Identity: IMPEG2TuneRequest_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn TSID<Identity: IMPEG2TuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tsid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMPEG2TuneRequest_Impl::TSID(this) {
                    Ok(ok__) => {
                        tsid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetTSID<Identity: IMPEG2TuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tsid: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMPEG2TuneRequest_Impl::SetTSID(this, core::mem::transmute_copy(&tsid)).into()
            }
        }
        unsafe extern "system" fn ProgNo<Identity: IMPEG2TuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, progno: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMPEG2TuneRequest_Impl::ProgNo(this) {
                    Ok(ok__) => {
                        progno.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetProgNo<Identity: IMPEG2TuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, progno: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMPEG2TuneRequest_Impl::SetProgNo(this, core::mem::transmute_copy(&progno)).into()
            }
        }
        Self {
            base__: ITuneRequest_Vtbl::new::<Identity, OFFSET>(),
            TSID: TSID::<Identity, OFFSET>,
            SetTSID: SetTSID::<Identity, OFFSET>,
            ProgNo: ProgNo::<Identity, OFFSET>,
            SetProgNo: SetProgNo::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMPEG2TuneRequest as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<ITuneRequest as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMPEG2TuneRequest {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMPEG2TuneRequestFactory, IMPEG2TuneRequestFactory_Vtbl, 0x14e11abd_ee37_4893_9ea1_6964de933e39);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMPEG2TuneRequestFactory {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMPEG2TuneRequestFactory, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMPEG2TuneRequestFactory {
    pub unsafe fn CreateTuneRequest<P0>(&self, tuningspace: P0) -> windows_core::Result<IMPEG2TuneRequest>
    where
        P0: windows_core::Param<ITuningSpace>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CreateTuneRequest)(windows_core::Interface::as_raw(self), tuningspace.param().abi(), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMPEG2TuneRequestFactory_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub CreateTuneRequest: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMPEG2TuneRequestFactory_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn CreateTuneRequest(&self, tuningspace: windows_core::Ref<'_, ITuningSpace>) -> windows_core::Result<IMPEG2TuneRequest>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMPEG2TuneRequestFactory_Vtbl {
    pub const fn new<Identity: IMPEG2TuneRequestFactory_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn CreateTuneRequest<Identity: IMPEG2TuneRequestFactory_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tuningspace: *mut core::ffi::c_void, tunerequest: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMPEG2TuneRequestFactory_Impl::CreateTuneRequest(this, core::mem::transmute_copy(&tuningspace)) {
                    Ok(ok__) => {
                        tunerequest.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(), CreateTuneRequest: CreateTuneRequest::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMPEG2TuneRequestFactory as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMPEG2TuneRequestFactory {}
windows_core::imp::define_interface!(IMPEG2TuneRequestSupport, IMPEG2TuneRequestSupport_Vtbl, 0x1b9d5fc3_5bbc_4b6c_bb18_b9d10e3eeebf);
windows_core::imp::interface_hierarchy!(IMPEG2TuneRequestSupport, windows_core::IUnknown);
#[repr(C)]
#[doc(hidden)]
pub struct IMPEG2TuneRequestSupport_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
}
pub trait IMPEG2TuneRequestSupport_Impl: windows_core::IUnknownImpl {}
impl IMPEG2TuneRequestSupport_Vtbl {
    pub const fn new<Identity: IMPEG2TuneRequestSupport_Impl, const OFFSET: isize>() -> Self {
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMPEG2TuneRequestSupport as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IMPEG2TuneRequestSupport {}
windows_core::imp::define_interface!(IMPEG2_TIF_CONTROL, IMPEG2_TIF_CONTROL_Vtbl, 0xf9bac2f9_4149_4916_b2ef_faa202326862);
windows_core::imp::interface_hierarchy!(IMPEG2_TIF_CONTROL, windows_core::IUnknown);
impl IMPEG2_TIF_CONTROL {
    pub unsafe fn RegisterTIF<P0>(&self, punktif: P0, ppvregistrationcontext: *mut u32) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::IUnknown>,
    {
        unsafe { (windows_core::Interface::vtable(self).RegisterTIF)(windows_core::Interface::as_raw(self), punktif.param().abi(), ppvregistrationcontext as _).ok() }
    }
    pub unsafe fn UnregisterTIF(&self, pvregistrationcontext: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).UnregisterTIF)(windows_core::Interface::as_raw(self), pvregistrationcontext).ok() }
    }
    pub unsafe fn AddPIDs(&self, ulcpids: u32, pulpids: *const u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AddPIDs)(windows_core::Interface::as_raw(self), ulcpids, pulpids).ok() }
    }
    pub unsafe fn DeletePIDs(&self, ulcpids: u32, pulpids: *const u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).DeletePIDs)(windows_core::Interface::as_raw(self), ulcpids, pulpids).ok() }
    }
    pub unsafe fn GetPIDCount(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPIDCount)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetPIDs(&self, pulcpids: *mut u32, pulpids: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetPIDs)(windows_core::Interface::as_raw(self), pulcpids as _, pulpids as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IMPEG2_TIF_CONTROL_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub RegisterTIF: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub UnregisterTIF: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub AddPIDs: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *const u32) -> windows_core::HRESULT,
    pub DeletePIDs: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *const u32) -> windows_core::HRESULT,
    pub GetPIDCount: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetPIDs: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32, *mut u32) -> windows_core::HRESULT,
}
pub trait IMPEG2_TIF_CONTROL_Impl: windows_core::IUnknownImpl {
    fn RegisterTIF(&self, punktif: windows_core::Ref<'_, windows_core::IUnknown>, ppvregistrationcontext: *mut u32) -> windows_core::Result<()>;
    fn UnregisterTIF(&self, pvregistrationcontext: u32) -> windows_core::Result<()>;
    fn AddPIDs(&self, ulcpids: u32, pulpids: *const u32) -> windows_core::Result<()>;
    fn DeletePIDs(&self, ulcpids: u32, pulpids: *const u32) -> windows_core::Result<()>;
    fn GetPIDCount(&self) -> windows_core::Result<u32>;
    fn GetPIDs(&self, pulcpids: *mut u32, pulpids: *mut u32) -> windows_core::Result<()>;
}
impl IMPEG2_TIF_CONTROL_Vtbl {
    pub const fn new<Identity: IMPEG2_TIF_CONTROL_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn RegisterTIF<Identity: IMPEG2_TIF_CONTROL_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, punktif: *mut core::ffi::c_void, ppvregistrationcontext: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMPEG2_TIF_CONTROL_Impl::RegisterTIF(this, core::mem::transmute_copy(&punktif), core::mem::transmute_copy(&ppvregistrationcontext)).into()
            }
        }
        unsafe extern "system" fn UnregisterTIF<Identity: IMPEG2_TIF_CONTROL_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pvregistrationcontext: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMPEG2_TIF_CONTROL_Impl::UnregisterTIF(this, core::mem::transmute_copy(&pvregistrationcontext)).into()
            }
        }
        unsafe extern "system" fn AddPIDs<Identity: IMPEG2_TIF_CONTROL_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ulcpids: u32, pulpids: *const u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMPEG2_TIF_CONTROL_Impl::AddPIDs(this, core::mem::transmute_copy(&ulcpids), core::mem::transmute_copy(&pulpids)).into()
            }
        }
        unsafe extern "system" fn DeletePIDs<Identity: IMPEG2_TIF_CONTROL_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ulcpids: u32, pulpids: *const u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMPEG2_TIF_CONTROL_Impl::DeletePIDs(this, core::mem::transmute_copy(&ulcpids), core::mem::transmute_copy(&pulpids)).into()
            }
        }
        unsafe extern "system" fn GetPIDCount<Identity: IMPEG2_TIF_CONTROL_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pulcpids: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMPEG2_TIF_CONTROL_Impl::GetPIDCount(this) {
                    Ok(ok__) => {
                        pulcpids.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPIDs<Identity: IMPEG2_TIF_CONTROL_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pulcpids: *mut u32, pulpids: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMPEG2_TIF_CONTROL_Impl::GetPIDs(this, core::mem::transmute_copy(&pulcpids), core::mem::transmute_copy(&pulpids)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            RegisterTIF: RegisterTIF::<Identity, OFFSET>,
            UnregisterTIF: UnregisterTIF::<Identity, OFFSET>,
            AddPIDs: AddPIDs::<Identity, OFFSET>,
            DeletePIDs: DeletePIDs::<Identity, OFFSET>,
            GetPIDCount: GetPIDCount::<Identity, OFFSET>,
            GetPIDs: GetPIDs::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMPEG2_TIF_CONTROL as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IMPEG2_TIF_CONTROL {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSEventBinder, IMSEventBinder_Vtbl, 0xc3a9f406_2222_436d_86d5_ba3229279efb);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSEventBinder {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSEventBinder, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSEventBinder {
    pub unsafe fn Bind<P0>(&self, peventobject: P0, eventname: &windows_core::BSTR, eventhandler: &windows_core::BSTR) -> windows_core::Result<i32>
    where
        P0: windows_core::Param<super::super::super::System::Com::IDispatch>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Bind)(windows_core::Interface::as_raw(self), peventobject.param().abi(), core::mem::transmute_copy(eventname), core::mem::transmute_copy(eventhandler), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Unbind(&self, cancelcookie: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Unbind)(windows_core::Interface::as_raw(self), cancelcookie).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSEventBinder_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Bind: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub Unbind: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSEventBinder_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Bind(&self, peventobject: windows_core::Ref<'_, super::super::super::System::Com::IDispatch>, eventname: &windows_core::BSTR, eventhandler: &windows_core::BSTR) -> windows_core::Result<i32>;
    fn Unbind(&self, cancelcookie: u32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSEventBinder_Vtbl {
    pub const fn new<Identity: IMSEventBinder_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Bind<Identity: IMSEventBinder_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, peventobject: *mut core::ffi::c_void, eventname: *mut core::ffi::c_void, eventhandler: *mut core::ffi::c_void, cancelid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSEventBinder_Impl::Bind(this, core::mem::transmute_copy(&peventobject), core::mem::transmute(&eventname), core::mem::transmute(&eventhandler)) {
                    Ok(ok__) => {
                        cancelid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Unbind<Identity: IMSEventBinder_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, cancelcookie: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSEventBinder_Impl::Unbind(this, core::mem::transmute_copy(&cancelcookie)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Bind: Bind::<Identity, OFFSET>,
            Unbind: Unbind::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSEventBinder as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSEventBinder {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidAnalogTuner, IMSVidAnalogTuner_Vtbl, 0x1c15d47e_911d_11d2_b632_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidAnalogTuner {
    type Target = IMSVidTuner;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidAnalogTuner, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidInputDevice, IMSVidVideoInputDevice, IMSVidTuner);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidAnalogTuner {
    pub unsafe fn Channel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Channel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetChannel(&self, channel: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetChannel)(windows_core::Interface::as_raw(self), channel).ok() }
    }
    pub unsafe fn VideoFrequency(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).VideoFrequency)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn AudioFrequency(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AudioFrequency)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn CountryCode(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CountryCode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetCountryCode(&self, lcc: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCountryCode)(windows_core::Interface::as_raw(self), lcc).ok() }
    }
    pub unsafe fn SAP(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SAP)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSAP(&self, fsapon: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSAP)(windows_core::Interface::as_raw(self), fsapon).ok() }
    }
    pub unsafe fn ChannelAvailable(&self, nchannel: i32, signalstrength: *mut i32) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ChannelAvailable)(windows_core::Interface::as_raw(self), nchannel, signalstrength as _, &mut result__).map(|| result__)
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidAnalogTuner_Vtbl {
    pub base__: IMSVidTuner_Vtbl,
    pub Channel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetChannel: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub VideoFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub AudioFrequency: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub CountryCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetCountryCode: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub SAP: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetSAP: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub ChannelAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut i32, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidAnalogTuner_Impl: IMSVidTuner_Impl {
    fn Channel(&self) -> windows_core::Result<i32>;
    fn SetChannel(&self, channel: i32) -> windows_core::Result<()>;
    fn VideoFrequency(&self) -> windows_core::Result<i32>;
    fn AudioFrequency(&self) -> windows_core::Result<i32>;
    fn CountryCode(&self) -> windows_core::Result<i32>;
    fn SetCountryCode(&self, lcc: i32) -> windows_core::Result<()>;
    fn SAP(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetSAP(&self, fsapon: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn ChannelAvailable(&self, nchannel: i32, signalstrength: *mut i32) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidAnalogTuner_Vtbl {
    pub const fn new<Identity: IMSVidAnalogTuner_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Channel<Identity: IMSVidAnalogTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, channel: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAnalogTuner_Impl::Channel(this) {
                    Ok(ok__) => {
                        channel.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetChannel<Identity: IMSVidAnalogTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, channel: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAnalogTuner_Impl::SetChannel(this, core::mem::transmute_copy(&channel)).into()
            }
        }
        unsafe extern "system" fn VideoFrequency<Identity: IMSVidAnalogTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcc: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAnalogTuner_Impl::VideoFrequency(this) {
                    Ok(ok__) => {
                        lcc.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn AudioFrequency<Identity: IMSVidAnalogTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcc: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAnalogTuner_Impl::AudioFrequency(this) {
                    Ok(ok__) => {
                        lcc.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CountryCode<Identity: IMSVidAnalogTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcc: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAnalogTuner_Impl::CountryCode(this) {
                    Ok(ok__) => {
                        lcc.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCountryCode<Identity: IMSVidAnalogTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcc: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAnalogTuner_Impl::SetCountryCode(this, core::mem::transmute_copy(&lcc)).into()
            }
        }
        unsafe extern "system" fn SAP<Identity: IMSVidAnalogTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfsapon: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAnalogTuner_Impl::SAP(this) {
                    Ok(ok__) => {
                        pfsapon.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSAP<Identity: IMSVidAnalogTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fsapon: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAnalogTuner_Impl::SetSAP(this, core::mem::transmute_copy(&fsapon)).into()
            }
        }
        unsafe extern "system" fn ChannelAvailable<Identity: IMSVidAnalogTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, nchannel: i32, signalstrength: *mut i32, fsignalpresent: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAnalogTuner_Impl::ChannelAvailable(this, core::mem::transmute_copy(&nchannel), core::mem::transmute_copy(&signalstrength)) {
                    Ok(ok__) => {
                        fsignalpresent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidTuner_Vtbl::new::<Identity, OFFSET>(),
            Channel: Channel::<Identity, OFFSET>,
            SetChannel: SetChannel::<Identity, OFFSET>,
            VideoFrequency: VideoFrequency::<Identity, OFFSET>,
            AudioFrequency: AudioFrequency::<Identity, OFFSET>,
            CountryCode: CountryCode::<Identity, OFFSET>,
            SetCountryCode: SetCountryCode::<Identity, OFFSET>,
            SAP: SAP::<Identity, OFFSET>,
            SetSAP: SetSAP::<Identity, OFFSET>,
            ChannelAvailable: ChannelAvailable::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidAnalogTuner as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidInputDevice as windows_core::Interface>::IID || iid == &<IMSVidVideoInputDevice as windows_core::Interface>::IID || iid == &<IMSVidTuner as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidAnalogTuner {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidAnalogTuner2, IMSVidAnalogTuner2_Vtbl, 0x37647bf7_3dde_4cc8_a4dc_0d534d3d0037);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidAnalogTuner2 {
    type Target = IMSVidAnalogTuner;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidAnalogTuner2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidInputDevice, IMSVidVideoInputDevice, IMSVidTuner, IMSVidAnalogTuner);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidAnalogTuner2 {
    pub unsafe fn TVFormats(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TVFormats)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn TunerModes(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TunerModes)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn NumAuxInputs(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).NumAuxInputs)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidAnalogTuner2_Vtbl {
    pub base__: IMSVidAnalogTuner_Vtbl,
    pub TVFormats: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub TunerModes: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub NumAuxInputs: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidAnalogTuner2_Impl: IMSVidAnalogTuner_Impl {
    fn TVFormats(&self) -> windows_core::Result<i32>;
    fn TunerModes(&self) -> windows_core::Result<i32>;
    fn NumAuxInputs(&self) -> windows_core::Result<i32>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidAnalogTuner2_Vtbl {
    pub const fn new<Identity: IMSVidAnalogTuner2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn TVFormats<Identity: IMSVidAnalogTuner2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, formats: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAnalogTuner2_Impl::TVFormats(this) {
                    Ok(ok__) => {
                        formats.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn TunerModes<Identity: IMSVidAnalogTuner2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, modes: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAnalogTuner2_Impl::TunerModes(this) {
                    Ok(ok__) => {
                        modes.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn NumAuxInputs<Identity: IMSVidAnalogTuner2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, inputs: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAnalogTuner2_Impl::NumAuxInputs(this) {
                    Ok(ok__) => {
                        inputs.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidAnalogTuner_Vtbl::new::<Identity, OFFSET>(),
            TVFormats: TVFormats::<Identity, OFFSET>,
            TunerModes: TunerModes::<Identity, OFFSET>,
            NumAuxInputs: NumAuxInputs::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidAnalogTuner2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidInputDevice as windows_core::Interface>::IID || iid == &<IMSVidVideoInputDevice as windows_core::Interface>::IID || iid == &<IMSVidTuner as windows_core::Interface>::IID || iid == &<IMSVidAnalogTuner as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidAnalogTuner2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidAnalogTunerEvent, IMSVidAnalogTunerEvent_Vtbl, 0x1c15d486_911d_11d2_b632_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidAnalogTunerEvent {
    type Target = IMSVidTunerEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidAnalogTunerEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidInputDeviceEvent, IMSVidTunerEvent);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidAnalogTunerEvent_Vtbl {
    pub base__: IMSVidTunerEvent_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidAnalogTunerEvent_Impl: IMSVidTunerEvent_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidAnalogTunerEvent_Vtbl {
    pub const fn new<Identity: IMSVidAnalogTunerEvent_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IMSVidTunerEvent_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidAnalogTunerEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidInputDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidTunerEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidAnalogTunerEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidAudioRenderer, IMSVidAudioRenderer_Vtbl, 0x37b0353f_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidAudioRenderer {
    type Target = IMSVidOutputDevice;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidAudioRenderer, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidOutputDevice);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidAudioRenderer {
    pub unsafe fn SetVolume(&self, lvol: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetVolume)(windows_core::Interface::as_raw(self), lvol).ok() }
    }
    pub unsafe fn Volume(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Volume)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetBalance(&self, lbal: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetBalance)(windows_core::Interface::as_raw(self), lbal).ok() }
    }
    pub unsafe fn Balance(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Balance)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidAudioRenderer_Vtbl {
    pub base__: IMSVidOutputDevice_Vtbl,
    pub SetVolume: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub Volume: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetBalance: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub Balance: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidAudioRenderer_Impl: IMSVidOutputDevice_Impl {
    fn SetVolume(&self, lvol: i32) -> windows_core::Result<()>;
    fn Volume(&self) -> windows_core::Result<i32>;
    fn SetBalance(&self, lbal: i32) -> windows_core::Result<()>;
    fn Balance(&self) -> windows_core::Result<i32>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidAudioRenderer_Vtbl {
    pub const fn new<Identity: IMSVidAudioRenderer_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetVolume<Identity: IMSVidAudioRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lvol: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRenderer_Impl::SetVolume(this, core::mem::transmute_copy(&lvol)).into()
            }
        }
        unsafe extern "system" fn Volume<Identity: IMSVidAudioRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lvol: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAudioRenderer_Impl::Volume(this) {
                    Ok(ok__) => {
                        lvol.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetBalance<Identity: IMSVidAudioRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lbal: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRenderer_Impl::SetBalance(this, core::mem::transmute_copy(&lbal)).into()
            }
        }
        unsafe extern "system" fn Balance<Identity: IMSVidAudioRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lbal: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAudioRenderer_Impl::Balance(this) {
                    Ok(ok__) => {
                        lbal.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidOutputDevice_Vtbl::new::<Identity, OFFSET>(),
            SetVolume: SetVolume::<Identity, OFFSET>,
            Volume: Volume::<Identity, OFFSET>,
            SetBalance: SetBalance::<Identity, OFFSET>,
            Balance: Balance::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidAudioRenderer as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidOutputDevice as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidAudioRenderer {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidAudioRendererDevices, IMSVidAudioRendererDevices_Vtbl, 0xc5702cd4_9b79_11d3_b654_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidAudioRendererDevices {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidAudioRendererDevices, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidAudioRendererDevices {
    pub unsafe fn Count(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Count)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._NewEnum)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn get_Item(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IMSVidAudioRenderer> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(v), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Add<P0>(&self, pdb: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidAudioRenderer>,
    {
        unsafe { (windows_core::Interface::vtable(self).Add)(windows_core::Interface::as_raw(self), pdb.param().abi()).ok() }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Remove(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Remove)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(v)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidAudioRendererDevices_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Count: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub _NewEnum: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    _NewEnum: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub get_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    get_Item: usize,
    pub Add: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Remove: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Remove: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidAudioRendererDevices_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Count(&self) -> windows_core::Result<i32>;
    fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn get_Item(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IMSVidAudioRenderer>;
    fn Add(&self, pdb: windows_core::Ref<'_, IMSVidAudioRenderer>) -> windows_core::Result<()>;
    fn Remove(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidAudioRendererDevices_Vtbl {
    pub const fn new<Identity: IMSVidAudioRendererDevices_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Count<Identity: IMSVidAudioRendererDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcount: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAudioRendererDevices_Impl::Count(this) {
                    Ok(ok__) => {
                        lcount.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _NewEnum<Identity: IMSVidAudioRendererDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pd: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAudioRendererDevices_Impl::_NewEnum(this) {
                    Ok(ok__) => {
                        pd.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_Item<Identity: IMSVidAudioRendererDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: super::super::super::System::Variant::VARIANT, pdb: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidAudioRendererDevices_Impl::get_Item(this, core::mem::transmute(&v)) {
                    Ok(ok__) => {
                        pdb.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Add<Identity: IMSVidAudioRendererDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdb: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRendererDevices_Impl::Add(this, core::mem::transmute_copy(&pdb)).into()
            }
        }
        unsafe extern "system" fn Remove<Identity: IMSVidAudioRendererDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRendererDevices_Impl::Remove(this, core::mem::transmute(&v)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Count: Count::<Identity, OFFSET>,
            _NewEnum: _NewEnum::<Identity, OFFSET>,
            get_Item: get_Item::<Identity, OFFSET>,
            Add: Add::<Identity, OFFSET>,
            Remove: Remove::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidAudioRendererDevices as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidAudioRendererDevices {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidAudioRendererEvent, IMSVidAudioRendererEvent_Vtbl, 0x37b03541_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidAudioRendererEvent {
    type Target = IMSVidOutputDeviceEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidAudioRendererEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent, IMSVidOutputDeviceEvent);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidAudioRendererEvent_Vtbl {
    pub base__: IMSVidOutputDeviceEvent_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidAudioRendererEvent_Impl: IMSVidOutputDeviceEvent_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidAudioRendererEvent_Vtbl {
    pub const fn new<Identity: IMSVidAudioRendererEvent_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IMSVidOutputDeviceEvent_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidAudioRendererEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidOutputDeviceEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidAudioRendererEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidAudioRendererEvent2, IMSVidAudioRendererEvent2_Vtbl, 0xe3f55729_353b_4c43_a028_50f79aa9a907);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidAudioRendererEvent2 {
    type Target = IMSVidAudioRendererEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidAudioRendererEvent2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent, IMSVidOutputDeviceEvent, IMSVidAudioRendererEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidAudioRendererEvent2 {
    pub unsafe fn AVDecAudioDualMono(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AVDecAudioDualMono)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn AVAudioSampleRate(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AVAudioSampleRate)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn AVAudioChannelConfig(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AVAudioChannelConfig)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn AVAudioChannelCount(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AVAudioChannelCount)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn AVDecCommonMeanBitRate(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AVDecCommonMeanBitRate)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn AVDDSurroundMode(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AVDDSurroundMode)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn AVDecCommonInputFormat(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AVDecCommonInputFormat)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn AVDecCommonOutputFormat(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AVDecCommonOutputFormat)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidAudioRendererEvent2_Vtbl {
    pub base__: IMSVidAudioRendererEvent_Vtbl,
    pub AVDecAudioDualMono: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AVAudioSampleRate: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AVAudioChannelConfig: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AVAudioChannelCount: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AVDecCommonMeanBitRate: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AVDDSurroundMode: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AVDecCommonInputFormat: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AVDecCommonOutputFormat: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidAudioRendererEvent2_Impl: IMSVidAudioRendererEvent_Impl {
    fn AVDecAudioDualMono(&self) -> windows_core::Result<()>;
    fn AVAudioSampleRate(&self) -> windows_core::Result<()>;
    fn AVAudioChannelConfig(&self) -> windows_core::Result<()>;
    fn AVAudioChannelCount(&self) -> windows_core::Result<()>;
    fn AVDecCommonMeanBitRate(&self) -> windows_core::Result<()>;
    fn AVDDSurroundMode(&self) -> windows_core::Result<()>;
    fn AVDecCommonInputFormat(&self) -> windows_core::Result<()>;
    fn AVDecCommonOutputFormat(&self) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidAudioRendererEvent2_Vtbl {
    pub const fn new<Identity: IMSVidAudioRendererEvent2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn AVDecAudioDualMono<Identity: IMSVidAudioRendererEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRendererEvent2_Impl::AVDecAudioDualMono(this).into()
            }
        }
        unsafe extern "system" fn AVAudioSampleRate<Identity: IMSVidAudioRendererEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRendererEvent2_Impl::AVAudioSampleRate(this).into()
            }
        }
        unsafe extern "system" fn AVAudioChannelConfig<Identity: IMSVidAudioRendererEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRendererEvent2_Impl::AVAudioChannelConfig(this).into()
            }
        }
        unsafe extern "system" fn AVAudioChannelCount<Identity: IMSVidAudioRendererEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRendererEvent2_Impl::AVAudioChannelCount(this).into()
            }
        }
        unsafe extern "system" fn AVDecCommonMeanBitRate<Identity: IMSVidAudioRendererEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRendererEvent2_Impl::AVDecCommonMeanBitRate(this).into()
            }
        }
        unsafe extern "system" fn AVDDSurroundMode<Identity: IMSVidAudioRendererEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRendererEvent2_Impl::AVDDSurroundMode(this).into()
            }
        }
        unsafe extern "system" fn AVDecCommonInputFormat<Identity: IMSVidAudioRendererEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRendererEvent2_Impl::AVDecCommonInputFormat(this).into()
            }
        }
        unsafe extern "system" fn AVDecCommonOutputFormat<Identity: IMSVidAudioRendererEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidAudioRendererEvent2_Impl::AVDecCommonOutputFormat(this).into()
            }
        }
        Self {
            base__: IMSVidAudioRendererEvent_Vtbl::new::<Identity, OFFSET>(),
            AVDecAudioDualMono: AVDecAudioDualMono::<Identity, OFFSET>,
            AVAudioSampleRate: AVAudioSampleRate::<Identity, OFFSET>,
            AVAudioChannelConfig: AVAudioChannelConfig::<Identity, OFFSET>,
            AVAudioChannelCount: AVAudioChannelCount::<Identity, OFFSET>,
            AVDecCommonMeanBitRate: AVDecCommonMeanBitRate::<Identity, OFFSET>,
            AVDDSurroundMode: AVDDSurroundMode::<Identity, OFFSET>,
            AVDecCommonInputFormat: AVDecCommonInputFormat::<Identity, OFFSET>,
            AVDecCommonOutputFormat: AVDecCommonOutputFormat::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidAudioRendererEvent2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidOutputDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidAudioRendererEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidAudioRendererEvent2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidClosedCaptioning, IMSVidClosedCaptioning_Vtbl, 0x99652ea1_c1f7_414f_bb7b_1c967de75983);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidClosedCaptioning {
    type Target = IMSVidFeature;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidClosedCaptioning, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidFeature);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidClosedCaptioning {
    pub unsafe fn Enable(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Enable)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetEnable(&self, on: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetEnable)(windows_core::Interface::as_raw(self), on).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidClosedCaptioning_Vtbl {
    pub base__: IMSVidFeature_Vtbl,
    pub Enable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetEnable: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidClosedCaptioning_Impl: IMSVidFeature_Impl {
    fn Enable(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetEnable(&self, on: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidClosedCaptioning_Vtbl {
    pub const fn new<Identity: IMSVidClosedCaptioning_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Enable<Identity: IMSVidClosedCaptioning_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, on: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidClosedCaptioning_Impl::Enable(this) {
                    Ok(ok__) => {
                        on.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetEnable<Identity: IMSVidClosedCaptioning_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, on: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidClosedCaptioning_Impl::SetEnable(this, core::mem::transmute_copy(&on)).into()
            }
        }
        Self { base__: IMSVidFeature_Vtbl::new::<Identity, OFFSET>(), Enable: Enable::<Identity, OFFSET>, SetEnable: SetEnable::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidClosedCaptioning as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidFeature as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidClosedCaptioning {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidClosedCaptioning2, IMSVidClosedCaptioning2_Vtbl, 0xe00cb864_a029_4310_9987_a873f5887d97);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidClosedCaptioning2 {
    type Target = IMSVidClosedCaptioning;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidClosedCaptioning2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidFeature, IMSVidClosedCaptioning);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidClosedCaptioning2 {
    pub unsafe fn Service(&self) -> windows_core::Result<MSVidCCService> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Service)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetService(&self, on: MSVidCCService) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetService)(windows_core::Interface::as_raw(self), on).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidClosedCaptioning2_Vtbl {
    pub base__: IMSVidClosedCaptioning_Vtbl,
    pub Service: unsafe extern "system" fn(*mut core::ffi::c_void, *mut MSVidCCService) -> windows_core::HRESULT,
    pub SetService: unsafe extern "system" fn(*mut core::ffi::c_void, MSVidCCService) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidClosedCaptioning2_Impl: IMSVidClosedCaptioning_Impl {
    fn Service(&self) -> windows_core::Result<MSVidCCService>;
    fn SetService(&self, on: MSVidCCService) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidClosedCaptioning2_Vtbl {
    pub const fn new<Identity: IMSVidClosedCaptioning2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Service<Identity: IMSVidClosedCaptioning2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, on: *mut MSVidCCService) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidClosedCaptioning2_Impl::Service(this) {
                    Ok(ok__) => {
                        on.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetService<Identity: IMSVidClosedCaptioning2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, on: MSVidCCService) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidClosedCaptioning2_Impl::SetService(this, core::mem::transmute_copy(&on)).into()
            }
        }
        Self { base__: IMSVidClosedCaptioning_Vtbl::new::<Identity, OFFSET>(), Service: Service::<Identity, OFFSET>, SetService: SetService::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidClosedCaptioning2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidFeature as windows_core::Interface>::IID || iid == &<IMSVidClosedCaptioning as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidClosedCaptioning2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidClosedCaptioning3, IMSVidClosedCaptioning3_Vtbl, 0xc8638e8a_7625_4c51_9366_2f40a9831fc0);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidClosedCaptioning3 {
    type Target = IMSVidClosedCaptioning2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidClosedCaptioning3, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidFeature, IMSVidClosedCaptioning, IMSVidClosedCaptioning2);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidClosedCaptioning3 {
    pub unsafe fn TeleTextFilter(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TeleTextFilter)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidClosedCaptioning3_Vtbl {
    pub base__: IMSVidClosedCaptioning2_Vtbl,
    pub TeleTextFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidClosedCaptioning3_Impl: IMSVidClosedCaptioning2_Impl {
    fn TeleTextFilter(&self) -> windows_core::Result<windows_core::IUnknown>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidClosedCaptioning3_Vtbl {
    pub const fn new<Identity: IMSVidClosedCaptioning3_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn TeleTextFilter<Identity: IMSVidClosedCaptioning3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, punkttfilter: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidClosedCaptioning3_Impl::TeleTextFilter(this) {
                    Ok(ok__) => {
                        punkttfilter.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: IMSVidClosedCaptioning2_Vtbl::new::<Identity, OFFSET>(), TeleTextFilter: TeleTextFilter::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidClosedCaptioning3 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidFeature as windows_core::Interface>::IID || iid == &<IMSVidClosedCaptioning as windows_core::Interface>::IID || iid == &<IMSVidClosedCaptioning2 as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidClosedCaptioning3 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidCompositionSegment, IMSVidCompositionSegment_Vtbl, 0x1c15d483_911d_11d2_b632_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidCompositionSegment {
    type Target = IMSVidGraphSegment;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidCompositionSegment, windows_core::IUnknown, super::super::super::System::Com::IPersist, IMSVidGraphSegment);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidCompositionSegment {
    pub unsafe fn Compose<P0, P1>(&self, upstream: P0, downstream: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidGraphSegment>,
        P1: windows_core::Param<IMSVidGraphSegment>,
    {
        unsafe { (windows_core::Interface::vtable(self).Compose)(windows_core::Interface::as_raw(self), upstream.param().abi(), downstream.param().abi()).ok() }
    }
    pub unsafe fn Up(&self) -> windows_core::Result<IMSVidGraphSegment> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Up)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Down(&self) -> windows_core::Result<IMSVidGraphSegment> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Down)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidCompositionSegment_Vtbl {
    pub base__: IMSVidGraphSegment_Vtbl,
    pub Compose: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Up: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Down: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IMSVidCompositionSegment_Impl: IMSVidGraphSegment_Impl {
    fn Compose(&self, upstream: windows_core::Ref<'_, IMSVidGraphSegment>, downstream: windows_core::Ref<'_, IMSVidGraphSegment>) -> windows_core::Result<()>;
    fn Up(&self) -> windows_core::Result<IMSVidGraphSegment>;
    fn Down(&self) -> windows_core::Result<IMSVidGraphSegment>;
}
#[cfg(feature = "Win32_System_Com")]
impl IMSVidCompositionSegment_Vtbl {
    pub const fn new<Identity: IMSVidCompositionSegment_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Compose<Identity: IMSVidCompositionSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, upstream: *mut core::ffi::c_void, downstream: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCompositionSegment_Impl::Compose(this, core::mem::transmute_copy(&upstream), core::mem::transmute_copy(&downstream)).into()
            }
        }
        unsafe extern "system" fn Up<Identity: IMSVidCompositionSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, upstream: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCompositionSegment_Impl::Up(this) {
                    Ok(ok__) => {
                        upstream.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Down<Identity: IMSVidCompositionSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, downstream: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCompositionSegment_Impl::Down(this) {
                    Ok(ok__) => {
                        downstream.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidGraphSegment_Vtbl::new::<Identity, OFFSET>(),
            Compose: Compose::<Identity, OFFSET>,
            Up: Up::<Identity, OFFSET>,
            Down: Down::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidCompositionSegment as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IPersist as windows_core::Interface>::IID || iid == &<IMSVidGraphSegment as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IMSVidCompositionSegment {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidCtl, IMSVidCtl_Vtbl, 0xb0edf162_910a_11d2_b632_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidCtl {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidCtl, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidCtl {
    pub unsafe fn AutoSize(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AutoSize)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetAutoSize(&self, vbool: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetAutoSize)(windows_core::Interface::as_raw(self), vbool).ok() }
    }
    pub unsafe fn BackColor(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).BackColor)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetBackColor(&self, backcolor: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetBackColor)(windows_core::Interface::as_raw(self), backcolor).ok() }
    }
    pub unsafe fn Enabled(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Enabled)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetEnabled(&self, vbool: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetEnabled)(windows_core::Interface::as_raw(self), vbool).ok() }
    }
    pub unsafe fn TabStop(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TabStop)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetTabStop(&self, vbool: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetTabStop)(windows_core::Interface::as_raw(self), vbool).ok() }
    }
    pub unsafe fn Window(&self) -> windows_core::Result<super::super::super::Foundation::HWND> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Window)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Refresh(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Refresh)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn DisplaySize(&self) -> windows_core::Result<DisplaySizeList> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DisplaySize)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetDisplaySize(&self, newvalue: DisplaySizeList) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDisplaySize)(windows_core::Interface::as_raw(self), newvalue).ok() }
    }
    pub unsafe fn MaintainAspectRatio(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MaintainAspectRatio)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMaintainAspectRatio(&self, newvalue: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMaintainAspectRatio)(windows_core::Interface::as_raw(self), newvalue).ok() }
    }
    pub unsafe fn ColorKey(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ColorKey)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetColorKey(&self, newvalue: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetColorKey)(windows_core::Interface::as_raw(self), newvalue).ok() }
    }
    pub unsafe fn get_InputsAvailable(&self, categoryguid: &windows_core::BSTR) -> windows_core::Result<IMSVidInputDevices> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_InputsAvailable)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(categoryguid), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn get_OutputsAvailable(&self, categoryguid: &windows_core::BSTR) -> windows_core::Result<IMSVidOutputDevices> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_OutputsAvailable)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(categoryguid), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn get__InputsAvailable(&self, categoryguid: *const windows_core::GUID) -> windows_core::Result<IMSVidInputDevices> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get__InputsAvailable)(windows_core::Interface::as_raw(self), categoryguid, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn get__OutputsAvailable(&self, categoryguid: *const windows_core::GUID) -> windows_core::Result<IMSVidOutputDevices> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get__OutputsAvailable)(windows_core::Interface::as_raw(self), categoryguid, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn VideoRenderersAvailable(&self) -> windows_core::Result<IMSVidVideoRendererDevices> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).VideoRenderersAvailable)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn AudioRenderersAvailable(&self) -> windows_core::Result<IMSVidAudioRendererDevices> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AudioRenderersAvailable)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn FeaturesAvailable(&self) -> windows_core::Result<IMSVidFeatures> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).FeaturesAvailable)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn InputActive(&self) -> windows_core::Result<IMSVidInputDevice> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).InputActive)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetInputActive<P0>(&self, pval: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidInputDevice>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetInputActive)(windows_core::Interface::as_raw(self), pval.param().abi()).ok() }
    }
    pub unsafe fn OutputsActive(&self) -> windows_core::Result<IMSVidOutputDevices> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).OutputsActive)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetOutputsActive<P0>(&self, pval: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidOutputDevices>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetOutputsActive)(windows_core::Interface::as_raw(self), pval.param().abi()).ok() }
    }
    pub unsafe fn VideoRendererActive(&self) -> windows_core::Result<IMSVidVideoRenderer> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).VideoRendererActive)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetVideoRendererActive<P0>(&self, pval: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidVideoRenderer>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetVideoRendererActive)(windows_core::Interface::as_raw(self), pval.param().abi()).ok() }
    }
    pub unsafe fn AudioRendererActive(&self) -> windows_core::Result<IMSVidAudioRenderer> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AudioRendererActive)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetAudioRendererActive<P0>(&self, pval: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidAudioRenderer>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetAudioRendererActive)(windows_core::Interface::as_raw(self), pval.param().abi()).ok() }
    }
    pub unsafe fn FeaturesActive(&self) -> windows_core::Result<IMSVidFeatures> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).FeaturesActive)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetFeaturesActive<P0>(&self, pval: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidFeatures>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetFeaturesActive)(windows_core::Interface::as_raw(self), pval.param().abi()).ok() }
    }
    pub unsafe fn State(&self) -> windows_core::Result<MSVidCtlStateList> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).State)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn View(&self, v: *const super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).View)(windows_core::Interface::as_raw(self), core::mem::transmute(v)).ok() }
    }
    pub unsafe fn Build(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Build)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Pause(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Pause)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Run(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Run)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Stop(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Stop)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Decompose(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Decompose)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn DisableVideo(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).DisableVideo)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn DisableAudio(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).DisableAudio)(windows_core::Interface::as_raw(self)).ok() }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn ViewNext(&self, v: *const super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ViewNext)(windows_core::Interface::as_raw(self), core::mem::transmute(v)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidCtl_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub AutoSize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetAutoSize: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub BackColor: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub SetBackColor: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub Enabled: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetEnabled: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub TabStop: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetTabStop: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub Window: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::HWND) -> windows_core::HRESULT,
    pub Refresh: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DisplaySize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut DisplaySizeList) -> windows_core::HRESULT,
    pub SetDisplaySize: unsafe extern "system" fn(*mut core::ffi::c_void, DisplaySizeList) -> windows_core::HRESULT,
    pub MaintainAspectRatio: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetMaintainAspectRatio: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub ColorKey: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub SetColorKey: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub get_InputsAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub get_OutputsAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub get__InputsAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub get__OutputsAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub VideoRenderersAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AudioRenderersAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub FeaturesAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub InputActive: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetInputActive: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub OutputsActive: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetOutputsActive: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub VideoRendererActive: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetVideoRendererActive: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AudioRendererActive: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetAudioRendererActive: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub FeaturesActive: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetFeaturesActive: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub State: unsafe extern "system" fn(*mut core::ffi::c_void, *mut MSVidCtlStateList) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub View: unsafe extern "system" fn(*mut core::ffi::c_void, *const super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    View: usize,
    pub Build: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Pause: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Run: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Stop: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Decompose: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DisableVideo: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DisableAudio: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub ViewNext: unsafe extern "system" fn(*mut core::ffi::c_void, *const super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    ViewNext: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidCtl_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn AutoSize(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetAutoSize(&self, vbool: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn BackColor(&self) -> windows_core::Result<u32>;
    fn SetBackColor(&self, backcolor: u32) -> windows_core::Result<()>;
    fn Enabled(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetEnabled(&self, vbool: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn TabStop(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetTabStop(&self, vbool: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn Window(&self) -> windows_core::Result<super::super::super::Foundation::HWND>;
    fn Refresh(&self) -> windows_core::Result<()>;
    fn DisplaySize(&self) -> windows_core::Result<DisplaySizeList>;
    fn SetDisplaySize(&self, newvalue: DisplaySizeList) -> windows_core::Result<()>;
    fn MaintainAspectRatio(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetMaintainAspectRatio(&self, newvalue: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn ColorKey(&self) -> windows_core::Result<u32>;
    fn SetColorKey(&self, newvalue: u32) -> windows_core::Result<()>;
    fn get_InputsAvailable(&self, categoryguid: &windows_core::BSTR) -> windows_core::Result<IMSVidInputDevices>;
    fn get_OutputsAvailable(&self, categoryguid: &windows_core::BSTR) -> windows_core::Result<IMSVidOutputDevices>;
    fn get__InputsAvailable(&self, categoryguid: *const windows_core::GUID) -> windows_core::Result<IMSVidInputDevices>;
    fn get__OutputsAvailable(&self, categoryguid: *const windows_core::GUID) -> windows_core::Result<IMSVidOutputDevices>;
    fn VideoRenderersAvailable(&self) -> windows_core::Result<IMSVidVideoRendererDevices>;
    fn AudioRenderersAvailable(&self) -> windows_core::Result<IMSVidAudioRendererDevices>;
    fn FeaturesAvailable(&self) -> windows_core::Result<IMSVidFeatures>;
    fn InputActive(&self) -> windows_core::Result<IMSVidInputDevice>;
    fn SetInputActive(&self, pval: windows_core::Ref<'_, IMSVidInputDevice>) -> windows_core::Result<()>;
    fn OutputsActive(&self) -> windows_core::Result<IMSVidOutputDevices>;
    fn SetOutputsActive(&self, pval: windows_core::Ref<'_, IMSVidOutputDevices>) -> windows_core::Result<()>;
    fn VideoRendererActive(&self) -> windows_core::Result<IMSVidVideoRenderer>;
    fn SetVideoRendererActive(&self, pval: windows_core::Ref<'_, IMSVidVideoRenderer>) -> windows_core::Result<()>;
    fn AudioRendererActive(&self) -> windows_core::Result<IMSVidAudioRenderer>;
    fn SetAudioRendererActive(&self, pval: windows_core::Ref<'_, IMSVidAudioRenderer>) -> windows_core::Result<()>;
    fn FeaturesActive(&self) -> windows_core::Result<IMSVidFeatures>;
    fn SetFeaturesActive(&self, pval: windows_core::Ref<'_, IMSVidFeatures>) -> windows_core::Result<()>;
    fn State(&self) -> windows_core::Result<MSVidCtlStateList>;
    fn View(&self, v: *const super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn Build(&self) -> windows_core::Result<()>;
    fn Pause(&self) -> windows_core::Result<()>;
    fn Run(&self) -> windows_core::Result<()>;
    fn Stop(&self) -> windows_core::Result<()>;
    fn Decompose(&self) -> windows_core::Result<()>;
    fn DisableVideo(&self) -> windows_core::Result<()>;
    fn DisableAudio(&self) -> windows_core::Result<()>;
    fn ViewNext(&self, v: *const super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidCtl_Vtbl {
    pub const fn new<Identity: IMSVidCtl_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn AutoSize<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbool: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::AutoSize(this) {
                    Ok(ok__) => {
                        pbool.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetAutoSize<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, vbool: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetAutoSize(this, core::mem::transmute_copy(&vbool)).into()
            }
        }
        unsafe extern "system" fn BackColor<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, backcolor: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::BackColor(this) {
                    Ok(ok__) => {
                        backcolor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetBackColor<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, backcolor: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetBackColor(this, core::mem::transmute_copy(&backcolor)).into()
            }
        }
        unsafe extern "system" fn Enabled<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbool: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::Enabled(this) {
                    Ok(ok__) => {
                        pbool.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetEnabled<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, vbool: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetEnabled(this, core::mem::transmute_copy(&vbool)).into()
            }
        }
        unsafe extern "system" fn TabStop<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbool: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::TabStop(this) {
                    Ok(ok__) => {
                        pbool.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetTabStop<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, vbool: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetTabStop(this, core::mem::transmute_copy(&vbool)).into()
            }
        }
        unsafe extern "system" fn Window<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, phwnd: *mut super::super::super::Foundation::HWND) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::Window(this) {
                    Ok(ok__) => {
                        phwnd.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Refresh<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::Refresh(this).into()
            }
        }
        unsafe extern "system" fn DisplaySize<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentvalue: *mut DisplaySizeList) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::DisplaySize(this) {
                    Ok(ok__) => {
                        currentvalue.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDisplaySize<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newvalue: DisplaySizeList) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetDisplaySize(this, core::mem::transmute_copy(&newvalue)).into()
            }
        }
        unsafe extern "system" fn MaintainAspectRatio<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentvalue: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::MaintainAspectRatio(this) {
                    Ok(ok__) => {
                        currentvalue.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMaintainAspectRatio<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newvalue: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetMaintainAspectRatio(this, core::mem::transmute_copy(&newvalue)).into()
            }
        }
        unsafe extern "system" fn ColorKey<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentvalue: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::ColorKey(this) {
                    Ok(ok__) => {
                        currentvalue.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetColorKey<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newvalue: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetColorKey(this, core::mem::transmute_copy(&newvalue)).into()
            }
        }
        unsafe extern "system" fn get_InputsAvailable<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, categoryguid: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::get_InputsAvailable(this, core::mem::transmute(&categoryguid)) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_OutputsAvailable<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, categoryguid: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::get_OutputsAvailable(this, core::mem::transmute(&categoryguid)) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get__InputsAvailable<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, categoryguid: *const windows_core::GUID, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::get__InputsAvailable(this, core::mem::transmute_copy(&categoryguid)) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get__OutputsAvailable<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, categoryguid: *const windows_core::GUID, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::get__OutputsAvailable(this, core::mem::transmute_copy(&categoryguid)) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn VideoRenderersAvailable<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::VideoRenderersAvailable(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn AudioRenderersAvailable<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::AudioRenderersAvailable(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn FeaturesAvailable<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::FeaturesAvailable(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn InputActive<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::InputActive(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetInputActive<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetInputActive(this, core::mem::transmute_copy(&pval)).into()
            }
        }
        unsafe extern "system" fn OutputsActive<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::OutputsActive(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetOutputsActive<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetOutputsActive(this, core::mem::transmute_copy(&pval)).into()
            }
        }
        unsafe extern "system" fn VideoRendererActive<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::VideoRendererActive(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetVideoRendererActive<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetVideoRendererActive(this, core::mem::transmute_copy(&pval)).into()
            }
        }
        unsafe extern "system" fn AudioRendererActive<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::AudioRendererActive(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetAudioRendererActive<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetAudioRendererActive(this, core::mem::transmute_copy(&pval)).into()
            }
        }
        unsafe extern "system" fn FeaturesActive<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::FeaturesActive(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetFeaturesActive<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::SetFeaturesActive(this, core::mem::transmute_copy(&pval)).into()
            }
        }
        unsafe extern "system" fn State<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lstate: *mut MSVidCtlStateList) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidCtl_Impl::State(this) {
                    Ok(ok__) => {
                        lstate.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn View<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: *const super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::View(this, core::mem::transmute_copy(&v)).into()
            }
        }
        unsafe extern "system" fn Build<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::Build(this).into()
            }
        }
        unsafe extern "system" fn Pause<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::Pause(this).into()
            }
        }
        unsafe extern "system" fn Run<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::Run(this).into()
            }
        }
        unsafe extern "system" fn Stop<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::Stop(this).into()
            }
        }
        unsafe extern "system" fn Decompose<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::Decompose(this).into()
            }
        }
        unsafe extern "system" fn DisableVideo<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::DisableVideo(this).into()
            }
        }
        unsafe extern "system" fn DisableAudio<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::DisableAudio(this).into()
            }
        }
        unsafe extern "system" fn ViewNext<Identity: IMSVidCtl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: *const super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidCtl_Impl::ViewNext(this, core::mem::transmute_copy(&v)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            AutoSize: AutoSize::<Identity, OFFSET>,
            SetAutoSize: SetAutoSize::<Identity, OFFSET>,
            BackColor: BackColor::<Identity, OFFSET>,
            SetBackColor: SetBackColor::<Identity, OFFSET>,
            Enabled: Enabled::<Identity, OFFSET>,
            SetEnabled: SetEnabled::<Identity, OFFSET>,
            TabStop: TabStop::<Identity, OFFSET>,
            SetTabStop: SetTabStop::<Identity, OFFSET>,
            Window: Window::<Identity, OFFSET>,
            Refresh: Refresh::<Identity, OFFSET>,
            DisplaySize: DisplaySize::<Identity, OFFSET>,
            SetDisplaySize: SetDisplaySize::<Identity, OFFSET>,
            MaintainAspectRatio: MaintainAspectRatio::<Identity, OFFSET>,
            SetMaintainAspectRatio: SetMaintainAspectRatio::<Identity, OFFSET>,
            ColorKey: ColorKey::<Identity, OFFSET>,
            SetColorKey: SetColorKey::<Identity, OFFSET>,
            get_InputsAvailable: get_InputsAvailable::<Identity, OFFSET>,
            get_OutputsAvailable: get_OutputsAvailable::<Identity, OFFSET>,
            get__InputsAvailable: get__InputsAvailable::<Identity, OFFSET>,
            get__OutputsAvailable: get__OutputsAvailable::<Identity, OFFSET>,
            VideoRenderersAvailable: VideoRenderersAvailable::<Identity, OFFSET>,
            AudioRenderersAvailable: AudioRenderersAvailable::<Identity, OFFSET>,
            FeaturesAvailable: FeaturesAvailable::<Identity, OFFSET>,
            InputActive: InputActive::<Identity, OFFSET>,
            SetInputActive: SetInputActive::<Identity, OFFSET>,
            OutputsActive: OutputsActive::<Identity, OFFSET>,
            SetOutputsActive: SetOutputsActive::<Identity, OFFSET>,
            VideoRendererActive: VideoRendererActive::<Identity, OFFSET>,
            SetVideoRendererActive: SetVideoRendererActive::<Identity, OFFSET>,
            AudioRendererActive: AudioRendererActive::<Identity, OFFSET>,
            SetAudioRendererActive: SetAudioRendererActive::<Identity, OFFSET>,
            FeaturesActive: FeaturesActive::<Identity, OFFSET>,
            SetFeaturesActive: SetFeaturesActive::<Identity, OFFSET>,
            State: State::<Identity, OFFSET>,
            View: View::<Identity, OFFSET>,
            Build: Build::<Identity, OFFSET>,
            Pause: Pause::<Identity, OFFSET>,
            Run: Run::<Identity, OFFSET>,
            Stop: Stop::<Identity, OFFSET>,
            Decompose: Decompose::<Identity, OFFSET>,
            DisableVideo: DisableVideo::<Identity, OFFSET>,
            DisableAudio: DisableAudio::<Identity, OFFSET>,
            ViewNext: ViewNext::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidCtl as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidCtl {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidDataServices, IMSVidDataServices_Vtbl, 0x334125c1_77e5_11d3_b653_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidDataServices {
    type Target = IMSVidFeature;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidDataServices, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidFeature);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidDataServices_Vtbl {
    pub base__: IMSVidFeature_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidDataServices_Impl: IMSVidFeature_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidDataServices_Vtbl {
    pub const fn new<Identity: IMSVidDataServices_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IMSVidFeature_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidDataServices as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidFeature as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidDataServices {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidDataServicesEvent, IMSVidDataServicesEvent_Vtbl, 0x334125c2_77e5_11d3_b653_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidDataServicesEvent {
    type Target = IMSVidDeviceEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidDataServicesEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidDataServicesEvent_Vtbl {
    pub base__: IMSVidDeviceEvent_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidDataServicesEvent_Impl: IMSVidDeviceEvent_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidDataServicesEvent_Vtbl {
    pub const fn new<Identity: IMSVidDataServicesEvent_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IMSVidDeviceEvent_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidDataServicesEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidDataServicesEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidDevice, IMSVidDevice_Vtbl, 0x1c15d47c_911d_11d2_b632_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidDevice {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidDevice, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidDevice {
    pub unsafe fn Name(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Name)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn Status(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Status)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetPower(&self, power: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetPower)(windows_core::Interface::as_raw(self), power).ok() }
    }
    pub unsafe fn Power(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Power)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Category(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Category)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn ClassID(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ClassID)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn _Category(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._Category)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn _ClassID(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._ClassID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn IsEqualDevice<P0>(&self, device: P0) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>
    where
        P0: windows_core::Param<IMSVidDevice>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).IsEqualDevice)(windows_core::Interface::as_raw(self), device.param().abi(), &mut result__).map(|| result__)
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidDevice_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Name: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Status: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetPower: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub Power: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub Category: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ClassID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub _Category: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub _ClassID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub IsEqualDevice: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidDevice_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Name(&self) -> windows_core::Result<windows_core::BSTR>;
    fn Status(&self) -> windows_core::Result<i32>;
    fn SetPower(&self, power: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn Power(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn Category(&self) -> windows_core::Result<windows_core::BSTR>;
    fn ClassID(&self) -> windows_core::Result<windows_core::BSTR>;
    fn _Category(&self) -> windows_core::Result<windows_core::GUID>;
    fn _ClassID(&self) -> windows_core::Result<windows_core::GUID>;
    fn IsEqualDevice(&self, device: windows_core::Ref<'_, IMSVidDevice>) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidDevice_Vtbl {
    pub const fn new<Identity: IMSVidDevice_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Name<Identity: IMSVidDevice_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, name: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidDevice_Impl::Name(this) {
                    Ok(ok__) => {
                        name.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Status<Identity: IMSVidDevice_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, status: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidDevice_Impl::Status(this) {
                    Ok(ok__) => {
                        status.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetPower<Identity: IMSVidDevice_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, power: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidDevice_Impl::SetPower(this, core::mem::transmute_copy(&power)).into()
            }
        }
        unsafe extern "system" fn Power<Identity: IMSVidDevice_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, power: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidDevice_Impl::Power(this) {
                    Ok(ok__) => {
                        power.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Category<Identity: IMSVidDevice_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guid: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidDevice_Impl::Category(this) {
                    Ok(ok__) => {
                        guid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn ClassID<Identity: IMSVidDevice_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, clsid: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidDevice_Impl::ClassID(this) {
                    Ok(ok__) => {
                        clsid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _Category<Identity: IMSVidDevice_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidDevice_Impl::_Category(this) {
                    Ok(ok__) => {
                        guid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _ClassID<Identity: IMSVidDevice_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, clsid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidDevice_Impl::_ClassID(this) {
                    Ok(ok__) => {
                        clsid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn IsEqualDevice<Identity: IMSVidDevice_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, device: *mut core::ffi::c_void, isequal: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidDevice_Impl::IsEqualDevice(this, core::mem::transmute_copy(&device)) {
                    Ok(ok__) => {
                        isequal.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Name: Name::<Identity, OFFSET>,
            Status: Status::<Identity, OFFSET>,
            SetPower: SetPower::<Identity, OFFSET>,
            Power: Power::<Identity, OFFSET>,
            Category: Category::<Identity, OFFSET>,
            ClassID: ClassID::<Identity, OFFSET>,
            _Category: _Category::<Identity, OFFSET>,
            _ClassID: _ClassID::<Identity, OFFSET>,
            IsEqualDevice: IsEqualDevice::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidDevice {}
windows_core::imp::define_interface!(IMSVidDevice2, IMSVidDevice2_Vtbl, 0x87bd2783_ebc0_478c_b4a0_e8e7f43ab78e);
windows_core::imp::interface_hierarchy!(IMSVidDevice2, windows_core::IUnknown);
impl IMSVidDevice2 {
    pub unsafe fn DevicePath(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DevicePath)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidDevice2_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub DevicePath: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IMSVidDevice2_Impl: windows_core::IUnknownImpl {
    fn DevicePath(&self) -> windows_core::Result<windows_core::BSTR>;
}
impl IMSVidDevice2_Vtbl {
    pub const fn new<Identity: IMSVidDevice2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn DevicePath<Identity: IMSVidDevice2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, devpath: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidDevice2_Impl::DevicePath(this) {
                    Ok(ok__) => {
                        devpath.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), DevicePath: DevicePath::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidDevice2 as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IMSVidDevice2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidDeviceEvent, IMSVidDeviceEvent_Vtbl, 0x1c15d480_911d_11d2_b632_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidDeviceEvent {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidDeviceEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidDeviceEvent {
    pub unsafe fn StateChange<P0>(&self, lpd: P0, oldstate: i32, newstate: i32) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidDevice>,
    {
        unsafe { (windows_core::Interface::vtable(self).StateChange)(windows_core::Interface::as_raw(self), lpd.param().abi(), oldstate, newstate).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidDeviceEvent_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub StateChange: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, i32, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidDeviceEvent_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn StateChange(&self, lpd: windows_core::Ref<'_, IMSVidDevice>, oldstate: i32, newstate: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidDeviceEvent_Vtbl {
    pub const fn new<Identity: IMSVidDeviceEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn StateChange<Identity: IMSVidDeviceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lpd: *mut core::ffi::c_void, oldstate: i32, newstate: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidDeviceEvent_Impl::StateChange(this, core::mem::transmute_copy(&lpd), core::mem::transmute_copy(&oldstate), core::mem::transmute_copy(&newstate)).into()
            }
        }
        Self { base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(), StateChange: StateChange::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidDeviceEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidEVR, IMSVidEVR_Vtbl, 0x15e496ae_82a8_4cf9_a6b6_c561dc60398f);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidEVR {
    type Target = IMSVidVideoRenderer;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidEVR, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidOutputDevice, IMSVidVideoRenderer);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidEVR {
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub unsafe fn Presenter(&self) -> windows_core::Result<super::super::MediaFoundation::IMFVideoPresenter> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Presenter)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub unsafe fn SetPresenter<P0>(&self, pallocpresent: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<super::super::MediaFoundation::IMFVideoPresenter>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetPresenter)(windows_core::Interface::as_raw(self), pallocpresent.param().abi()).ok() }
    }
    pub unsafe fn SetSuppressEffects(&self, bsuppress: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSuppressEffects)(windows_core::Interface::as_raw(self), bsuppress).ok() }
    }
    pub unsafe fn SuppressEffects(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SuppressEffects)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidEVR_Vtbl {
    pub base__: IMSVidVideoRenderer_Vtbl,
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub Presenter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_Media_MediaFoundation"))]
    Presenter: usize,
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub SetPresenter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_Media_MediaFoundation"))]
    SetPresenter: usize,
    pub SetSuppressEffects: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SuppressEffects: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidEVR_Impl: IMSVidVideoRenderer_Impl {
    fn Presenter(&self) -> windows_core::Result<super::super::MediaFoundation::IMFVideoPresenter>;
    fn SetPresenter(&self, pallocpresent: windows_core::Ref<'_, super::super::MediaFoundation::IMFVideoPresenter>) -> windows_core::Result<()>;
    fn SetSuppressEffects(&self, bsuppress: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn SuppressEffects(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidEVR_Vtbl {
    pub const fn new<Identity: IMSVidEVR_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Presenter<Identity: IMSVidEVR_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppallocpresent: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidEVR_Impl::Presenter(this) {
                    Ok(ok__) => {
                        ppallocpresent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetPresenter<Identity: IMSVidEVR_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pallocpresent: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidEVR_Impl::SetPresenter(this, core::mem::transmute_copy(&pallocpresent)).into()
            }
        }
        unsafe extern "system" fn SetSuppressEffects<Identity: IMSVidEVR_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bsuppress: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidEVR_Impl::SetSuppressEffects(this, core::mem::transmute_copy(&bsuppress)).into()
            }
        }
        unsafe extern "system" fn SuppressEffects<Identity: IMSVidEVR_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bsuppress: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidEVR_Impl::SuppressEffects(this) {
                    Ok(ok__) => {
                        bsuppress.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidVideoRenderer_Vtbl::new::<Identity, OFFSET>(),
            Presenter: Presenter::<Identity, OFFSET>,
            SetPresenter: SetPresenter::<Identity, OFFSET>,
            SetSuppressEffects: SetSuppressEffects::<Identity, OFFSET>,
            SuppressEffects: SuppressEffects::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidEVR as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidOutputDevice as windows_core::Interface>::IID || iid == &<IMSVidVideoRenderer as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_Media_MediaFoundation", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidEVR {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidEVREvent, IMSVidEVREvent_Vtbl, 0x349abb10_883c_4f22_8714_cecaeee45d62);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidEVREvent {
    type Target = IMSVidOutputDeviceEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidEVREvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent, IMSVidOutputDeviceEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidEVREvent {
    pub unsafe fn OnUserEvent(&self, leventcode: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).OnUserEvent)(windows_core::Interface::as_raw(self), leventcode).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidEVREvent_Vtbl {
    pub base__: IMSVidOutputDeviceEvent_Vtbl,
    pub OnUserEvent: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidEVREvent_Impl: IMSVidOutputDeviceEvent_Impl {
    fn OnUserEvent(&self, leventcode: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidEVREvent_Vtbl {
    pub const fn new<Identity: IMSVidEVREvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn OnUserEvent<Identity: IMSVidEVREvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, leventcode: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidEVREvent_Impl::OnUserEvent(this, core::mem::transmute_copy(&leventcode)).into()
            }
        }
        Self { base__: IMSVidOutputDeviceEvent_Vtbl::new::<Identity, OFFSET>(), OnUserEvent: OnUserEvent::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidEVREvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidOutputDeviceEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidEVREvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidEncoder, IMSVidEncoder_Vtbl, 0xc0020fd4_bee7_43d9_a495_9f213117103d);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidEncoder {
    type Target = IMSVidFeature;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidEncoder, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidFeature);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidEncoder {
    pub unsafe fn VideoEncoderInterface(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).VideoEncoderInterface)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn AudioEncoderInterface(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AudioEncoderInterface)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidEncoder_Vtbl {
    pub base__: IMSVidFeature_Vtbl,
    pub VideoEncoderInterface: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AudioEncoderInterface: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidEncoder_Impl: IMSVidFeature_Impl {
    fn VideoEncoderInterface(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn AudioEncoderInterface(&self) -> windows_core::Result<windows_core::IUnknown>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidEncoder_Vtbl {
    pub const fn new<Identity: IMSVidEncoder_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn VideoEncoderInterface<Identity: IMSVidEncoder_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppencint: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidEncoder_Impl::VideoEncoderInterface(this) {
                    Ok(ok__) => {
                        ppencint.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn AudioEncoderInterface<Identity: IMSVidEncoder_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppencint: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidEncoder_Impl::AudioEncoderInterface(this) {
                    Ok(ok__) => {
                        ppencint.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidFeature_Vtbl::new::<Identity, OFFSET>(),
            VideoEncoderInterface: VideoEncoderInterface::<Identity, OFFSET>,
            AudioEncoderInterface: AudioEncoderInterface::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidEncoder as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidFeature as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidEncoder {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidFeature, IMSVidFeature_Vtbl, 0x37b03547_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidFeature {
    type Target = IMSVidDevice;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidFeature, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidFeature_Vtbl {
    pub base__: IMSVidDevice_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidFeature_Impl: IMSVidDevice_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidFeature_Vtbl {
    pub const fn new<Identity: IMSVidFeature_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IMSVidDevice_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidFeature as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidFeature {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidFeatureEvent, IMSVidFeatureEvent_Vtbl, 0x3dd2903c_e0aa_11d2_b63a_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidFeatureEvent {
    type Target = IMSVidDeviceEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidFeatureEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidFeatureEvent_Vtbl {
    pub base__: IMSVidDeviceEvent_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidFeatureEvent_Impl: IMSVidDeviceEvent_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidFeatureEvent_Vtbl {
    pub const fn new<Identity: IMSVidFeatureEvent_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IMSVidDeviceEvent_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidFeatureEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidFeatureEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidFeatures, IMSVidFeatures_Vtbl, 0xc5702cd5_9b79_11d3_b654_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidFeatures {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidFeatures, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidFeatures {
    pub unsafe fn Count(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Count)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._NewEnum)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn get_Item(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IMSVidFeature> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(v), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Add<P0>(&self, pdb: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidFeature>,
    {
        unsafe { (windows_core::Interface::vtable(self).Add)(windows_core::Interface::as_raw(self), pdb.param().abi()).ok() }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Remove(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Remove)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(v)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidFeatures_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Count: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub _NewEnum: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    _NewEnum: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub get_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    get_Item: usize,
    pub Add: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Remove: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Remove: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidFeatures_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Count(&self) -> windows_core::Result<i32>;
    fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn get_Item(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IMSVidFeature>;
    fn Add(&self, pdb: windows_core::Ref<'_, IMSVidFeature>) -> windows_core::Result<()>;
    fn Remove(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidFeatures_Vtbl {
    pub const fn new<Identity: IMSVidFeatures_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Count<Identity: IMSVidFeatures_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcount: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidFeatures_Impl::Count(this) {
                    Ok(ok__) => {
                        lcount.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _NewEnum<Identity: IMSVidFeatures_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pd: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidFeatures_Impl::_NewEnum(this) {
                    Ok(ok__) => {
                        pd.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_Item<Identity: IMSVidFeatures_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: super::super::super::System::Variant::VARIANT, pdb: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidFeatures_Impl::get_Item(this, core::mem::transmute(&v)) {
                    Ok(ok__) => {
                        pdb.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Add<Identity: IMSVidFeatures_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdb: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidFeatures_Impl::Add(this, core::mem::transmute_copy(&pdb)).into()
            }
        }
        unsafe extern "system" fn Remove<Identity: IMSVidFeatures_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidFeatures_Impl::Remove(this, core::mem::transmute(&v)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Count: Count::<Identity, OFFSET>,
            _NewEnum: _NewEnum::<Identity, OFFSET>,
            get_Item: get_Item::<Identity, OFFSET>,
            Add: Add::<Identity, OFFSET>,
            Remove: Remove::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidFeatures as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidFeatures {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidFilePlayback, IMSVidFilePlayback_Vtbl, 0x37b03539_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidFilePlayback {
    type Target = IMSVidPlayback;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidFilePlayback, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidInputDevice, IMSVidPlayback);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidFilePlayback {
    pub unsafe fn FileName(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).FileName)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetFileName(&self, filename: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetFileName)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(filename)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidFilePlayback_Vtbl {
    pub base__: IMSVidPlayback_Vtbl,
    pub FileName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetFileName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidFilePlayback_Impl: IMSVidPlayback_Impl {
    fn FileName(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetFileName(&self, filename: &windows_core::BSTR) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidFilePlayback_Vtbl {
    pub const fn new<Identity: IMSVidFilePlayback_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn FileName<Identity: IMSVidFilePlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, filename: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidFilePlayback_Impl::FileName(this) {
                    Ok(ok__) => {
                        filename.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetFileName<Identity: IMSVidFilePlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, filename: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidFilePlayback_Impl::SetFileName(this, core::mem::transmute(&filename)).into()
            }
        }
        Self { base__: IMSVidPlayback_Vtbl::new::<Identity, OFFSET>(), FileName: FileName::<Identity, OFFSET>, SetFileName: SetFileName::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidFilePlayback as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidInputDevice as windows_core::Interface>::IID || iid == &<IMSVidPlayback as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidFilePlayback {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidFilePlayback2, IMSVidFilePlayback2_Vtbl, 0x2f7e44af_6e52_4660_bc08_d8d542587d72);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidFilePlayback2 {
    type Target = IMSVidFilePlayback;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidFilePlayback2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidInputDevice, IMSVidPlayback, IMSVidFilePlayback);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidFilePlayback2 {
    pub unsafe fn Set_SourceFilter(&self, filename: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set_SourceFilter)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(filename)).ok() }
    }
    pub unsafe fn Set__SourceFilter(&self, filename: windows_core::GUID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set__SourceFilter)(windows_core::Interface::as_raw(self), core::mem::transmute(filename)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidFilePlayback2_Vtbl {
    pub base__: IMSVidFilePlayback_Vtbl,
    pub Set_SourceFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Set__SourceFilter: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::GUID) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidFilePlayback2_Impl: IMSVidFilePlayback_Impl {
    fn Set_SourceFilter(&self, filename: &windows_core::BSTR) -> windows_core::Result<()>;
    fn Set__SourceFilter(&self, filename: &windows_core::GUID) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidFilePlayback2_Vtbl {
    pub const fn new<Identity: IMSVidFilePlayback2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Set_SourceFilter<Identity: IMSVidFilePlayback2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, filename: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidFilePlayback2_Impl::Set_SourceFilter(this, core::mem::transmute(&filename)).into()
            }
        }
        unsafe extern "system" fn Set__SourceFilter<Identity: IMSVidFilePlayback2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, filename: windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidFilePlayback2_Impl::Set__SourceFilter(this, core::mem::transmute(&filename)).into()
            }
        }
        Self {
            base__: IMSVidFilePlayback_Vtbl::new::<Identity, OFFSET>(),
            Set_SourceFilter: Set_SourceFilter::<Identity, OFFSET>,
            Set__SourceFilter: Set__SourceFilter::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidFilePlayback2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidInputDevice as windows_core::Interface>::IID || iid == &<IMSVidPlayback as windows_core::Interface>::IID || iid == &<IMSVidFilePlayback as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidFilePlayback2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidFilePlaybackEvent, IMSVidFilePlaybackEvent_Vtbl, 0x37b0353a_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidFilePlaybackEvent {
    type Target = IMSVidPlaybackEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidFilePlaybackEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidInputDeviceEvent, IMSVidPlaybackEvent);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidFilePlaybackEvent_Vtbl {
    pub base__: IMSVidPlaybackEvent_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidFilePlaybackEvent_Impl: IMSVidPlaybackEvent_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidFilePlaybackEvent_Vtbl {
    pub const fn new<Identity: IMSVidFilePlaybackEvent_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IMSVidPlaybackEvent_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidFilePlaybackEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidInputDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidPlaybackEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidFilePlaybackEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidGenericSink, IMSVidGenericSink_Vtbl, 0x6c29b41d_455b_4c33_963a_0d28e5e555ea);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidGenericSink {
    type Target = IMSVidOutputDevice;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidGenericSink, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidOutputDevice);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidGenericSink {
    pub unsafe fn SetSinkFilter(&self, bstrname: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSinkFilter)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(bstrname)).ok() }
    }
    pub unsafe fn SinkStreams(&self) -> windows_core::Result<MSVidSinkStreams> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SinkStreams)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSinkStreams(&self, streams: MSVidSinkStreams) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSinkStreams)(windows_core::Interface::as_raw(self), streams).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidGenericSink_Vtbl {
    pub base__: IMSVidOutputDevice_Vtbl,
    pub SetSinkFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SinkStreams: unsafe extern "system" fn(*mut core::ffi::c_void, *mut MSVidSinkStreams) -> windows_core::HRESULT,
    pub SetSinkStreams: unsafe extern "system" fn(*mut core::ffi::c_void, MSVidSinkStreams) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidGenericSink_Impl: IMSVidOutputDevice_Impl {
    fn SetSinkFilter(&self, bstrname: &windows_core::BSTR) -> windows_core::Result<()>;
    fn SinkStreams(&self) -> windows_core::Result<MSVidSinkStreams>;
    fn SetSinkStreams(&self, streams: MSVidSinkStreams) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidGenericSink_Vtbl {
    pub const fn new<Identity: IMSVidGenericSink_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetSinkFilter<Identity: IMSVidGenericSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bstrname: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGenericSink_Impl::SetSinkFilter(this, core::mem::transmute(&bstrname)).into()
            }
        }
        unsafe extern "system" fn SinkStreams<Identity: IMSVidGenericSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pstreams: *mut MSVidSinkStreams) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGenericSink_Impl::SinkStreams(this) {
                    Ok(ok__) => {
                        pstreams.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSinkStreams<Identity: IMSVidGenericSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, streams: MSVidSinkStreams) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGenericSink_Impl::SetSinkStreams(this, core::mem::transmute_copy(&streams)).into()
            }
        }
        Self {
            base__: IMSVidOutputDevice_Vtbl::new::<Identity, OFFSET>(),
            SetSinkFilter: SetSinkFilter::<Identity, OFFSET>,
            SinkStreams: SinkStreams::<Identity, OFFSET>,
            SetSinkStreams: SetSinkStreams::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidGenericSink as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidOutputDevice as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidGenericSink {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidGenericSink2, IMSVidGenericSink2_Vtbl, 0x6b5a28f3_47f1_4092_b168_60cabec08f1c);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidGenericSink2 {
    type Target = IMSVidGenericSink;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidGenericSink2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidOutputDevice, IMSVidGenericSink);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidGenericSink2 {
    pub unsafe fn AddFilter(&self, bstrname: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AddFilter)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(bstrname)).ok() }
    }
    pub unsafe fn ResetFilterList(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ResetFilterList)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidGenericSink2_Vtbl {
    pub base__: IMSVidGenericSink_Vtbl,
    pub AddFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ResetFilterList: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidGenericSink2_Impl: IMSVidGenericSink_Impl {
    fn AddFilter(&self, bstrname: &windows_core::BSTR) -> windows_core::Result<()>;
    fn ResetFilterList(&self) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidGenericSink2_Vtbl {
    pub const fn new<Identity: IMSVidGenericSink2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn AddFilter<Identity: IMSVidGenericSink2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bstrname: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGenericSink2_Impl::AddFilter(this, core::mem::transmute(&bstrname)).into()
            }
        }
        unsafe extern "system" fn ResetFilterList<Identity: IMSVidGenericSink2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGenericSink2_Impl::ResetFilterList(this).into()
            }
        }
        Self {
            base__: IMSVidGenericSink_Vtbl::new::<Identity, OFFSET>(),
            AddFilter: AddFilter::<Identity, OFFSET>,
            ResetFilterList: ResetFilterList::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidGenericSink2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidOutputDevice as windows_core::Interface>::IID || iid == &<IMSVidGenericSink as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidGenericSink2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidGraphSegment, IMSVidGraphSegment_Vtbl, 0x238dec54_adeb_4005_a349_f772b9afebc4);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidGraphSegment {
    type Target = super::super::super::System::Com::IPersist;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidGraphSegment, windows_core::IUnknown, super::super::super::System::Com::IPersist);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidGraphSegment {
    pub unsafe fn Init(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Init)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetInit<P0>(&self, pinit: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::IUnknown>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetInit)(windows_core::Interface::as_raw(self), pinit.param().abi()).ok() }
    }
    pub unsafe fn EnumFilters(&self) -> windows_core::Result<super::IEnumFilters> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumFilters)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Container(&self) -> windows_core::Result<IMSVidGraphSegmentContainer> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Container)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetContainer<P0>(&self, pctl: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidGraphSegmentContainer>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetContainer)(windows_core::Interface::as_raw(self), pctl.param().abi()).ok() }
    }
    pub unsafe fn Type(&self) -> windows_core::Result<MSVidSegmentType> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Type)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Category(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Category)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Build(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Build)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn PostBuild(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PostBuild)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn PreRun(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PreRun)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn PostRun(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PostRun)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn PreStop(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PreStop)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn PostStop(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PostStop)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn OnEventNotify(&self, leventcode: i32, leventparm1: isize, leventparm2: isize) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).OnEventNotify)(windows_core::Interface::as_raw(self), leventcode, leventparm1, leventparm2).ok() }
    }
    pub unsafe fn Decompose(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Decompose)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidGraphSegment_Vtbl {
    pub base__: super::super::super::System::Com::IPersist_Vtbl,
    pub Init: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetInit: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub EnumFilters: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Container: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetContainer: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Type: unsafe extern "system" fn(*mut core::ffi::c_void, *mut MSVidSegmentType) -> windows_core::HRESULT,
    pub Category: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub Build: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub PostBuild: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub PreRun: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub PostRun: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub PreStop: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub PostStop: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub OnEventNotify: unsafe extern "system" fn(*mut core::ffi::c_void, i32, isize, isize) -> windows_core::HRESULT,
    pub Decompose: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IMSVidGraphSegment_Impl: super::super::super::System::Com::IPersist_Impl {
    fn Init(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn SetInit(&self, pinit: windows_core::Ref<'_, windows_core::IUnknown>) -> windows_core::Result<()>;
    fn EnumFilters(&self) -> windows_core::Result<super::IEnumFilters>;
    fn Container(&self) -> windows_core::Result<IMSVidGraphSegmentContainer>;
    fn SetContainer(&self, pctl: windows_core::Ref<'_, IMSVidGraphSegmentContainer>) -> windows_core::Result<()>;
    fn Type(&self) -> windows_core::Result<MSVidSegmentType>;
    fn Category(&self) -> windows_core::Result<windows_core::GUID>;
    fn Build(&self) -> windows_core::Result<()>;
    fn PostBuild(&self) -> windows_core::Result<()>;
    fn PreRun(&self) -> windows_core::Result<()>;
    fn PostRun(&self) -> windows_core::Result<()>;
    fn PreStop(&self) -> windows_core::Result<()>;
    fn PostStop(&self) -> windows_core::Result<()>;
    fn OnEventNotify(&self, leventcode: i32, leventparm1: isize, leventparm2: isize) -> windows_core::Result<()>;
    fn Decompose(&self) -> windows_core::Result<()>;
}
#[cfg(feature = "Win32_System_Com")]
impl IMSVidGraphSegment_Vtbl {
    pub const fn new<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Init<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pinit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegment_Impl::Init(this) {
                    Ok(ok__) => {
                        pinit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetInit<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pinit: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegment_Impl::SetInit(this, core::mem::transmute_copy(&pinit)).into()
            }
        }
        unsafe extern "system" fn EnumFilters<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pnewenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegment_Impl::EnumFilters(this) {
                    Ok(ok__) => {
                        pnewenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Container<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppctl: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegment_Impl::Container(this) {
                    Ok(ok__) => {
                        ppctl.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetContainer<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pctl: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegment_Impl::SetContainer(this, core::mem::transmute_copy(&pctl)).into()
            }
        }
        unsafe extern "system" fn Type<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ptype: *mut MSVidSegmentType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegment_Impl::Type(this) {
                    Ok(ok__) => {
                        ptype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Category<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pguid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegment_Impl::Category(this) {
                    Ok(ok__) => {
                        pguid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Build<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegment_Impl::Build(this).into()
            }
        }
        unsafe extern "system" fn PostBuild<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegment_Impl::PostBuild(this).into()
            }
        }
        unsafe extern "system" fn PreRun<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegment_Impl::PreRun(this).into()
            }
        }
        unsafe extern "system" fn PostRun<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegment_Impl::PostRun(this).into()
            }
        }
        unsafe extern "system" fn PreStop<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegment_Impl::PreStop(this).into()
            }
        }
        unsafe extern "system" fn PostStop<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegment_Impl::PostStop(this).into()
            }
        }
        unsafe extern "system" fn OnEventNotify<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, leventcode: i32, leventparm1: isize, leventparm2: isize) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegment_Impl::OnEventNotify(this, core::mem::transmute_copy(&leventcode), core::mem::transmute_copy(&leventparm1), core::mem::transmute_copy(&leventparm2)).into()
            }
        }
        unsafe extern "system" fn Decompose<Identity: IMSVidGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegment_Impl::Decompose(this).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IPersist_Vtbl::new::<Identity, OFFSET>(),
            Init: Init::<Identity, OFFSET>,
            SetInit: SetInit::<Identity, OFFSET>,
            EnumFilters: EnumFilters::<Identity, OFFSET>,
            Container: Container::<Identity, OFFSET>,
            SetContainer: SetContainer::<Identity, OFFSET>,
            Type: Type::<Identity, OFFSET>,
            Category: Category::<Identity, OFFSET>,
            Build: Build::<Identity, OFFSET>,
            PostBuild: PostBuild::<Identity, OFFSET>,
            PreRun: PreRun::<Identity, OFFSET>,
            PostRun: PostRun::<Identity, OFFSET>,
            PreStop: PreStop::<Identity, OFFSET>,
            PostStop: PostStop::<Identity, OFFSET>,
            OnEventNotify: OnEventNotify::<Identity, OFFSET>,
            Decompose: Decompose::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidGraphSegment as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IPersist as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IMSVidGraphSegment {}
windows_core::imp::define_interface!(IMSVidGraphSegmentContainer, IMSVidGraphSegmentContainer_Vtbl, 0x3dd2903d_e0aa_11d2_b63a_00c04f79498e);
windows_core::imp::interface_hierarchy!(IMSVidGraphSegmentContainer, windows_core::IUnknown);
impl IMSVidGraphSegmentContainer {
    pub unsafe fn Graph(&self) -> windows_core::Result<super::IGraphBuilder> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Graph)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn Input(&self) -> windows_core::Result<IMSVidGraphSegment> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Input)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Outputs(&self) -> windows_core::Result<IEnumMSVidGraphSegment> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Outputs)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn VideoRenderer(&self) -> windows_core::Result<IMSVidGraphSegment> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).VideoRenderer)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn AudioRenderer(&self) -> windows_core::Result<IMSVidGraphSegment> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AudioRenderer)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Features(&self) -> windows_core::Result<IEnumMSVidGraphSegment> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Features)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Composites(&self) -> windows_core::Result<IEnumMSVidGraphSegment> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Composites)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn ParentContainer(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ParentContainer)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn Decompose<P0>(&self, psegment: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidGraphSegment>,
    {
        unsafe { (windows_core::Interface::vtable(self).Decompose)(windows_core::Interface::as_raw(self), psegment.param().abi()).ok() }
    }
    pub unsafe fn IsWindowless(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).IsWindowless)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn GetFocus(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetFocus)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidGraphSegmentContainer_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Graph: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Com")]
    pub Input: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    Input: usize,
    pub Outputs: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Com")]
    pub VideoRenderer: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    VideoRenderer: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub AudioRenderer: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    AudioRenderer: usize,
    pub Features: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Composites: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ParentContainer: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Com")]
    pub Decompose: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    Decompose: usize,
    pub IsWindowless: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetFocus: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IMSVidGraphSegmentContainer_Impl: windows_core::IUnknownImpl {
    fn Graph(&self) -> windows_core::Result<super::IGraphBuilder>;
    fn Input(&self) -> windows_core::Result<IMSVidGraphSegment>;
    fn Outputs(&self) -> windows_core::Result<IEnumMSVidGraphSegment>;
    fn VideoRenderer(&self) -> windows_core::Result<IMSVidGraphSegment>;
    fn AudioRenderer(&self) -> windows_core::Result<IMSVidGraphSegment>;
    fn Features(&self) -> windows_core::Result<IEnumMSVidGraphSegment>;
    fn Composites(&self) -> windows_core::Result<IEnumMSVidGraphSegment>;
    fn ParentContainer(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn Decompose(&self, psegment: windows_core::Ref<'_, IMSVidGraphSegment>) -> windows_core::Result<()>;
    fn IsWindowless(&self) -> windows_core::Result<()>;
    fn GetFocus(&self) -> windows_core::Result<()>;
}
#[cfg(feature = "Win32_System_Com")]
impl IMSVidGraphSegmentContainer_Vtbl {
    pub const fn new<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Graph<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppgraph: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegmentContainer_Impl::Graph(this) {
                    Ok(ok__) => {
                        ppgraph.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Input<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppinput: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegmentContainer_Impl::Input(this) {
                    Ok(ok__) => {
                        ppinput.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Outputs<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppoutputs: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegmentContainer_Impl::Outputs(this) {
                    Ok(ok__) => {
                        ppoutputs.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn VideoRenderer<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppvr: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegmentContainer_Impl::VideoRenderer(this) {
                    Ok(ok__) => {
                        ppvr.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn AudioRenderer<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppar: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegmentContainer_Impl::AudioRenderer(this) {
                    Ok(ok__) => {
                        ppar.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Features<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppfeatures: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegmentContainer_Impl::Features(this) {
                    Ok(ok__) => {
                        ppfeatures.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Composites<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppcomposites: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegmentContainer_Impl::Composites(this) {
                    Ok(ok__) => {
                        ppcomposites.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn ParentContainer<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppcontainer: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidGraphSegmentContainer_Impl::ParentContainer(this) {
                    Ok(ok__) => {
                        ppcontainer.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Decompose<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psegment: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegmentContainer_Impl::Decompose(this, core::mem::transmute_copy(&psegment)).into()
            }
        }
        unsafe extern "system" fn IsWindowless<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegmentContainer_Impl::IsWindowless(this).into()
            }
        }
        unsafe extern "system" fn GetFocus<Identity: IMSVidGraphSegmentContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegmentContainer_Impl::GetFocus(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Graph: Graph::<Identity, OFFSET>,
            Input: Input::<Identity, OFFSET>,
            Outputs: Outputs::<Identity, OFFSET>,
            VideoRenderer: VideoRenderer::<Identity, OFFSET>,
            AudioRenderer: AudioRenderer::<Identity, OFFSET>,
            Features: Features::<Identity, OFFSET>,
            Composites: Composites::<Identity, OFFSET>,
            ParentContainer: ParentContainer::<Identity, OFFSET>,
            Decompose: Decompose::<Identity, OFFSET>,
            IsWindowless: IsWindowless::<Identity, OFFSET>,
            GetFocus: GetFocus::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidGraphSegmentContainer as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IMSVidGraphSegmentContainer {}
windows_core::imp::define_interface!(IMSVidGraphSegmentUserInput, IMSVidGraphSegmentUserInput_Vtbl, 0x301c060e_20d9_4587_9b03_f82ed9a9943c);
windows_core::imp::interface_hierarchy!(IMSVidGraphSegmentUserInput, windows_core::IUnknown);
impl IMSVidGraphSegmentUserInput {
    pub unsafe fn Click(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Click)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn DblClick(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).DblClick)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn KeyDown(&self, keycode: *const i16, shiftstate: i16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).KeyDown)(windows_core::Interface::as_raw(self), keycode, shiftstate).ok() }
    }
    pub unsafe fn KeyPress(&self, keyascii: *const i16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).KeyPress)(windows_core::Interface::as_raw(self), keyascii).ok() }
    }
    pub unsafe fn KeyUp(&self, keycode: *const i16, shiftstate: i16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).KeyUp)(windows_core::Interface::as_raw(self), keycode, shiftstate).ok() }
    }
    pub unsafe fn MouseDown(&self, buttonstate: i16, shiftstate: i16, x: i32, y: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).MouseDown)(windows_core::Interface::as_raw(self), buttonstate, shiftstate, x, y).ok() }
    }
    pub unsafe fn MouseMove(&self, buttonstate: i16, shiftstate: i16, x: i32, y: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).MouseMove)(windows_core::Interface::as_raw(self), buttonstate, shiftstate, x, y).ok() }
    }
    pub unsafe fn MouseUp(&self, buttonstate: i16, shiftstate: i16, x: i32, y: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).MouseUp)(windows_core::Interface::as_raw(self), buttonstate, shiftstate, x, y).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidGraphSegmentUserInput_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Click: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DblClick: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub KeyDown: unsafe extern "system" fn(*mut core::ffi::c_void, *const i16, i16) -> windows_core::HRESULT,
    pub KeyPress: unsafe extern "system" fn(*mut core::ffi::c_void, *const i16) -> windows_core::HRESULT,
    pub KeyUp: unsafe extern "system" fn(*mut core::ffi::c_void, *const i16, i16) -> windows_core::HRESULT,
    pub MouseDown: unsafe extern "system" fn(*mut core::ffi::c_void, i16, i16, i32, i32) -> windows_core::HRESULT,
    pub MouseMove: unsafe extern "system" fn(*mut core::ffi::c_void, i16, i16, i32, i32) -> windows_core::HRESULT,
    pub MouseUp: unsafe extern "system" fn(*mut core::ffi::c_void, i16, i16, i32, i32) -> windows_core::HRESULT,
}
pub trait IMSVidGraphSegmentUserInput_Impl: windows_core::IUnknownImpl {
    fn Click(&self) -> windows_core::Result<()>;
    fn DblClick(&self) -> windows_core::Result<()>;
    fn KeyDown(&self, keycode: *const i16, shiftstate: i16) -> windows_core::Result<()>;
    fn KeyPress(&self, keyascii: *const i16) -> windows_core::Result<()>;
    fn KeyUp(&self, keycode: *const i16, shiftstate: i16) -> windows_core::Result<()>;
    fn MouseDown(&self, buttonstate: i16, shiftstate: i16, x: i32, y: i32) -> windows_core::Result<()>;
    fn MouseMove(&self, buttonstate: i16, shiftstate: i16, x: i32, y: i32) -> windows_core::Result<()>;
    fn MouseUp(&self, buttonstate: i16, shiftstate: i16, x: i32, y: i32) -> windows_core::Result<()>;
}
impl IMSVidGraphSegmentUserInput_Vtbl {
    pub const fn new<Identity: IMSVidGraphSegmentUserInput_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Click<Identity: IMSVidGraphSegmentUserInput_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegmentUserInput_Impl::Click(this).into()
            }
        }
        unsafe extern "system" fn DblClick<Identity: IMSVidGraphSegmentUserInput_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegmentUserInput_Impl::DblClick(this).into()
            }
        }
        unsafe extern "system" fn KeyDown<Identity: IMSVidGraphSegmentUserInput_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, keycode: *const i16, shiftstate: i16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegmentUserInput_Impl::KeyDown(this, core::mem::transmute_copy(&keycode), core::mem::transmute_copy(&shiftstate)).into()
            }
        }
        unsafe extern "system" fn KeyPress<Identity: IMSVidGraphSegmentUserInput_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, keyascii: *const i16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegmentUserInput_Impl::KeyPress(this, core::mem::transmute_copy(&keyascii)).into()
            }
        }
        unsafe extern "system" fn KeyUp<Identity: IMSVidGraphSegmentUserInput_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, keycode: *const i16, shiftstate: i16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegmentUserInput_Impl::KeyUp(this, core::mem::transmute_copy(&keycode), core::mem::transmute_copy(&shiftstate)).into()
            }
        }
        unsafe extern "system" fn MouseDown<Identity: IMSVidGraphSegmentUserInput_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, buttonstate: i16, shiftstate: i16, x: i32, y: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegmentUserInput_Impl::MouseDown(this, core::mem::transmute_copy(&buttonstate), core::mem::transmute_copy(&shiftstate), core::mem::transmute_copy(&x), core::mem::transmute_copy(&y)).into()
            }
        }
        unsafe extern "system" fn MouseMove<Identity: IMSVidGraphSegmentUserInput_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, buttonstate: i16, shiftstate: i16, x: i32, y: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegmentUserInput_Impl::MouseMove(this, core::mem::transmute_copy(&buttonstate), core::mem::transmute_copy(&shiftstate), core::mem::transmute_copy(&x), core::mem::transmute_copy(&y)).into()
            }
        }
        unsafe extern "system" fn MouseUp<Identity: IMSVidGraphSegmentUserInput_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, buttonstate: i16, shiftstate: i16, x: i32, y: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidGraphSegmentUserInput_Impl::MouseUp(this, core::mem::transmute_copy(&buttonstate), core::mem::transmute_copy(&shiftstate), core::mem::transmute_copy(&x), core::mem::transmute_copy(&y)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Click: Click::<Identity, OFFSET>,
            DblClick: DblClick::<Identity, OFFSET>,
            KeyDown: KeyDown::<Identity, OFFSET>,
            KeyPress: KeyPress::<Identity, OFFSET>,
            KeyUp: KeyUp::<Identity, OFFSET>,
            MouseDown: MouseDown::<Identity, OFFSET>,
            MouseMove: MouseMove::<Identity, OFFSET>,
            MouseUp: MouseUp::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidGraphSegmentUserInput as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IMSVidGraphSegmentUserInput {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidInputDevice, IMSVidInputDevice_Vtbl, 0x37b0353d_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidInputDevice {
    type Target = IMSVidDevice;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidInputDevice, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidInputDevice {
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn IsViewable(&self, v: *const super::super::super::System::Variant::VARIANT) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).IsViewable)(windows_core::Interface::as_raw(self), core::mem::transmute(v), &mut result__).map(|| result__)
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn View(&self, v: *const super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).View)(windows_core::Interface::as_raw(self), core::mem::transmute(v)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidInputDevice_Vtbl {
    pub base__: IMSVidDevice_Vtbl,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub IsViewable: unsafe extern "system" fn(*mut core::ffi::c_void, *const super::super::super::System::Variant::VARIANT, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    IsViewable: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub View: unsafe extern "system" fn(*mut core::ffi::c_void, *const super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    View: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidInputDevice_Impl: IMSVidDevice_Impl {
    fn IsViewable(&self, v: *const super::super::super::System::Variant::VARIANT) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn View(&self, v: *const super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidInputDevice_Vtbl {
    pub const fn new<Identity: IMSVidInputDevice_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn IsViewable<Identity: IMSVidInputDevice_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: *const super::super::super::System::Variant::VARIANT, pfviewable: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidInputDevice_Impl::IsViewable(this, core::mem::transmute_copy(&v)) {
                    Ok(ok__) => {
                        pfviewable.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn View<Identity: IMSVidInputDevice_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: *const super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidInputDevice_Impl::View(this, core::mem::transmute_copy(&v)).into()
            }
        }
        Self { base__: IMSVidDevice_Vtbl::new::<Identity, OFFSET>(), IsViewable: IsViewable::<Identity, OFFSET>, View: View::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidInputDevice as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidInputDevice {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidInputDeviceEvent, IMSVidInputDeviceEvent_Vtbl, 0x37b0353e_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidInputDeviceEvent {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidInputDeviceEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidInputDeviceEvent_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidInputDeviceEvent_Impl: super::super::super::System::Com::IDispatch_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidInputDeviceEvent_Vtbl {
    pub const fn new<Identity: IMSVidInputDeviceEvent_Impl, const OFFSET: isize>() -> Self {
        Self { base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidInputDeviceEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidInputDeviceEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidInputDevices, IMSVidInputDevices_Vtbl, 0xc5702cd1_9b79_11d3_b654_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidInputDevices {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidInputDevices, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidInputDevices {
    pub unsafe fn Count(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Count)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._NewEnum)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn get_Item(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IMSVidInputDevice> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(v), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Add<P0>(&self, pdb: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidInputDevice>,
    {
        unsafe { (windows_core::Interface::vtable(self).Add)(windows_core::Interface::as_raw(self), pdb.param().abi()).ok() }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Remove(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Remove)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(v)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidInputDevices_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Count: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub _NewEnum: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    _NewEnum: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub get_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    get_Item: usize,
    pub Add: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Remove: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Remove: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidInputDevices_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Count(&self) -> windows_core::Result<i32>;
    fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn get_Item(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IMSVidInputDevice>;
    fn Add(&self, pdb: windows_core::Ref<'_, IMSVidInputDevice>) -> windows_core::Result<()>;
    fn Remove(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidInputDevices_Vtbl {
    pub const fn new<Identity: IMSVidInputDevices_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Count<Identity: IMSVidInputDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcount: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidInputDevices_Impl::Count(this) {
                    Ok(ok__) => {
                        lcount.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _NewEnum<Identity: IMSVidInputDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pd: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidInputDevices_Impl::_NewEnum(this) {
                    Ok(ok__) => {
                        pd.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_Item<Identity: IMSVidInputDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: super::super::super::System::Variant::VARIANT, pdb: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidInputDevices_Impl::get_Item(this, core::mem::transmute(&v)) {
                    Ok(ok__) => {
                        pdb.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Add<Identity: IMSVidInputDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdb: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidInputDevices_Impl::Add(this, core::mem::transmute_copy(&pdb)).into()
            }
        }
        unsafe extern "system" fn Remove<Identity: IMSVidInputDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidInputDevices_Impl::Remove(this, core::mem::transmute(&v)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Count: Count::<Identity, OFFSET>,
            _NewEnum: _NewEnum::<Identity, OFFSET>,
            get_Item: get_Item::<Identity, OFFSET>,
            Add: Add::<Identity, OFFSET>,
            Remove: Remove::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidInputDevices as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidInputDevices {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidOutputDevice, IMSVidOutputDevice_Vtbl, 0x37b03546_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidOutputDevice {
    type Target = IMSVidDevice;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidOutputDevice, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidOutputDevice_Vtbl {
    pub base__: IMSVidDevice_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidOutputDevice_Impl: IMSVidDevice_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidOutputDevice_Vtbl {
    pub const fn new<Identity: IMSVidOutputDevice_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IMSVidDevice_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidOutputDevice as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidOutputDevice {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidOutputDeviceEvent, IMSVidOutputDeviceEvent_Vtbl, 0x2e6a14e2_571c_11d3_b652_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidOutputDeviceEvent {
    type Target = IMSVidDeviceEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidOutputDeviceEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidOutputDeviceEvent_Vtbl {
    pub base__: IMSVidDeviceEvent_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidOutputDeviceEvent_Impl: IMSVidDeviceEvent_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidOutputDeviceEvent_Vtbl {
    pub const fn new<Identity: IMSVidOutputDeviceEvent_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IMSVidDeviceEvent_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidOutputDeviceEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidOutputDeviceEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidOutputDevices, IMSVidOutputDevices_Vtbl, 0xc5702cd2_9b79_11d3_b654_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidOutputDevices {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidOutputDevices, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidOutputDevices {
    pub unsafe fn Count(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Count)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._NewEnum)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn get_Item(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IMSVidOutputDevice> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(v), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Add<P0>(&self, pdb: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidOutputDevice>,
    {
        unsafe { (windows_core::Interface::vtable(self).Add)(windows_core::Interface::as_raw(self), pdb.param().abi()).ok() }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Remove(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Remove)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(v)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidOutputDevices_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Count: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub _NewEnum: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    _NewEnum: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub get_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    get_Item: usize,
    pub Add: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Remove: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Remove: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidOutputDevices_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Count(&self) -> windows_core::Result<i32>;
    fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn get_Item(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IMSVidOutputDevice>;
    fn Add(&self, pdb: windows_core::Ref<'_, IMSVidOutputDevice>) -> windows_core::Result<()>;
    fn Remove(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidOutputDevices_Vtbl {
    pub const fn new<Identity: IMSVidOutputDevices_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Count<Identity: IMSVidOutputDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcount: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidOutputDevices_Impl::Count(this) {
                    Ok(ok__) => {
                        lcount.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _NewEnum<Identity: IMSVidOutputDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pd: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidOutputDevices_Impl::_NewEnum(this) {
                    Ok(ok__) => {
                        pd.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_Item<Identity: IMSVidOutputDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: super::super::super::System::Variant::VARIANT, pdb: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidOutputDevices_Impl::get_Item(this, core::mem::transmute(&v)) {
                    Ok(ok__) => {
                        pdb.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Add<Identity: IMSVidOutputDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdb: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidOutputDevices_Impl::Add(this, core::mem::transmute_copy(&pdb)).into()
            }
        }
        unsafe extern "system" fn Remove<Identity: IMSVidOutputDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidOutputDevices_Impl::Remove(this, core::mem::transmute(&v)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Count: Count::<Identity, OFFSET>,
            _NewEnum: _NewEnum::<Identity, OFFSET>,
            get_Item: get_Item::<Identity, OFFSET>,
            Add: Add::<Identity, OFFSET>,
            Remove: Remove::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidOutputDevices as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidOutputDevices {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidPlayback, IMSVidPlayback_Vtbl, 0x37b03538_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidPlayback {
    type Target = IMSVidInputDevice;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidPlayback, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidInputDevice);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidPlayback {
    pub unsafe fn EnableResetOnStop(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnableResetOnStop)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetEnableResetOnStop(&self, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetEnableResetOnStop)(windows_core::Interface::as_raw(self), newval).ok() }
    }
    pub unsafe fn Run(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Run)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Pause(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Pause)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Stop(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Stop)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn get_CanStep(&self, fbackwards: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_CanStep)(windows_core::Interface::as_raw(self), fbackwards, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Step(&self, lstep: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Step)(windows_core::Interface::as_raw(self), lstep).ok() }
    }
    pub unsafe fn SetRate(&self, plrate: f64) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetRate)(windows_core::Interface::as_raw(self), plrate).ok() }
    }
    pub unsafe fn Rate(&self) -> windows_core::Result<f64> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Rate)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetCurrentPosition(&self, lposition: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCurrentPosition)(windows_core::Interface::as_raw(self), lposition).ok() }
    }
    pub unsafe fn CurrentPosition(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CurrentPosition)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetPositionMode(&self, lpositionmode: PositionModeList) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetPositionMode)(windows_core::Interface::as_raw(self), lpositionmode).ok() }
    }
    pub unsafe fn PositionMode(&self) -> windows_core::Result<PositionModeList> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).PositionMode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Length(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Length)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidPlayback_Vtbl {
    pub base__: IMSVidInputDevice_Vtbl,
    pub EnableResetOnStop: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetEnableResetOnStop: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub Run: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Pause: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Stop: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub get_CanStep: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub Step: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub SetRate: unsafe extern "system" fn(*mut core::ffi::c_void, f64) -> windows_core::HRESULT,
    pub Rate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut f64) -> windows_core::HRESULT,
    pub SetCurrentPosition: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub CurrentPosition: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetPositionMode: unsafe extern "system" fn(*mut core::ffi::c_void, PositionModeList) -> windows_core::HRESULT,
    pub PositionMode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut PositionModeList) -> windows_core::HRESULT,
    pub Length: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidPlayback_Impl: IMSVidInputDevice_Impl {
    fn EnableResetOnStop(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetEnableResetOnStop(&self, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn Run(&self) -> windows_core::Result<()>;
    fn Pause(&self) -> windows_core::Result<()>;
    fn Stop(&self) -> windows_core::Result<()>;
    fn get_CanStep(&self, fbackwards: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn Step(&self, lstep: i32) -> windows_core::Result<()>;
    fn SetRate(&self, plrate: f64) -> windows_core::Result<()>;
    fn Rate(&self) -> windows_core::Result<f64>;
    fn SetCurrentPosition(&self, lposition: i32) -> windows_core::Result<()>;
    fn CurrentPosition(&self) -> windows_core::Result<i32>;
    fn SetPositionMode(&self, lpositionmode: PositionModeList) -> windows_core::Result<()>;
    fn PositionMode(&self) -> windows_core::Result<PositionModeList>;
    fn Length(&self) -> windows_core::Result<i32>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidPlayback_Vtbl {
    pub const fn new<Identity: IMSVidPlayback_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn EnableResetOnStop<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidPlayback_Impl::EnableResetOnStop(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetEnableResetOnStop<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidPlayback_Impl::SetEnableResetOnStop(this, core::mem::transmute_copy(&newval)).into()
            }
        }
        unsafe extern "system" fn Run<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidPlayback_Impl::Run(this).into()
            }
        }
        unsafe extern "system" fn Pause<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidPlayback_Impl::Pause(this).into()
            }
        }
        unsafe extern "system" fn Stop<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidPlayback_Impl::Stop(this).into()
            }
        }
        unsafe extern "system" fn get_CanStep<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fbackwards: super::super::super::Foundation::VARIANT_BOOL, pfcan: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidPlayback_Impl::get_CanStep(this, core::mem::transmute_copy(&fbackwards)) {
                    Ok(ok__) => {
                        pfcan.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Step<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lstep: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidPlayback_Impl::Step(this, core::mem::transmute_copy(&lstep)).into()
            }
        }
        unsafe extern "system" fn SetRate<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, plrate: f64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidPlayback_Impl::SetRate(this, core::mem::transmute_copy(&plrate)).into()
            }
        }
        unsafe extern "system" fn Rate<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, plrate: *mut f64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidPlayback_Impl::Rate(this) {
                    Ok(ok__) => {
                        plrate.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCurrentPosition<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lposition: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidPlayback_Impl::SetCurrentPosition(this, core::mem::transmute_copy(&lposition)).into()
            }
        }
        unsafe extern "system" fn CurrentPosition<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lposition: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidPlayback_Impl::CurrentPosition(this) {
                    Ok(ok__) => {
                        lposition.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetPositionMode<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lpositionmode: PositionModeList) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidPlayback_Impl::SetPositionMode(this, core::mem::transmute_copy(&lpositionmode)).into()
            }
        }
        unsafe extern "system" fn PositionMode<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lpositionmode: *mut PositionModeList) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidPlayback_Impl::PositionMode(this) {
                    Ok(ok__) => {
                        lpositionmode.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Length<Identity: IMSVidPlayback_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, llength: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidPlayback_Impl::Length(this) {
                    Ok(ok__) => {
                        llength.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidInputDevice_Vtbl::new::<Identity, OFFSET>(),
            EnableResetOnStop: EnableResetOnStop::<Identity, OFFSET>,
            SetEnableResetOnStop: SetEnableResetOnStop::<Identity, OFFSET>,
            Run: Run::<Identity, OFFSET>,
            Pause: Pause::<Identity, OFFSET>,
            Stop: Stop::<Identity, OFFSET>,
            get_CanStep: get_CanStep::<Identity, OFFSET>,
            Step: Step::<Identity, OFFSET>,
            SetRate: SetRate::<Identity, OFFSET>,
            Rate: Rate::<Identity, OFFSET>,
            SetCurrentPosition: SetCurrentPosition::<Identity, OFFSET>,
            CurrentPosition: CurrentPosition::<Identity, OFFSET>,
            SetPositionMode: SetPositionMode::<Identity, OFFSET>,
            PositionMode: PositionMode::<Identity, OFFSET>,
            Length: Length::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidPlayback as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidInputDevice as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidPlayback {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidPlaybackEvent, IMSVidPlaybackEvent_Vtbl, 0x37b0353b_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidPlaybackEvent {
    type Target = IMSVidInputDeviceEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidPlaybackEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidInputDeviceEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidPlaybackEvent {
    pub unsafe fn EndOfMedia<P0>(&self, lpd: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidPlayback>,
    {
        unsafe { (windows_core::Interface::vtable(self).EndOfMedia)(windows_core::Interface::as_raw(self), lpd.param().abi()).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidPlaybackEvent_Vtbl {
    pub base__: IMSVidInputDeviceEvent_Vtbl,
    pub EndOfMedia: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidPlaybackEvent_Impl: IMSVidInputDeviceEvent_Impl {
    fn EndOfMedia(&self, lpd: windows_core::Ref<'_, IMSVidPlayback>) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidPlaybackEvent_Vtbl {
    pub const fn new<Identity: IMSVidPlaybackEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn EndOfMedia<Identity: IMSVidPlaybackEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lpd: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidPlaybackEvent_Impl::EndOfMedia(this, core::mem::transmute_copy(&lpd)).into()
            }
        }
        Self { base__: IMSVidInputDeviceEvent_Vtbl::new::<Identity, OFFSET>(), EndOfMedia: EndOfMedia::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidPlaybackEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidInputDeviceEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidPlaybackEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidRect, IMSVidRect_Vtbl, 0x7f5000a6_a440_47ca_8acc_c0e75531a2c2);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidRect {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidRect, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidRect {
    pub unsafe fn Top(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Top)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetTop(&self, topval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetTop)(windows_core::Interface::as_raw(self), topval).ok() }
    }
    pub unsafe fn Left(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Left)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetLeft(&self, leftval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetLeft)(windows_core::Interface::as_raw(self), leftval).ok() }
    }
    pub unsafe fn Width(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Width)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetWidth(&self, widthval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetWidth)(windows_core::Interface::as_raw(self), widthval).ok() }
    }
    pub unsafe fn Height(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Height)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetHeight(&self, heightval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetHeight)(windows_core::Interface::as_raw(self), heightval).ok() }
    }
    pub unsafe fn HWnd(&self) -> windows_core::Result<super::super::super::Foundation::HWND> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).HWnd)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetHWnd(&self, hwndval: super::super::super::Foundation::HWND) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetHWnd)(windows_core::Interface::as_raw(self), hwndval).ok() }
    }
    pub unsafe fn SetRect<P0>(&self, rectval: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidRect>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetRect)(windows_core::Interface::as_raw(self), rectval.param().abi()).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidRect_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Top: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetTop: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub Left: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetLeft: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub Width: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetWidth: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub Height: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetHeight: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub HWnd: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::HWND) -> windows_core::HRESULT,
    pub SetHWnd: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HWND) -> windows_core::HRESULT,
    pub SetRect: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidRect_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Top(&self) -> windows_core::Result<i32>;
    fn SetTop(&self, topval: i32) -> windows_core::Result<()>;
    fn Left(&self) -> windows_core::Result<i32>;
    fn SetLeft(&self, leftval: i32) -> windows_core::Result<()>;
    fn Width(&self) -> windows_core::Result<i32>;
    fn SetWidth(&self, widthval: i32) -> windows_core::Result<()>;
    fn Height(&self) -> windows_core::Result<i32>;
    fn SetHeight(&self, heightval: i32) -> windows_core::Result<()>;
    fn HWnd(&self) -> windows_core::Result<super::super::super::Foundation::HWND>;
    fn SetHWnd(&self, hwndval: super::super::super::Foundation::HWND) -> windows_core::Result<()>;
    fn SetRect(&self, rectval: windows_core::Ref<'_, IMSVidRect>) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidRect_Vtbl {
    pub const fn new<Identity: IMSVidRect_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Top<Identity: IMSVidRect_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, topval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidRect_Impl::Top(this) {
                    Ok(ok__) => {
                        topval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetTop<Identity: IMSVidRect_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, topval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidRect_Impl::SetTop(this, core::mem::transmute_copy(&topval)).into()
            }
        }
        unsafe extern "system" fn Left<Identity: IMSVidRect_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, leftval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidRect_Impl::Left(this) {
                    Ok(ok__) => {
                        leftval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetLeft<Identity: IMSVidRect_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, leftval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidRect_Impl::SetLeft(this, core::mem::transmute_copy(&leftval)).into()
            }
        }
        unsafe extern "system" fn Width<Identity: IMSVidRect_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, widthval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidRect_Impl::Width(this) {
                    Ok(ok__) => {
                        widthval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetWidth<Identity: IMSVidRect_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, widthval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidRect_Impl::SetWidth(this, core::mem::transmute_copy(&widthval)).into()
            }
        }
        unsafe extern "system" fn Height<Identity: IMSVidRect_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, heightval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidRect_Impl::Height(this) {
                    Ok(ok__) => {
                        heightval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetHeight<Identity: IMSVidRect_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, heightval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidRect_Impl::SetHeight(this, core::mem::transmute_copy(&heightval)).into()
            }
        }
        unsafe extern "system" fn HWnd<Identity: IMSVidRect_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hwndval: *mut super::super::super::Foundation::HWND) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidRect_Impl::HWnd(this) {
                    Ok(ok__) => {
                        hwndval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetHWnd<Identity: IMSVidRect_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hwndval: super::super::super::Foundation::HWND) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidRect_Impl::SetHWnd(this, core::mem::transmute_copy(&hwndval)).into()
            }
        }
        unsafe extern "system" fn SetRect<Identity: IMSVidRect_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rectval: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidRect_Impl::SetRect(this, core::mem::transmute_copy(&rectval)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Top: Top::<Identity, OFFSET>,
            SetTop: SetTop::<Identity, OFFSET>,
            Left: Left::<Identity, OFFSET>,
            SetLeft: SetLeft::<Identity, OFFSET>,
            Width: Width::<Identity, OFFSET>,
            SetWidth: SetWidth::<Identity, OFFSET>,
            Height: Height::<Identity, OFFSET>,
            SetHeight: SetHeight::<Identity, OFFSET>,
            HWnd: HWnd::<Identity, OFFSET>,
            SetHWnd: SetHWnd::<Identity, OFFSET>,
            SetRect: SetRect::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidRect as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidRect {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferRecordingControl, IMSVidStreamBufferRecordingControl_Vtbl, 0x160621aa_bbbc_4326_a824_c395aebc6e74);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferRecordingControl {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferRecordingControl, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferRecordingControl {
    pub unsafe fn StartTime(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).StartTime)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetStartTime(&self, rtstart: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetStartTime)(windows_core::Interface::as_raw(self), rtstart).ok() }
    }
    pub unsafe fn StopTime(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).StopTime)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetStopTime(&self, rtstop: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetStopTime)(windows_core::Interface::as_raw(self), rtstop).ok() }
    }
    pub unsafe fn RecordingStopped(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).RecordingStopped)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn RecordingStarted(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).RecordingStarted)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn RecordingType(&self) -> windows_core::Result<RecordingType> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).RecordingType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn RecordingAttribute(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).RecordingAttribute)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferRecordingControl_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub StartTime: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetStartTime: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub StopTime: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetStopTime: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub RecordingStopped: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub RecordingStarted: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub RecordingType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut RecordingType) -> windows_core::HRESULT,
    pub RecordingAttribute: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferRecordingControl_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn StartTime(&self) -> windows_core::Result<i32>;
    fn SetStartTime(&self, rtstart: i32) -> windows_core::Result<()>;
    fn StopTime(&self) -> windows_core::Result<i32>;
    fn SetStopTime(&self, rtstop: i32) -> windows_core::Result<()>;
    fn RecordingStopped(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn RecordingStarted(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn RecordingType(&self) -> windows_core::Result<RecordingType>;
    fn RecordingAttribute(&self) -> windows_core::Result<windows_core::IUnknown>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferRecordingControl_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferRecordingControl_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn StartTime<Identity: IMSVidStreamBufferRecordingControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rtstart: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferRecordingControl_Impl::StartTime(this) {
                    Ok(ok__) => {
                        rtstart.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetStartTime<Identity: IMSVidStreamBufferRecordingControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rtstart: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferRecordingControl_Impl::SetStartTime(this, core::mem::transmute_copy(&rtstart)).into()
            }
        }
        unsafe extern "system" fn StopTime<Identity: IMSVidStreamBufferRecordingControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rtstop: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferRecordingControl_Impl::StopTime(this) {
                    Ok(ok__) => {
                        rtstop.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetStopTime<Identity: IMSVidStreamBufferRecordingControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rtstop: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferRecordingControl_Impl::SetStopTime(this, core::mem::transmute_copy(&rtstop)).into()
            }
        }
        unsafe extern "system" fn RecordingStopped<Identity: IMSVidStreamBufferRecordingControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, phresult: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferRecordingControl_Impl::RecordingStopped(this) {
                    Ok(ok__) => {
                        phresult.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RecordingStarted<Identity: IMSVidStreamBufferRecordingControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, phresult: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferRecordingControl_Impl::RecordingStarted(this) {
                    Ok(ok__) => {
                        phresult.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RecordingType<Identity: IMSVidStreamBufferRecordingControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwtype: *mut RecordingType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferRecordingControl_Impl::RecordingType(this) {
                    Ok(ok__) => {
                        dwtype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RecordingAttribute<Identity: IMSVidStreamBufferRecordingControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, precordingattribute: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferRecordingControl_Impl::RecordingAttribute(this) {
                    Ok(ok__) => {
                        precordingattribute.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            StartTime: StartTime::<Identity, OFFSET>,
            SetStartTime: SetStartTime::<Identity, OFFSET>,
            StopTime: StopTime::<Identity, OFFSET>,
            SetStopTime: SetStopTime::<Identity, OFFSET>,
            RecordingStopped: RecordingStopped::<Identity, OFFSET>,
            RecordingStarted: RecordingStarted::<Identity, OFFSET>,
            RecordingType: RecordingType::<Identity, OFFSET>,
            RecordingAttribute: RecordingAttribute::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferRecordingControl as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferRecordingControl {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSink, IMSVidStreamBufferSink_Vtbl, 0x159dbb45_cd1b_4dab_83ea_5cb1f4f21d07);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSink {
    type Target = IMSVidOutputDevice;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSink, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidOutputDevice);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSink {
    pub unsafe fn get_ContentRecorder(&self, pszfilename: &windows_core::BSTR) -> windows_core::Result<IMSVidStreamBufferRecordingControl> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_ContentRecorder)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(pszfilename), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn get_ReferenceRecorder(&self, pszfilename: &windows_core::BSTR) -> windows_core::Result<IMSVidStreamBufferRecordingControl> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_ReferenceRecorder)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(pszfilename), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SinkName(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SinkName)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetSinkName(&self, name: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSinkName)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(name)).ok() }
    }
    pub unsafe fn NameSetLock(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).NameSetLock)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn SBESink(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SBESink)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSink_Vtbl {
    pub base__: IMSVidOutputDevice_Vtbl,
    pub get_ContentRecorder: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub get_ReferenceRecorder: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SinkName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetSinkName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub NameSetLock: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SBESink: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSink_Impl: IMSVidOutputDevice_Impl {
    fn get_ContentRecorder(&self, pszfilename: &windows_core::BSTR) -> windows_core::Result<IMSVidStreamBufferRecordingControl>;
    fn get_ReferenceRecorder(&self, pszfilename: &windows_core::BSTR) -> windows_core::Result<IMSVidStreamBufferRecordingControl>;
    fn SinkName(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetSinkName(&self, name: &windows_core::BSTR) -> windows_core::Result<()>;
    fn NameSetLock(&self) -> windows_core::Result<()>;
    fn SBESink(&self) -> windows_core::Result<windows_core::IUnknown>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSink_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSink_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn get_ContentRecorder<Identity: IMSVidStreamBufferSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszfilename: *mut core::ffi::c_void, precordingiunknown: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink_Impl::get_ContentRecorder(this, core::mem::transmute(&pszfilename)) {
                    Ok(ok__) => {
                        precordingiunknown.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_ReferenceRecorder<Identity: IMSVidStreamBufferSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszfilename: *mut core::ffi::c_void, precordingiunknown: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink_Impl::get_ReferenceRecorder(this, core::mem::transmute(&pszfilename)) {
                    Ok(ok__) => {
                        precordingiunknown.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SinkName<Identity: IMSVidStreamBufferSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pname: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink_Impl::SinkName(this) {
                    Ok(ok__) => {
                        pname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSinkName<Identity: IMSVidStreamBufferSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, name: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSink_Impl::SetSinkName(this, core::mem::transmute(&name)).into()
            }
        }
        unsafe extern "system" fn NameSetLock<Identity: IMSVidStreamBufferSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSink_Impl::NameSetLock(this).into()
            }
        }
        unsafe extern "system" fn SBESink<Identity: IMSVidStreamBufferSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, sbeconfig: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink_Impl::SBESink(this) {
                    Ok(ok__) => {
                        sbeconfig.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidOutputDevice_Vtbl::new::<Identity, OFFSET>(),
            get_ContentRecorder: get_ContentRecorder::<Identity, OFFSET>,
            get_ReferenceRecorder: get_ReferenceRecorder::<Identity, OFFSET>,
            SinkName: SinkName::<Identity, OFFSET>,
            SetSinkName: SetSinkName::<Identity, OFFSET>,
            NameSetLock: NameSetLock::<Identity, OFFSET>,
            SBESink: SBESink::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSink as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidOutputDevice as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSink {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSink2, IMSVidStreamBufferSink2_Vtbl, 0x2ca9fc63_c131_4e5a_955a_544a47c67146);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSink2 {
    type Target = IMSVidStreamBufferSink;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSink2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidOutputDevice, IMSVidStreamBufferSink);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSink2 {
    pub unsafe fn UnlockProfile(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).UnlockProfile)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSink2_Vtbl {
    pub base__: IMSVidStreamBufferSink_Vtbl,
    pub UnlockProfile: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSink2_Impl: IMSVidStreamBufferSink_Impl {
    fn UnlockProfile(&self) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSink2_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSink2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn UnlockProfile<Identity: IMSVidStreamBufferSink2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSink2_Impl::UnlockProfile(this).into()
            }
        }
        Self { base__: IMSVidStreamBufferSink_Vtbl::new::<Identity, OFFSET>(), UnlockProfile: UnlockProfile::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSink2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidOutputDevice as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSink as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSink2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSink3, IMSVidStreamBufferSink3_Vtbl, 0x4f8721d7_7d59_4d8b_99f5_a77775586bd5);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSink3 {
    type Target = IMSVidStreamBufferSink2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSink3, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidOutputDevice, IMSVidStreamBufferSink, IMSVidStreamBufferSink2);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSink3 {
    pub unsafe fn SetMinSeek(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SetMinSeek)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn AudioCounter(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AudioCounter)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn VideoCounter(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).VideoCounter)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn CCCounter(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CCCounter)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn WSTCounter(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).WSTCounter)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetAudioAnalysisFilter(&self, szclsid: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetAudioAnalysisFilter)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(szclsid)).ok() }
    }
    pub unsafe fn AudioAnalysisFilter(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AudioAnalysisFilter)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn Set_AudioAnalysisFilter(&self, guid: windows_core::GUID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set_AudioAnalysisFilter)(windows_core::Interface::as_raw(self), core::mem::transmute(guid)).ok() }
    }
    pub unsafe fn _AudioAnalysisFilter(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._AudioAnalysisFilter)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetVideoAnalysisFilter(&self, szclsid: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetVideoAnalysisFilter)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(szclsid)).ok() }
    }
    pub unsafe fn VideoAnalysisFilter(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).VideoAnalysisFilter)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn Set_VideoAnalysisFilter(&self, guid: windows_core::GUID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set_VideoAnalysisFilter)(windows_core::Interface::as_raw(self), core::mem::transmute(guid)).ok() }
    }
    pub unsafe fn _VideoAnalysisFilter(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._VideoAnalysisFilter)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetDataAnalysisFilter(&self, szclsid: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDataAnalysisFilter)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(szclsid)).ok() }
    }
    pub unsafe fn DataAnalysisFilter(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DataAnalysisFilter)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn Set_DataAnalysisFilter(&self, guid: windows_core::GUID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set_DataAnalysisFilter)(windows_core::Interface::as_raw(self), core::mem::transmute(guid)).ok() }
    }
    pub unsafe fn _DataAnalysisFilter(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._DataAnalysisFilter)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn LicenseErrorCode(&self) -> windows_core::Result<windows_core::HRESULT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).LicenseErrorCode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSink3_Vtbl {
    pub base__: IMSVidStreamBufferSink2_Vtbl,
    pub SetMinSeek: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub AudioCounter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub VideoCounter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub CCCounter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub WSTCounter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetAudioAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AudioAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Set_AudioAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::GUID) -> windows_core::HRESULT,
    pub _AudioAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub SetVideoAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub VideoAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Set_VideoAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::GUID) -> windows_core::HRESULT,
    pub _VideoAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub SetDataAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DataAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Set_DataAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::GUID) -> windows_core::HRESULT,
    pub _DataAnalysisFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub LicenseErrorCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::HRESULT) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSink3_Impl: IMSVidStreamBufferSink2_Impl {
    fn SetMinSeek(&self) -> windows_core::Result<i32>;
    fn AudioCounter(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn VideoCounter(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn CCCounter(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn WSTCounter(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn SetAudioAnalysisFilter(&self, szclsid: &windows_core::BSTR) -> windows_core::Result<()>;
    fn AudioAnalysisFilter(&self) -> windows_core::Result<windows_core::BSTR>;
    fn Set_AudioAnalysisFilter(&self, guid: &windows_core::GUID) -> windows_core::Result<()>;
    fn _AudioAnalysisFilter(&self) -> windows_core::Result<windows_core::GUID>;
    fn SetVideoAnalysisFilter(&self, szclsid: &windows_core::BSTR) -> windows_core::Result<()>;
    fn VideoAnalysisFilter(&self) -> windows_core::Result<windows_core::BSTR>;
    fn Set_VideoAnalysisFilter(&self, guid: &windows_core::GUID) -> windows_core::Result<()>;
    fn _VideoAnalysisFilter(&self) -> windows_core::Result<windows_core::GUID>;
    fn SetDataAnalysisFilter(&self, szclsid: &windows_core::BSTR) -> windows_core::Result<()>;
    fn DataAnalysisFilter(&self) -> windows_core::Result<windows_core::BSTR>;
    fn Set_DataAnalysisFilter(&self, guid: &windows_core::GUID) -> windows_core::Result<()>;
    fn _DataAnalysisFilter(&self) -> windows_core::Result<windows_core::GUID>;
    fn LicenseErrorCode(&self) -> windows_core::Result<windows_core::HRESULT>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSink3_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetMinSeek<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwmin: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::SetMinSeek(this) {
                    Ok(ok__) => {
                        pdwmin.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn AudioCounter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppunk: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::AudioCounter(this) {
                    Ok(ok__) => {
                        ppunk.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn VideoCounter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppunk: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::VideoCounter(this) {
                    Ok(ok__) => {
                        ppunk.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CCCounter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppunk: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::CCCounter(this) {
                    Ok(ok__) => {
                        ppunk.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn WSTCounter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppunk: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::WSTCounter(this) {
                    Ok(ok__) => {
                        ppunk.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetAudioAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, szclsid: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSink3_Impl::SetAudioAnalysisFilter(this, core::mem::transmute(&szclsid)).into()
            }
        }
        unsafe extern "system" fn AudioAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszclsid: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::AudioAnalysisFilter(this) {
                    Ok(ok__) => {
                        pszclsid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Set_AudioAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guid: windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSink3_Impl::Set_AudioAnalysisFilter(this, core::mem::transmute(&guid)).into()
            }
        }
        unsafe extern "system" fn _AudioAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pguid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::_AudioAnalysisFilter(this) {
                    Ok(ok__) => {
                        pguid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetVideoAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, szclsid: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSink3_Impl::SetVideoAnalysisFilter(this, core::mem::transmute(&szclsid)).into()
            }
        }
        unsafe extern "system" fn VideoAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszclsid: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::VideoAnalysisFilter(this) {
                    Ok(ok__) => {
                        pszclsid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Set_VideoAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guid: windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSink3_Impl::Set_VideoAnalysisFilter(this, core::mem::transmute(&guid)).into()
            }
        }
        unsafe extern "system" fn _VideoAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pguid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::_VideoAnalysisFilter(this) {
                    Ok(ok__) => {
                        pguid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDataAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, szclsid: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSink3_Impl::SetDataAnalysisFilter(this, core::mem::transmute(&szclsid)).into()
            }
        }
        unsafe extern "system" fn DataAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszclsid: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::DataAnalysisFilter(this) {
                    Ok(ok__) => {
                        pszclsid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Set_DataAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guid: windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSink3_Impl::Set_DataAnalysisFilter(this, core::mem::transmute(&guid)).into()
            }
        }
        unsafe extern "system" fn _DataAnalysisFilter<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pguid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::_DataAnalysisFilter(this) {
                    Ok(ok__) => {
                        pguid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn LicenseErrorCode<Identity: IMSVidStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hres: *mut windows_core::HRESULT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSink3_Impl::LicenseErrorCode(this) {
                    Ok(ok__) => {
                        hres.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidStreamBufferSink2_Vtbl::new::<Identity, OFFSET>(),
            SetMinSeek: SetMinSeek::<Identity, OFFSET>,
            AudioCounter: AudioCounter::<Identity, OFFSET>,
            VideoCounter: VideoCounter::<Identity, OFFSET>,
            CCCounter: CCCounter::<Identity, OFFSET>,
            WSTCounter: WSTCounter::<Identity, OFFSET>,
            SetAudioAnalysisFilter: SetAudioAnalysisFilter::<Identity, OFFSET>,
            AudioAnalysisFilter: AudioAnalysisFilter::<Identity, OFFSET>,
            Set_AudioAnalysisFilter: Set_AudioAnalysisFilter::<Identity, OFFSET>,
            _AudioAnalysisFilter: _AudioAnalysisFilter::<Identity, OFFSET>,
            SetVideoAnalysisFilter: SetVideoAnalysisFilter::<Identity, OFFSET>,
            VideoAnalysisFilter: VideoAnalysisFilter::<Identity, OFFSET>,
            Set_VideoAnalysisFilter: Set_VideoAnalysisFilter::<Identity, OFFSET>,
            _VideoAnalysisFilter: _VideoAnalysisFilter::<Identity, OFFSET>,
            SetDataAnalysisFilter: SetDataAnalysisFilter::<Identity, OFFSET>,
            DataAnalysisFilter: DataAnalysisFilter::<Identity, OFFSET>,
            Set_DataAnalysisFilter: Set_DataAnalysisFilter::<Identity, OFFSET>,
            _DataAnalysisFilter: _DataAnalysisFilter::<Identity, OFFSET>,
            LicenseErrorCode: LicenseErrorCode::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSink3 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidOutputDevice as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSink as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSink2 as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSink3 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSinkEvent, IMSVidStreamBufferSinkEvent_Vtbl, 0xf798a36b_b05b_4bbe_9703_eaea7d61cd51);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSinkEvent {
    type Target = IMSVidOutputDeviceEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSinkEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent, IMSVidOutputDeviceEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSinkEvent {
    pub unsafe fn CertificateFailure(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).CertificateFailure)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn CertificateSuccess(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).CertificateSuccess)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn WriteFailure(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).WriteFailure)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSinkEvent_Vtbl {
    pub base__: IMSVidOutputDeviceEvent_Vtbl,
    pub CertificateFailure: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub CertificateSuccess: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub WriteFailure: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSinkEvent_Impl: IMSVidOutputDeviceEvent_Impl {
    fn CertificateFailure(&self) -> windows_core::Result<()>;
    fn CertificateSuccess(&self) -> windows_core::Result<()>;
    fn WriteFailure(&self) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSinkEvent_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSinkEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn CertificateFailure<Identity: IMSVidStreamBufferSinkEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSinkEvent_Impl::CertificateFailure(this).into()
            }
        }
        unsafe extern "system" fn CertificateSuccess<Identity: IMSVidStreamBufferSinkEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSinkEvent_Impl::CertificateSuccess(this).into()
            }
        }
        unsafe extern "system" fn WriteFailure<Identity: IMSVidStreamBufferSinkEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSinkEvent_Impl::WriteFailure(this).into()
            }
        }
        Self {
            base__: IMSVidOutputDeviceEvent_Vtbl::new::<Identity, OFFSET>(),
            CertificateFailure: CertificateFailure::<Identity, OFFSET>,
            CertificateSuccess: CertificateSuccess::<Identity, OFFSET>,
            WriteFailure: WriteFailure::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSinkEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidOutputDeviceEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSinkEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSinkEvent2, IMSVidStreamBufferSinkEvent2_Vtbl, 0x3d7a5166_72d7_484b_a06f_286187b80ca1);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSinkEvent2 {
    type Target = IMSVidStreamBufferSinkEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSinkEvent2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent, IMSVidOutputDeviceEvent, IMSVidStreamBufferSinkEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSinkEvent2 {
    pub unsafe fn EncryptionOn(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).EncryptionOn)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn EncryptionOff(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).EncryptionOff)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSinkEvent2_Vtbl {
    pub base__: IMSVidStreamBufferSinkEvent_Vtbl,
    pub EncryptionOn: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub EncryptionOff: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSinkEvent2_Impl: IMSVidStreamBufferSinkEvent_Impl {
    fn EncryptionOn(&self) -> windows_core::Result<()>;
    fn EncryptionOff(&self) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSinkEvent2_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSinkEvent2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn EncryptionOn<Identity: IMSVidStreamBufferSinkEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSinkEvent2_Impl::EncryptionOn(this).into()
            }
        }
        unsafe extern "system" fn EncryptionOff<Identity: IMSVidStreamBufferSinkEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSinkEvent2_Impl::EncryptionOff(this).into()
            }
        }
        Self {
            base__: IMSVidStreamBufferSinkEvent_Vtbl::new::<Identity, OFFSET>(),
            EncryptionOn: EncryptionOn::<Identity, OFFSET>,
            EncryptionOff: EncryptionOff::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSinkEvent2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidOutputDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSinkEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSinkEvent2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSinkEvent3, IMSVidStreamBufferSinkEvent3_Vtbl, 0x735ad8d5_c259_48e9_81e7_d27953665b23);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSinkEvent3 {
    type Target = IMSVidStreamBufferSinkEvent2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSinkEvent3, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent, IMSVidOutputDeviceEvent, IMSVidStreamBufferSinkEvent, IMSVidStreamBufferSinkEvent2);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSinkEvent3 {
    pub unsafe fn LicenseChange(&self, dwprot: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).LicenseChange)(windows_core::Interface::as_raw(self), dwprot).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSinkEvent3_Vtbl {
    pub base__: IMSVidStreamBufferSinkEvent2_Vtbl,
    pub LicenseChange: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSinkEvent3_Impl: IMSVidStreamBufferSinkEvent2_Impl {
    fn LicenseChange(&self, dwprot: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSinkEvent3_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSinkEvent3_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn LicenseChange<Identity: IMSVidStreamBufferSinkEvent3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwprot: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSinkEvent3_Impl::LicenseChange(this, core::mem::transmute_copy(&dwprot)).into()
            }
        }
        Self { base__: IMSVidStreamBufferSinkEvent2_Vtbl::new::<Identity, OFFSET>(), LicenseChange: LicenseChange::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSinkEvent3 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidOutputDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSinkEvent as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSinkEvent2 as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSinkEvent3 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSinkEvent4, IMSVidStreamBufferSinkEvent4_Vtbl, 0x1b01dcb0_daf0_412c_a5d1_590c7f62e2b8);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSinkEvent4 {
    type Target = IMSVidStreamBufferSinkEvent3;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSinkEvent4, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent, IMSVidOutputDeviceEvent, IMSVidStreamBufferSinkEvent, IMSVidStreamBufferSinkEvent2, IMSVidStreamBufferSinkEvent3);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSinkEvent4 {
    pub unsafe fn WriteFailureClear(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).WriteFailureClear)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSinkEvent4_Vtbl {
    pub base__: IMSVidStreamBufferSinkEvent3_Vtbl,
    pub WriteFailureClear: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSinkEvent4_Impl: IMSVidStreamBufferSinkEvent3_Impl {
    fn WriteFailureClear(&self) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSinkEvent4_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSinkEvent4_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn WriteFailureClear<Identity: IMSVidStreamBufferSinkEvent4_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSinkEvent4_Impl::WriteFailureClear(this).into()
            }
        }
        Self { base__: IMSVidStreamBufferSinkEvent3_Vtbl::new::<Identity, OFFSET>(), WriteFailureClear: WriteFailureClear::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSinkEvent4 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidOutputDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSinkEvent as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSinkEvent2 as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSinkEvent3 as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSinkEvent4 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSource, IMSVidStreamBufferSource_Vtbl, 0xeb0c8cf9_6950_4772_87b1_47d11cf3a02f);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSource {
    type Target = IMSVidFilePlayback;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSource, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidInputDevice, IMSVidPlayback, IMSVidFilePlayback);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSource {
    pub unsafe fn Start(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Start)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn RecordingAttribute(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).RecordingAttribute)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn CurrentRatings(&self, pensystem: *mut EnTvRat_System, penrating: *mut EnTvRat_GenericLevel, pbfenattr: *mut i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).CurrentRatings)(windows_core::Interface::as_raw(self), pensystem as _, penrating as _, pbfenattr as _).ok() }
    }
    pub unsafe fn MaxRatingsLevel(&self, ensystem: EnTvRat_System, enrating: EnTvRat_GenericLevel, lbfenattr: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).MaxRatingsLevel)(windows_core::Interface::as_raw(self), ensystem, enrating, lbfenattr).ok() }
    }
    pub unsafe fn SetBlockUnrated(&self, bblock: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetBlockUnrated)(windows_core::Interface::as_raw(self), bblock).ok() }
    }
    pub unsafe fn SetUnratedDelay(&self, dwdelay: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetUnratedDelay)(windows_core::Interface::as_raw(self), dwdelay).ok() }
    }
    pub unsafe fn SBESource(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SBESource)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSource_Vtbl {
    pub base__: IMSVidFilePlayback_Vtbl,
    pub Start: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub RecordingAttribute: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub CurrentRatings: unsafe extern "system" fn(*mut core::ffi::c_void, *mut EnTvRat_System, *mut EnTvRat_GenericLevel, *mut i32) -> windows_core::HRESULT,
    pub MaxRatingsLevel: unsafe extern "system" fn(*mut core::ffi::c_void, EnTvRat_System, EnTvRat_GenericLevel, i32) -> windows_core::HRESULT,
    pub SetBlockUnrated: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetUnratedDelay: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub SBESource: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSource_Impl: IMSVidFilePlayback_Impl {
    fn Start(&self) -> windows_core::Result<i32>;
    fn RecordingAttribute(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn CurrentRatings(&self, pensystem: *mut EnTvRat_System, penrating: *mut EnTvRat_GenericLevel, pbfenattr: *mut i32) -> windows_core::Result<()>;
    fn MaxRatingsLevel(&self, ensystem: EnTvRat_System, enrating: EnTvRat_GenericLevel, lbfenattr: i32) -> windows_core::Result<()>;
    fn SetBlockUnrated(&self, bblock: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn SetUnratedDelay(&self, dwdelay: i32) -> windows_core::Result<()>;
    fn SBESource(&self) -> windows_core::Result<windows_core::IUnknown>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSource_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSource_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Start<Identity: IMSVidStreamBufferSource_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lstart: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSource_Impl::Start(this) {
                    Ok(ok__) => {
                        lstart.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RecordingAttribute<Identity: IMSVidStreamBufferSource_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, precordingattribute: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSource_Impl::RecordingAttribute(this) {
                    Ok(ok__) => {
                        precordingattribute.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CurrentRatings<Identity: IMSVidStreamBufferSource_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pensystem: *mut EnTvRat_System, penrating: *mut EnTvRat_GenericLevel, pbfenattr: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSource_Impl::CurrentRatings(this, core::mem::transmute_copy(&pensystem), core::mem::transmute_copy(&penrating), core::mem::transmute_copy(&pbfenattr)).into()
            }
        }
        unsafe extern "system" fn MaxRatingsLevel<Identity: IMSVidStreamBufferSource_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ensystem: EnTvRat_System, enrating: EnTvRat_GenericLevel, lbfenattr: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSource_Impl::MaxRatingsLevel(this, core::mem::transmute_copy(&ensystem), core::mem::transmute_copy(&enrating), core::mem::transmute_copy(&lbfenattr)).into()
            }
        }
        unsafe extern "system" fn SetBlockUnrated<Identity: IMSVidStreamBufferSource_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bblock: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSource_Impl::SetBlockUnrated(this, core::mem::transmute_copy(&bblock)).into()
            }
        }
        unsafe extern "system" fn SetUnratedDelay<Identity: IMSVidStreamBufferSource_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwdelay: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSource_Impl::SetUnratedDelay(this, core::mem::transmute_copy(&dwdelay)).into()
            }
        }
        unsafe extern "system" fn SBESource<Identity: IMSVidStreamBufferSource_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, sbefilter: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSource_Impl::SBESource(this) {
                    Ok(ok__) => {
                        sbefilter.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidFilePlayback_Vtbl::new::<Identity, OFFSET>(),
            Start: Start::<Identity, OFFSET>,
            RecordingAttribute: RecordingAttribute::<Identity, OFFSET>,
            CurrentRatings: CurrentRatings::<Identity, OFFSET>,
            MaxRatingsLevel: MaxRatingsLevel::<Identity, OFFSET>,
            SetBlockUnrated: SetBlockUnrated::<Identity, OFFSET>,
            SetUnratedDelay: SetUnratedDelay::<Identity, OFFSET>,
            SBESource: SBESource::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSource as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidInputDevice as windows_core::Interface>::IID || iid == &<IMSVidPlayback as windows_core::Interface>::IID || iid == &<IMSVidFilePlayback as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSource {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSource2, IMSVidStreamBufferSource2_Vtbl, 0xe4ba9059_b1ce_40d8_b9a0_d4ea4a9989d3);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSource2 {
    type Target = IMSVidStreamBufferSource;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSource2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidInputDevice, IMSVidPlayback, IMSVidFilePlayback, IMSVidStreamBufferSource);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSource2 {
    pub unsafe fn put_RateEx(&self, dwrate: f64, dwframespersecond: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).put_RateEx)(windows_core::Interface::as_raw(self), dwrate, dwframespersecond).ok() }
    }
    pub unsafe fn AudioCounter(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AudioCounter)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn VideoCounter(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).VideoCounter)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn CCCounter(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CCCounter)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn WSTCounter(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).WSTCounter)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSource2_Vtbl {
    pub base__: IMSVidStreamBufferSource_Vtbl,
    pub put_RateEx: unsafe extern "system" fn(*mut core::ffi::c_void, f64, u32) -> windows_core::HRESULT,
    pub AudioCounter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub VideoCounter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub CCCounter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub WSTCounter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSource2_Impl: IMSVidStreamBufferSource_Impl {
    fn put_RateEx(&self, dwrate: f64, dwframespersecond: u32) -> windows_core::Result<()>;
    fn AudioCounter(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn VideoCounter(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn CCCounter(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn WSTCounter(&self) -> windows_core::Result<windows_core::IUnknown>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSource2_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSource2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn put_RateEx<Identity: IMSVidStreamBufferSource2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrate: f64, dwframespersecond: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSource2_Impl::put_RateEx(this, core::mem::transmute_copy(&dwrate), core::mem::transmute_copy(&dwframespersecond)).into()
            }
        }
        unsafe extern "system" fn AudioCounter<Identity: IMSVidStreamBufferSource2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppunk: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSource2_Impl::AudioCounter(this) {
                    Ok(ok__) => {
                        ppunk.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn VideoCounter<Identity: IMSVidStreamBufferSource2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppunk: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSource2_Impl::VideoCounter(this) {
                    Ok(ok__) => {
                        ppunk.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CCCounter<Identity: IMSVidStreamBufferSource2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppunk: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSource2_Impl::CCCounter(this) {
                    Ok(ok__) => {
                        ppunk.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn WSTCounter<Identity: IMSVidStreamBufferSource2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppunk: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidStreamBufferSource2_Impl::WSTCounter(this) {
                    Ok(ok__) => {
                        ppunk.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidStreamBufferSource_Vtbl::new::<Identity, OFFSET>(),
            put_RateEx: put_RateEx::<Identity, OFFSET>,
            AudioCounter: AudioCounter::<Identity, OFFSET>,
            VideoCounter: VideoCounter::<Identity, OFFSET>,
            CCCounter: CCCounter::<Identity, OFFSET>,
            WSTCounter: WSTCounter::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSource2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidInputDevice as windows_core::Interface>::IID || iid == &<IMSVidPlayback as windows_core::Interface>::IID || iid == &<IMSVidFilePlayback as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSource as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSource2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSourceEvent, IMSVidStreamBufferSourceEvent_Vtbl, 0x50ce8a7d_9c28_4da8_9042_cdfa7116f979);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSourceEvent {
    type Target = IMSVidFilePlaybackEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSourceEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidInputDeviceEvent, IMSVidPlaybackEvent, IMSVidFilePlaybackEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSourceEvent {
    pub unsafe fn CertificateFailure(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).CertificateFailure)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn CertificateSuccess(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).CertificateSuccess)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn RatingsBlocked(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RatingsBlocked)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn RatingsUnblocked(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RatingsUnblocked)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn RatingsChanged(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RatingsChanged)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn TimeHole(&self, streamoffsetms: i32, sizems: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).TimeHole)(windows_core::Interface::as_raw(self), streamoffsetms, sizems).ok() }
    }
    pub unsafe fn StaleDataRead(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).StaleDataRead)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn ContentBecomingStale(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ContentBecomingStale)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn StaleFileDeleted(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).StaleFileDeleted)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSourceEvent_Vtbl {
    pub base__: IMSVidFilePlaybackEvent_Vtbl,
    pub CertificateFailure: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub CertificateSuccess: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RatingsBlocked: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RatingsUnblocked: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RatingsChanged: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub TimeHole: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32) -> windows_core::HRESULT,
    pub StaleDataRead: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ContentBecomingStale: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub StaleFileDeleted: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSourceEvent_Impl: IMSVidFilePlaybackEvent_Impl {
    fn CertificateFailure(&self) -> windows_core::Result<()>;
    fn CertificateSuccess(&self) -> windows_core::Result<()>;
    fn RatingsBlocked(&self) -> windows_core::Result<()>;
    fn RatingsUnblocked(&self) -> windows_core::Result<()>;
    fn RatingsChanged(&self) -> windows_core::Result<()>;
    fn TimeHole(&self, streamoffsetms: i32, sizems: i32) -> windows_core::Result<()>;
    fn StaleDataRead(&self) -> windows_core::Result<()>;
    fn ContentBecomingStale(&self) -> windows_core::Result<()>;
    fn StaleFileDeleted(&self) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSourceEvent_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSourceEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn CertificateFailure<Identity: IMSVidStreamBufferSourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent_Impl::CertificateFailure(this).into()
            }
        }
        unsafe extern "system" fn CertificateSuccess<Identity: IMSVidStreamBufferSourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent_Impl::CertificateSuccess(this).into()
            }
        }
        unsafe extern "system" fn RatingsBlocked<Identity: IMSVidStreamBufferSourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent_Impl::RatingsBlocked(this).into()
            }
        }
        unsafe extern "system" fn RatingsUnblocked<Identity: IMSVidStreamBufferSourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent_Impl::RatingsUnblocked(this).into()
            }
        }
        unsafe extern "system" fn RatingsChanged<Identity: IMSVidStreamBufferSourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent_Impl::RatingsChanged(this).into()
            }
        }
        unsafe extern "system" fn TimeHole<Identity: IMSVidStreamBufferSourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, streamoffsetms: i32, sizems: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent_Impl::TimeHole(this, core::mem::transmute_copy(&streamoffsetms), core::mem::transmute_copy(&sizems)).into()
            }
        }
        unsafe extern "system" fn StaleDataRead<Identity: IMSVidStreamBufferSourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent_Impl::StaleDataRead(this).into()
            }
        }
        unsafe extern "system" fn ContentBecomingStale<Identity: IMSVidStreamBufferSourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent_Impl::ContentBecomingStale(this).into()
            }
        }
        unsafe extern "system" fn StaleFileDeleted<Identity: IMSVidStreamBufferSourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent_Impl::StaleFileDeleted(this).into()
            }
        }
        Self {
            base__: IMSVidFilePlaybackEvent_Vtbl::new::<Identity, OFFSET>(),
            CertificateFailure: CertificateFailure::<Identity, OFFSET>,
            CertificateSuccess: CertificateSuccess::<Identity, OFFSET>,
            RatingsBlocked: RatingsBlocked::<Identity, OFFSET>,
            RatingsUnblocked: RatingsUnblocked::<Identity, OFFSET>,
            RatingsChanged: RatingsChanged::<Identity, OFFSET>,
            TimeHole: TimeHole::<Identity, OFFSET>,
            StaleDataRead: StaleDataRead::<Identity, OFFSET>,
            ContentBecomingStale: ContentBecomingStale::<Identity, OFFSET>,
            StaleFileDeleted: StaleFileDeleted::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSourceEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidInputDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidPlaybackEvent as windows_core::Interface>::IID || iid == &<IMSVidFilePlaybackEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSourceEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSourceEvent2, IMSVidStreamBufferSourceEvent2_Vtbl, 0x7aef50ce_8e22_4ba8_bc06_a92a458b4ef2);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSourceEvent2 {
    type Target = IMSVidStreamBufferSourceEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSourceEvent2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidInputDeviceEvent, IMSVidPlaybackEvent, IMSVidFilePlaybackEvent, IMSVidStreamBufferSourceEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSourceEvent2 {
    pub unsafe fn RateChange(&self, qwnewrate: f64, qwoldrate: f64) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RateChange)(windows_core::Interface::as_raw(self), qwnewrate, qwoldrate).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSourceEvent2_Vtbl {
    pub base__: IMSVidStreamBufferSourceEvent_Vtbl,
    pub RateChange: unsafe extern "system" fn(*mut core::ffi::c_void, f64, f64) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSourceEvent2_Impl: IMSVidStreamBufferSourceEvent_Impl {
    fn RateChange(&self, qwnewrate: f64, qwoldrate: f64) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSourceEvent2_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSourceEvent2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn RateChange<Identity: IMSVidStreamBufferSourceEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, qwnewrate: f64, qwoldrate: f64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent2_Impl::RateChange(this, core::mem::transmute_copy(&qwnewrate), core::mem::transmute_copy(&qwoldrate)).into()
            }
        }
        Self { base__: IMSVidStreamBufferSourceEvent_Vtbl::new::<Identity, OFFSET>(), RateChange: RateChange::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSourceEvent2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidInputDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidPlaybackEvent as windows_core::Interface>::IID || iid == &<IMSVidFilePlaybackEvent as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSourceEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSourceEvent2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferSourceEvent3, IMSVidStreamBufferSourceEvent3_Vtbl, 0xceabd6ab_9b90_4570_adf1_3ce76e00a763);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferSourceEvent3 {
    type Target = IMSVidStreamBufferSourceEvent2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferSourceEvent3, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidInputDeviceEvent, IMSVidPlaybackEvent, IMSVidFilePlaybackEvent, IMSVidStreamBufferSourceEvent, IMSVidStreamBufferSourceEvent2);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferSourceEvent3 {
    pub unsafe fn BroadcastEvent(&self, guid: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).BroadcastEvent)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(guid)).ok() }
    }
    pub unsafe fn BroadcastEventEx(&self, guid: &windows_core::BSTR, param1: u32, param2: u32, param3: u32, param4: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).BroadcastEventEx)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(guid), param1, param2, param3, param4).ok() }
    }
    pub unsafe fn COPPBlocked(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).COPPBlocked)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn COPPUnblocked(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).COPPUnblocked)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn ContentPrimarilyAudio(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ContentPrimarilyAudio)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferSourceEvent3_Vtbl {
    pub base__: IMSVidStreamBufferSourceEvent2_Vtbl,
    pub BroadcastEvent: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub BroadcastEventEx: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, u32, u32, u32, u32) -> windows_core::HRESULT,
    pub COPPBlocked: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub COPPUnblocked: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ContentPrimarilyAudio: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferSourceEvent3_Impl: IMSVidStreamBufferSourceEvent2_Impl {
    fn BroadcastEvent(&self, guid: &windows_core::BSTR) -> windows_core::Result<()>;
    fn BroadcastEventEx(&self, guid: &windows_core::BSTR, param1: u32, param2: u32, param3: u32, param4: u32) -> windows_core::Result<()>;
    fn COPPBlocked(&self) -> windows_core::Result<()>;
    fn COPPUnblocked(&self) -> windows_core::Result<()>;
    fn ContentPrimarilyAudio(&self) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferSourceEvent3_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferSourceEvent3_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn BroadcastEvent<Identity: IMSVidStreamBufferSourceEvent3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guid: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent3_Impl::BroadcastEvent(this, core::mem::transmute(&guid)).into()
            }
        }
        unsafe extern "system" fn BroadcastEventEx<Identity: IMSVidStreamBufferSourceEvent3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guid: *mut core::ffi::c_void, param1: u32, param2: u32, param3: u32, param4: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent3_Impl::BroadcastEventEx(this, core::mem::transmute(&guid), core::mem::transmute_copy(&param1), core::mem::transmute_copy(&param2), core::mem::transmute_copy(&param3), core::mem::transmute_copy(&param4)).into()
            }
        }
        unsafe extern "system" fn COPPBlocked<Identity: IMSVidStreamBufferSourceEvent3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent3_Impl::COPPBlocked(this).into()
            }
        }
        unsafe extern "system" fn COPPUnblocked<Identity: IMSVidStreamBufferSourceEvent3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent3_Impl::COPPUnblocked(this).into()
            }
        }
        unsafe extern "system" fn ContentPrimarilyAudio<Identity: IMSVidStreamBufferSourceEvent3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferSourceEvent3_Impl::ContentPrimarilyAudio(this).into()
            }
        }
        Self {
            base__: IMSVidStreamBufferSourceEvent2_Vtbl::new::<Identity, OFFSET>(),
            BroadcastEvent: BroadcastEvent::<Identity, OFFSET>,
            BroadcastEventEx: BroadcastEventEx::<Identity, OFFSET>,
            COPPBlocked: COPPBlocked::<Identity, OFFSET>,
            COPPUnblocked: COPPUnblocked::<Identity, OFFSET>,
            ContentPrimarilyAudio: ContentPrimarilyAudio::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferSourceEvent3 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidInputDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidPlaybackEvent as windows_core::Interface>::IID || iid == &<IMSVidFilePlaybackEvent as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSourceEvent as windows_core::Interface>::IID || iid == &<IMSVidStreamBufferSourceEvent2 as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferSourceEvent3 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidStreamBufferV2SourceEvent, IMSVidStreamBufferV2SourceEvent_Vtbl, 0x49c771f9_41b2_4cf7_9f9a_a313a8f6027e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidStreamBufferV2SourceEvent {
    type Target = IMSVidFilePlaybackEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidStreamBufferV2SourceEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidInputDeviceEvent, IMSVidPlaybackEvent, IMSVidFilePlaybackEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidStreamBufferV2SourceEvent {
    pub unsafe fn RatingsChanged(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RatingsChanged)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn TimeHole(&self, streamoffsetms: i32, sizems: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).TimeHole)(windows_core::Interface::as_raw(self), streamoffsetms, sizems).ok() }
    }
    pub unsafe fn StaleDataRead(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).StaleDataRead)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn ContentBecomingStale(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ContentBecomingStale)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn StaleFileDeleted(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).StaleFileDeleted)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn RateChange(&self, qwnewrate: f64, qwoldrate: f64) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RateChange)(windows_core::Interface::as_raw(self), qwnewrate, qwoldrate).ok() }
    }
    pub unsafe fn BroadcastEvent(&self, guid: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).BroadcastEvent)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(guid)).ok() }
    }
    pub unsafe fn BroadcastEventEx(&self, guid: &windows_core::BSTR, param1: u32, param2: u32, param3: u32, param4: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).BroadcastEventEx)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(guid), param1, param2, param3, param4).ok() }
    }
    pub unsafe fn ContentPrimarilyAudio(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ContentPrimarilyAudio)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidStreamBufferV2SourceEvent_Vtbl {
    pub base__: IMSVidFilePlaybackEvent_Vtbl,
    pub RatingsChanged: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub TimeHole: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32) -> windows_core::HRESULT,
    pub StaleDataRead: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ContentBecomingStale: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub StaleFileDeleted: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RateChange: unsafe extern "system" fn(*mut core::ffi::c_void, f64, f64) -> windows_core::HRESULT,
    pub BroadcastEvent: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub BroadcastEventEx: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, u32, u32, u32, u32) -> windows_core::HRESULT,
    pub ContentPrimarilyAudio: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidStreamBufferV2SourceEvent_Impl: IMSVidFilePlaybackEvent_Impl {
    fn RatingsChanged(&self) -> windows_core::Result<()>;
    fn TimeHole(&self, streamoffsetms: i32, sizems: i32) -> windows_core::Result<()>;
    fn StaleDataRead(&self) -> windows_core::Result<()>;
    fn ContentBecomingStale(&self) -> windows_core::Result<()>;
    fn StaleFileDeleted(&self) -> windows_core::Result<()>;
    fn RateChange(&self, qwnewrate: f64, qwoldrate: f64) -> windows_core::Result<()>;
    fn BroadcastEvent(&self, guid: &windows_core::BSTR) -> windows_core::Result<()>;
    fn BroadcastEventEx(&self, guid: &windows_core::BSTR, param1: u32, param2: u32, param3: u32, param4: u32) -> windows_core::Result<()>;
    fn ContentPrimarilyAudio(&self) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidStreamBufferV2SourceEvent_Vtbl {
    pub const fn new<Identity: IMSVidStreamBufferV2SourceEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn RatingsChanged<Identity: IMSVidStreamBufferV2SourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferV2SourceEvent_Impl::RatingsChanged(this).into()
            }
        }
        unsafe extern "system" fn TimeHole<Identity: IMSVidStreamBufferV2SourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, streamoffsetms: i32, sizems: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferV2SourceEvent_Impl::TimeHole(this, core::mem::transmute_copy(&streamoffsetms), core::mem::transmute_copy(&sizems)).into()
            }
        }
        unsafe extern "system" fn StaleDataRead<Identity: IMSVidStreamBufferV2SourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferV2SourceEvent_Impl::StaleDataRead(this).into()
            }
        }
        unsafe extern "system" fn ContentBecomingStale<Identity: IMSVidStreamBufferV2SourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferV2SourceEvent_Impl::ContentBecomingStale(this).into()
            }
        }
        unsafe extern "system" fn StaleFileDeleted<Identity: IMSVidStreamBufferV2SourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferV2SourceEvent_Impl::StaleFileDeleted(this).into()
            }
        }
        unsafe extern "system" fn RateChange<Identity: IMSVidStreamBufferV2SourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, qwnewrate: f64, qwoldrate: f64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferV2SourceEvent_Impl::RateChange(this, core::mem::transmute_copy(&qwnewrate), core::mem::transmute_copy(&qwoldrate)).into()
            }
        }
        unsafe extern "system" fn BroadcastEvent<Identity: IMSVidStreamBufferV2SourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guid: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferV2SourceEvent_Impl::BroadcastEvent(this, core::mem::transmute(&guid)).into()
            }
        }
        unsafe extern "system" fn BroadcastEventEx<Identity: IMSVidStreamBufferV2SourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, guid: *mut core::ffi::c_void, param1: u32, param2: u32, param3: u32, param4: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferV2SourceEvent_Impl::BroadcastEventEx(this, core::mem::transmute(&guid), core::mem::transmute_copy(&param1), core::mem::transmute_copy(&param2), core::mem::transmute_copy(&param3), core::mem::transmute_copy(&param4)).into()
            }
        }
        unsafe extern "system" fn ContentPrimarilyAudio<Identity: IMSVidStreamBufferV2SourceEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidStreamBufferV2SourceEvent_Impl::ContentPrimarilyAudio(this).into()
            }
        }
        Self {
            base__: IMSVidFilePlaybackEvent_Vtbl::new::<Identity, OFFSET>(),
            RatingsChanged: RatingsChanged::<Identity, OFFSET>,
            TimeHole: TimeHole::<Identity, OFFSET>,
            StaleDataRead: StaleDataRead::<Identity, OFFSET>,
            ContentBecomingStale: ContentBecomingStale::<Identity, OFFSET>,
            StaleFileDeleted: StaleFileDeleted::<Identity, OFFSET>,
            RateChange: RateChange::<Identity, OFFSET>,
            BroadcastEvent: BroadcastEvent::<Identity, OFFSET>,
            BroadcastEventEx: BroadcastEventEx::<Identity, OFFSET>,
            ContentPrimarilyAudio: ContentPrimarilyAudio::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidStreamBufferV2SourceEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidInputDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidPlaybackEvent as windows_core::Interface>::IID || iid == &<IMSVidFilePlaybackEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidStreamBufferV2SourceEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidTuner, IMSVidTuner_Vtbl, 0x1c15d47d_911d_11d2_b632_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidTuner {
    type Target = IMSVidVideoInputDevice;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidTuner, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidInputDevice, IMSVidVideoInputDevice);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidTuner {
    pub unsafe fn Tune(&self) -> windows_core::Result<ITuneRequest> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Tune)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetTune<P0>(&self, ptr: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetTune)(windows_core::Interface::as_raw(self), ptr.param().abi()).ok() }
    }
    pub unsafe fn TuningSpace(&self) -> windows_core::Result<ITuningSpace> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TuningSpace)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetTuningSpace<P0>(&self, plts: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ITuningSpace>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetTuningSpace)(windows_core::Interface::as_raw(self), plts.param().abi()).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidTuner_Vtbl {
    pub base__: IMSVidVideoInputDevice_Vtbl,
    pub Tune: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetTune: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub TuningSpace: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetTuningSpace: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidTuner_Impl: IMSVidVideoInputDevice_Impl {
    fn Tune(&self) -> windows_core::Result<ITuneRequest>;
    fn SetTune(&self, ptr: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<()>;
    fn TuningSpace(&self) -> windows_core::Result<ITuningSpace>;
    fn SetTuningSpace(&self, plts: windows_core::Ref<'_, ITuningSpace>) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidTuner_Vtbl {
    pub const fn new<Identity: IMSVidTuner_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Tune<Identity: IMSVidTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pptr: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidTuner_Impl::Tune(this) {
                    Ok(ok__) => {
                        pptr.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetTune<Identity: IMSVidTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ptr: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidTuner_Impl::SetTune(this, core::mem::transmute_copy(&ptr)).into()
            }
        }
        unsafe extern "system" fn TuningSpace<Identity: IMSVidTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, plts: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidTuner_Impl::TuningSpace(this) {
                    Ok(ok__) => {
                        plts.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetTuningSpace<Identity: IMSVidTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, plts: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidTuner_Impl::SetTuningSpace(this, core::mem::transmute_copy(&plts)).into()
            }
        }
        Self {
            base__: IMSVidVideoInputDevice_Vtbl::new::<Identity, OFFSET>(),
            Tune: Tune::<Identity, OFFSET>,
            SetTune: SetTune::<Identity, OFFSET>,
            TuningSpace: TuningSpace::<Identity, OFFSET>,
            SetTuningSpace: SetTuningSpace::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidTuner as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidInputDevice as windows_core::Interface>::IID || iid == &<IMSVidVideoInputDevice as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidTuner {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidTunerEvent, IMSVidTunerEvent_Vtbl, 0x1c15d485_911d_11d2_b632_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidTunerEvent {
    type Target = IMSVidInputDeviceEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidTunerEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidInputDeviceEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidTunerEvent {
    pub unsafe fn TuneChanged<P0>(&self, lpd: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidTuner>,
    {
        unsafe { (windows_core::Interface::vtable(self).TuneChanged)(windows_core::Interface::as_raw(self), lpd.param().abi()).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidTunerEvent_Vtbl {
    pub base__: IMSVidInputDeviceEvent_Vtbl,
    pub TuneChanged: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidTunerEvent_Impl: IMSVidInputDeviceEvent_Impl {
    fn TuneChanged(&self, lpd: windows_core::Ref<'_, IMSVidTuner>) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidTunerEvent_Vtbl {
    pub const fn new<Identity: IMSVidTunerEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn TuneChanged<Identity: IMSVidTunerEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lpd: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidTunerEvent_Impl::TuneChanged(this, core::mem::transmute_copy(&lpd)).into()
            }
        }
        Self { base__: IMSVidInputDeviceEvent_Vtbl::new::<Identity, OFFSET>(), TuneChanged: TuneChanged::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidTunerEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidInputDeviceEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidTunerEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidVMR9, IMSVidVMR9_Vtbl, 0xd58b0015_ebef_44bb_bbdd_3f3699d76ea1);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidVMR9 {
    type Target = IMSVidVideoRenderer;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidVMR9, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidOutputDevice, IMSVidVideoRenderer);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidVMR9 {
    pub unsafe fn Allocator_ID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Allocator_ID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetAllocator<P0>(&self, allocpresent: P0, id: i32) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::IUnknown>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetAllocator)(windows_core::Interface::as_raw(self), allocpresent.param().abi(), id).ok() }
    }
    pub unsafe fn SetSuppressEffects(&self, bsuppress: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSuppressEffects)(windows_core::Interface::as_raw(self), bsuppress).ok() }
    }
    pub unsafe fn SuppressEffects(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SuppressEffects)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Allocator(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Allocator)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidVMR9_Vtbl {
    pub base__: IMSVidVideoRenderer_Vtbl,
    pub Allocator_ID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetAllocator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub SetSuppressEffects: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SuppressEffects: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub Allocator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidVMR9_Impl: IMSVidVideoRenderer_Impl {
    fn Allocator_ID(&self) -> windows_core::Result<i32>;
    fn SetAllocator(&self, allocpresent: windows_core::Ref<'_, windows_core::IUnknown>, id: i32) -> windows_core::Result<()>;
    fn SetSuppressEffects(&self, bsuppress: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn SuppressEffects(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn Allocator(&self) -> windows_core::Result<windows_core::IUnknown>;
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidVMR9_Vtbl {
    pub const fn new<Identity: IMSVidVMR9_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Allocator_ID<Identity: IMSVidVMR9_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, id: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVMR9_Impl::Allocator_ID(this) {
                    Ok(ok__) => {
                        id.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetAllocator<Identity: IMSVidVMR9_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, allocpresent: *mut core::ffi::c_void, id: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVMR9_Impl::SetAllocator(this, core::mem::transmute_copy(&allocpresent), core::mem::transmute_copy(&id)).into()
            }
        }
        unsafe extern "system" fn SetSuppressEffects<Identity: IMSVidVMR9_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bsuppress: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVMR9_Impl::SetSuppressEffects(this, core::mem::transmute_copy(&bsuppress)).into()
            }
        }
        unsafe extern "system" fn SuppressEffects<Identity: IMSVidVMR9_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bsuppress: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVMR9_Impl::SuppressEffects(this) {
                    Ok(ok__) => {
                        bsuppress.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Allocator<Identity: IMSVidVMR9_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, allocpresent: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVMR9_Impl::Allocator(this) {
                    Ok(ok__) => {
                        allocpresent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidVideoRenderer_Vtbl::new::<Identity, OFFSET>(),
            Allocator_ID: Allocator_ID::<Identity, OFFSET>,
            SetAllocator: SetAllocator::<Identity, OFFSET>,
            SetSuppressEffects: SetSuppressEffects::<Identity, OFFSET>,
            SuppressEffects: SuppressEffects::<Identity, OFFSET>,
            Allocator: Allocator::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidVMR9 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidOutputDevice as windows_core::Interface>::IID || iid == &<IMSVidVideoRenderer as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidVMR9 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidVRGraphSegment, IMSVidVRGraphSegment_Vtbl, 0xdd47de3f_9874_4f7b_8b22_7cb2688461e7);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidVRGraphSegment {
    type Target = IMSVidGraphSegment;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidVRGraphSegment, windows_core::IUnknown, super::super::super::System::Com::IPersist, IMSVidGraphSegment);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidVRGraphSegment {
    pub unsafe fn Set_VMRendererMode(&self, dwmode: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set_VMRendererMode)(windows_core::Interface::as_raw(self), dwmode).ok() }
    }
    pub unsafe fn SetOwner(&self, window: super::super::super::Foundation::HWND) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetOwner)(windows_core::Interface::as_raw(self), window).ok() }
    }
    pub unsafe fn Owner(&self) -> windows_core::Result<super::super::super::Foundation::HWND> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Owner)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn UseOverlay(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).UseOverlay)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetUseOverlay(&self, useoverlayval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetUseOverlay)(windows_core::Interface::as_raw(self), useoverlayval).ok() }
    }
    pub unsafe fn Visible(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Visible)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetVisible(&self, visible: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetVisible)(windows_core::Interface::as_raw(self), visible).ok() }
    }
    pub unsafe fn ColorKey(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ColorKey)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetColorKey(&self, colorkey: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetColorKey)(windows_core::Interface::as_raw(self), colorkey).ok() }
    }
    pub unsafe fn Source(&self) -> windows_core::Result<super::super::super::Foundation::RECT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Source)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSource(&self, r: super::super::super::Foundation::RECT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSource)(windows_core::Interface::as_raw(self), core::mem::transmute(r)).ok() }
    }
    pub unsafe fn Destination(&self) -> windows_core::Result<super::super::super::Foundation::RECT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Destination)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetDestination(&self, r: super::super::super::Foundation::RECT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDestination)(windows_core::Interface::as_raw(self), core::mem::transmute(r)).ok() }
    }
    pub unsafe fn get_NativeSize(&self, sizeval: *mut super::super::super::Foundation::SIZE, aspectratio: *mut super::super::super::Foundation::SIZE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).get_NativeSize)(windows_core::Interface::as_raw(self), sizeval as _, aspectratio as _).ok() }
    }
    pub unsafe fn BorderColor(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).BorderColor)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetBorderColor(&self, color: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetBorderColor)(windows_core::Interface::as_raw(self), color).ok() }
    }
    pub unsafe fn MaintainAspectRatio(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MaintainAspectRatio)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMaintainAspectRatio(&self, fmaintain: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMaintainAspectRatio)(windows_core::Interface::as_raw(self), fmaintain).ok() }
    }
    pub unsafe fn Refresh(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Refresh)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn DisplayChange(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).DisplayChange)(windows_core::Interface::as_raw(self)).ok() }
    }
    #[cfg(feature = "Win32_Graphics_Gdi")]
    pub unsafe fn RePaint(&self, hdc: super::super::super::Graphics::Gdi::HDC) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RePaint)(windows_core::Interface::as_raw(self), hdc).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidVRGraphSegment_Vtbl {
    pub base__: IMSVidGraphSegment_Vtbl,
    pub Set_VMRendererMode: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub SetOwner: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HWND) -> windows_core::HRESULT,
    pub Owner: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::HWND) -> windows_core::HRESULT,
    pub UseOverlay: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetUseOverlay: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub Visible: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetVisible: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub ColorKey: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub SetColorKey: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub Source: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::RECT) -> windows_core::HRESULT,
    pub SetSource: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::RECT) -> windows_core::HRESULT,
    pub Destination: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::RECT) -> windows_core::HRESULT,
    pub SetDestination: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::RECT) -> windows_core::HRESULT,
    pub get_NativeSize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::SIZE, *mut super::super::super::Foundation::SIZE) -> windows_core::HRESULT,
    pub BorderColor: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub SetBorderColor: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub MaintainAspectRatio: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetMaintainAspectRatio: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub Refresh: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DisplayChange: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_Graphics_Gdi")]
    pub RePaint: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Graphics::Gdi::HDC) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_Graphics_Gdi"))]
    RePaint: usize,
}
#[cfg(all(feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com"))]
pub trait IMSVidVRGraphSegment_Impl: IMSVidGraphSegment_Impl {
    fn Set_VMRendererMode(&self, dwmode: i32) -> windows_core::Result<()>;
    fn SetOwner(&self, window: super::super::super::Foundation::HWND) -> windows_core::Result<()>;
    fn Owner(&self) -> windows_core::Result<super::super::super::Foundation::HWND>;
    fn UseOverlay(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetUseOverlay(&self, useoverlayval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn Visible(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetVisible(&self, visible: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn ColorKey(&self) -> windows_core::Result<u32>;
    fn SetColorKey(&self, colorkey: u32) -> windows_core::Result<()>;
    fn Source(&self) -> windows_core::Result<super::super::super::Foundation::RECT>;
    fn SetSource(&self, r: &super::super::super::Foundation::RECT) -> windows_core::Result<()>;
    fn Destination(&self) -> windows_core::Result<super::super::super::Foundation::RECT>;
    fn SetDestination(&self, r: &super::super::super::Foundation::RECT) -> windows_core::Result<()>;
    fn get_NativeSize(&self, sizeval: *mut super::super::super::Foundation::SIZE, aspectratio: *mut super::super::super::Foundation::SIZE) -> windows_core::Result<()>;
    fn BorderColor(&self) -> windows_core::Result<u32>;
    fn SetBorderColor(&self, color: u32) -> windows_core::Result<()>;
    fn MaintainAspectRatio(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetMaintainAspectRatio(&self, fmaintain: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn Refresh(&self) -> windows_core::Result<()>;
    fn DisplayChange(&self) -> windows_core::Result<()>;
    fn RePaint(&self, hdc: super::super::super::Graphics::Gdi::HDC) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com"))]
impl IMSVidVRGraphSegment_Vtbl {
    pub const fn new<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Set_VMRendererMode<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwmode: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::Set_VMRendererMode(this, core::mem::transmute_copy(&dwmode)).into()
            }
        }
        unsafe extern "system" fn SetOwner<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, window: super::super::super::Foundation::HWND) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::SetOwner(this, core::mem::transmute_copy(&window)).into()
            }
        }
        unsafe extern "system" fn Owner<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, window: *mut super::super::super::Foundation::HWND) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVRGraphSegment_Impl::Owner(this) {
                    Ok(ok__) => {
                        window.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn UseOverlay<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, useoverlayval: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVRGraphSegment_Impl::UseOverlay(this) {
                    Ok(ok__) => {
                        useoverlayval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetUseOverlay<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, useoverlayval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::SetUseOverlay(this, core::mem::transmute_copy(&useoverlayval)).into()
            }
        }
        unsafe extern "system" fn Visible<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, visible: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVRGraphSegment_Impl::Visible(this) {
                    Ok(ok__) => {
                        visible.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetVisible<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, visible: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::SetVisible(this, core::mem::transmute_copy(&visible)).into()
            }
        }
        unsafe extern "system" fn ColorKey<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, colorkey: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVRGraphSegment_Impl::ColorKey(this) {
                    Ok(ok__) => {
                        colorkey.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetColorKey<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, colorkey: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::SetColorKey(this, core::mem::transmute_copy(&colorkey)).into()
            }
        }
        unsafe extern "system" fn Source<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, r: *mut super::super::super::Foundation::RECT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVRGraphSegment_Impl::Source(this) {
                    Ok(ok__) => {
                        r.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSource<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, r: super::super::super::Foundation::RECT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::SetSource(this, core::mem::transmute(&r)).into()
            }
        }
        unsafe extern "system" fn Destination<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, r: *mut super::super::super::Foundation::RECT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVRGraphSegment_Impl::Destination(this) {
                    Ok(ok__) => {
                        r.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDestination<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, r: super::super::super::Foundation::RECT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::SetDestination(this, core::mem::transmute(&r)).into()
            }
        }
        unsafe extern "system" fn get_NativeSize<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, sizeval: *mut super::super::super::Foundation::SIZE, aspectratio: *mut super::super::super::Foundation::SIZE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::get_NativeSize(this, core::mem::transmute_copy(&sizeval), core::mem::transmute_copy(&aspectratio)).into()
            }
        }
        unsafe extern "system" fn BorderColor<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, color: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVRGraphSegment_Impl::BorderColor(this) {
                    Ok(ok__) => {
                        color.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetBorderColor<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, color: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::SetBorderColor(this, core::mem::transmute_copy(&color)).into()
            }
        }
        unsafe extern "system" fn MaintainAspectRatio<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fmaintain: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVRGraphSegment_Impl::MaintainAspectRatio(this) {
                    Ok(ok__) => {
                        fmaintain.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMaintainAspectRatio<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fmaintain: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::SetMaintainAspectRatio(this, core::mem::transmute_copy(&fmaintain)).into()
            }
        }
        unsafe extern "system" fn Refresh<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::Refresh(this).into()
            }
        }
        unsafe extern "system" fn DisplayChange<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::DisplayChange(this).into()
            }
        }
        unsafe extern "system" fn RePaint<Identity: IMSVidVRGraphSegment_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hdc: super::super::super::Graphics::Gdi::HDC) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVRGraphSegment_Impl::RePaint(this, core::mem::transmute_copy(&hdc)).into()
            }
        }
        Self {
            base__: IMSVidGraphSegment_Vtbl::new::<Identity, OFFSET>(),
            Set_VMRendererMode: Set_VMRendererMode::<Identity, OFFSET>,
            SetOwner: SetOwner::<Identity, OFFSET>,
            Owner: Owner::<Identity, OFFSET>,
            UseOverlay: UseOverlay::<Identity, OFFSET>,
            SetUseOverlay: SetUseOverlay::<Identity, OFFSET>,
            Visible: Visible::<Identity, OFFSET>,
            SetVisible: SetVisible::<Identity, OFFSET>,
            ColorKey: ColorKey::<Identity, OFFSET>,
            SetColorKey: SetColorKey::<Identity, OFFSET>,
            Source: Source::<Identity, OFFSET>,
            SetSource: SetSource::<Identity, OFFSET>,
            Destination: Destination::<Identity, OFFSET>,
            SetDestination: SetDestination::<Identity, OFFSET>,
            get_NativeSize: get_NativeSize::<Identity, OFFSET>,
            BorderColor: BorderColor::<Identity, OFFSET>,
            SetBorderColor: SetBorderColor::<Identity, OFFSET>,
            MaintainAspectRatio: MaintainAspectRatio::<Identity, OFFSET>,
            SetMaintainAspectRatio: SetMaintainAspectRatio::<Identity, OFFSET>,
            Refresh: Refresh::<Identity, OFFSET>,
            DisplayChange: DisplayChange::<Identity, OFFSET>,
            RePaint: RePaint::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidVRGraphSegment as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IPersist as windows_core::Interface>::IID || iid == &<IMSVidGraphSegment as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com"))]
impl windows_core::RuntimeName for IMSVidVRGraphSegment {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidVideoInputDevice, IMSVidVideoInputDevice_Vtbl, 0x1c15d47f_911d_11d2_b632_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidVideoInputDevice {
    type Target = IMSVidInputDevice;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidVideoInputDevice, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidInputDevice);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidVideoInputDevice_Vtbl {
    pub base__: IMSVidInputDevice_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidVideoInputDevice_Impl: IMSVidInputDevice_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidVideoInputDevice_Vtbl {
    pub const fn new<Identity: IMSVidVideoInputDevice_Impl, const OFFSET: isize>() -> Self {
        Self { base__: IMSVidInputDevice_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidVideoInputDevice as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidInputDevice as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidVideoInputDevice {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidVideoRenderer, IMSVidVideoRenderer_Vtbl, 0x37b03540_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidVideoRenderer {
    type Target = IMSVidOutputDevice;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidVideoRenderer, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidOutputDevice);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidVideoRenderer {
    pub unsafe fn CustomCompositorClass(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CustomCompositorClass)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetCustomCompositorClass(&self, compositorclsid: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCustomCompositorClass)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(compositorclsid)).ok() }
    }
    pub unsafe fn _CustomCompositorClass(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._CustomCompositorClass)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Set_CustomCompositorClass(&self, compositorclsid: *const windows_core::GUID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set_CustomCompositorClass)(windows_core::Interface::as_raw(self), compositorclsid).ok() }
    }
    pub unsafe fn _CustomCompositor(&self) -> windows_core::Result<super::IVMRImageCompositor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._CustomCompositor)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Set_CustomCompositor<P0>(&self, compositor: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<super::IVMRImageCompositor>,
    {
        unsafe { (windows_core::Interface::vtable(self).Set_CustomCompositor)(windows_core::Interface::as_raw(self), compositor.param().abi()).ok() }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn MixerBitmap(&self) -> windows_core::Result<super::super::super::System::Ole::IPictureDisp> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MixerBitmap)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn _MixerBitmap(&self) -> windows_core::Result<super::IVMRMixerBitmap> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._MixerBitmap)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn SetMixerBitmap<P0>(&self, mixerpicturedisp: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<super::super::super::System::Ole::IPictureDisp>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetMixerBitmap)(windows_core::Interface::as_raw(self), mixerpicturedisp.param().abi()).ok() }
    }
    #[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi"))]
    pub unsafe fn Set_MixerBitmap(&self, mixerpicture: *const super::VMRALPHABITMAP) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set_MixerBitmap)(windows_core::Interface::as_raw(self), core::mem::transmute(mixerpicture)).ok() }
    }
    pub unsafe fn MixerBitmapPositionRect(&self) -> windows_core::Result<IMSVidRect> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MixerBitmapPositionRect)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetMixerBitmapPositionRect<P0>(&self, rdest: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidRect>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetMixerBitmapPositionRect)(windows_core::Interface::as_raw(self), rdest.param().abi()).ok() }
    }
    pub unsafe fn MixerBitmapOpacity(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MixerBitmapOpacity)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMixerBitmapOpacity(&self, opacity: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMixerBitmapOpacity)(windows_core::Interface::as_raw(self), opacity).ok() }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn SetupMixerBitmap<P0, P2>(&self, mixerpicturedisp: P0, opacity: i32, rdest: P2) -> windows_core::Result<()>
    where
        P0: windows_core::Param<super::super::super::System::Ole::IPictureDisp>,
        P2: windows_core::Param<IMSVidRect>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetupMixerBitmap)(windows_core::Interface::as_raw(self), mixerpicturedisp.param().abi(), opacity, rdest.param().abi()).ok() }
    }
    pub unsafe fn SourceSize(&self) -> windows_core::Result<SourceSizeList> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SourceSize)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSourceSize(&self, newsize: SourceSizeList) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSourceSize)(windows_core::Interface::as_raw(self), newsize).ok() }
    }
    pub unsafe fn OverScan(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).OverScan)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetOverScan(&self, lpercent: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetOverScan)(windows_core::Interface::as_raw(self), lpercent).ok() }
    }
    pub unsafe fn AvailableSourceRect(&self) -> windows_core::Result<IMSVidRect> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AvailableSourceRect)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn MaxVidRect(&self) -> windows_core::Result<IMSVidRect> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MaxVidRect)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn MinVidRect(&self) -> windows_core::Result<IMSVidRect> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MinVidRect)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn ClippedSourceRect(&self) -> windows_core::Result<IMSVidRect> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ClippedSourceRect)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetClippedSourceRect<P0>(&self, prect: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidRect>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetClippedSourceRect)(windows_core::Interface::as_raw(self), prect.param().abi()).ok() }
    }
    pub unsafe fn UsingOverlay(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).UsingOverlay)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetUsingOverlay(&self, useoverlayval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetUsingOverlay)(windows_core::Interface::as_raw(self), useoverlayval).ok() }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn Capture(&self) -> windows_core::Result<super::super::super::System::Ole::IPictureDisp> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Capture)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn FramesPerSecond(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).FramesPerSecond)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn DecimateInput(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DecimateInput)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetDecimateInput(&self, pdeci: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDecimateInput)(windows_core::Interface::as_raw(self), pdeci).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidVideoRenderer_Vtbl {
    pub base__: IMSVidOutputDevice_Vtbl,
    pub CustomCompositorClass: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetCustomCompositorClass: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub _CustomCompositorClass: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub Set_CustomCompositorClass: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID) -> windows_core::HRESULT,
    pub _CustomCompositor: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Set_CustomCompositor: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub MixerBitmap: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    MixerBitmap: usize,
    pub _MixerBitmap: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub SetMixerBitmap: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    SetMixerBitmap: usize,
    #[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi"))]
    pub Set_MixerBitmap: unsafe extern "system" fn(*mut core::ffi::c_void, *const super::VMRALPHABITMAP) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi")))]
    Set_MixerBitmap: usize,
    pub MixerBitmapPositionRect: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetMixerBitmapPositionRect: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub MixerBitmapOpacity: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMixerBitmapOpacity: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub SetupMixerBitmap: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, i32, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    SetupMixerBitmap: usize,
    pub SourceSize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut SourceSizeList) -> windows_core::HRESULT,
    pub SetSourceSize: unsafe extern "system" fn(*mut core::ffi::c_void, SourceSizeList) -> windows_core::HRESULT,
    pub OverScan: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetOverScan: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub AvailableSourceRect: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub MaxVidRect: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub MinVidRect: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ClippedSourceRect: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetClippedSourceRect: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub UsingOverlay: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetUsingOverlay: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub Capture: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    Capture: usize,
    pub FramesPerSecond: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub DecimateInput: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetDecimateInput: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidVideoRenderer_Impl: IMSVidOutputDevice_Impl {
    fn CustomCompositorClass(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetCustomCompositorClass(&self, compositorclsid: &windows_core::BSTR) -> windows_core::Result<()>;
    fn _CustomCompositorClass(&self) -> windows_core::Result<windows_core::GUID>;
    fn Set_CustomCompositorClass(&self, compositorclsid: *const windows_core::GUID) -> windows_core::Result<()>;
    fn _CustomCompositor(&self) -> windows_core::Result<super::IVMRImageCompositor>;
    fn Set_CustomCompositor(&self, compositor: windows_core::Ref<'_, super::IVMRImageCompositor>) -> windows_core::Result<()>;
    fn MixerBitmap(&self) -> windows_core::Result<super::super::super::System::Ole::IPictureDisp>;
    fn _MixerBitmap(&self) -> windows_core::Result<super::IVMRMixerBitmap>;
    fn SetMixerBitmap(&self, mixerpicturedisp: windows_core::Ref<'_, super::super::super::System::Ole::IPictureDisp>) -> windows_core::Result<()>;
    fn Set_MixerBitmap(&self, mixerpicture: *const super::VMRALPHABITMAP) -> windows_core::Result<()>;
    fn MixerBitmapPositionRect(&self) -> windows_core::Result<IMSVidRect>;
    fn SetMixerBitmapPositionRect(&self, rdest: windows_core::Ref<'_, IMSVidRect>) -> windows_core::Result<()>;
    fn MixerBitmapOpacity(&self) -> windows_core::Result<i32>;
    fn SetMixerBitmapOpacity(&self, opacity: i32) -> windows_core::Result<()>;
    fn SetupMixerBitmap(&self, mixerpicturedisp: windows_core::Ref<'_, super::super::super::System::Ole::IPictureDisp>, opacity: i32, rdest: windows_core::Ref<'_, IMSVidRect>) -> windows_core::Result<()>;
    fn SourceSize(&self) -> windows_core::Result<SourceSizeList>;
    fn SetSourceSize(&self, newsize: SourceSizeList) -> windows_core::Result<()>;
    fn OverScan(&self) -> windows_core::Result<i32>;
    fn SetOverScan(&self, lpercent: i32) -> windows_core::Result<()>;
    fn AvailableSourceRect(&self) -> windows_core::Result<IMSVidRect>;
    fn MaxVidRect(&self) -> windows_core::Result<IMSVidRect>;
    fn MinVidRect(&self) -> windows_core::Result<IMSVidRect>;
    fn ClippedSourceRect(&self) -> windows_core::Result<IMSVidRect>;
    fn SetClippedSourceRect(&self, prect: windows_core::Ref<'_, IMSVidRect>) -> windows_core::Result<()>;
    fn UsingOverlay(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetUsingOverlay(&self, useoverlayval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn Capture(&self) -> windows_core::Result<super::super::super::System::Ole::IPictureDisp>;
    fn FramesPerSecond(&self) -> windows_core::Result<i32>;
    fn DecimateInput(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetDecimateInput(&self, pdeci: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidVideoRenderer_Vtbl {
    pub const fn new<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn CustomCompositorClass<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, compositorclsid: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::CustomCompositorClass(this) {
                    Ok(ok__) => {
                        compositorclsid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCustomCompositorClass<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, compositorclsid: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::SetCustomCompositorClass(this, core::mem::transmute(&compositorclsid)).into()
            }
        }
        unsafe extern "system" fn _CustomCompositorClass<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, compositorclsid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::_CustomCompositorClass(this) {
                    Ok(ok__) => {
                        compositorclsid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Set_CustomCompositorClass<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, compositorclsid: *const windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::Set_CustomCompositorClass(this, core::mem::transmute_copy(&compositorclsid)).into()
            }
        }
        unsafe extern "system" fn _CustomCompositor<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, compositor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::_CustomCompositor(this) {
                    Ok(ok__) => {
                        compositor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Set_CustomCompositor<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, compositor: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::Set_CustomCompositor(this, core::mem::transmute_copy(&compositor)).into()
            }
        }
        unsafe extern "system" fn MixerBitmap<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mixerpicturedisp: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::MixerBitmap(this) {
                    Ok(ok__) => {
                        mixerpicturedisp.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _MixerBitmap<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mixerpicture: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::_MixerBitmap(this) {
                    Ok(ok__) => {
                        mixerpicture.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMixerBitmap<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mixerpicturedisp: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::SetMixerBitmap(this, core::mem::transmute_copy(&mixerpicturedisp)).into()
            }
        }
        unsafe extern "system" fn Set_MixerBitmap<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mixerpicture: *const super::VMRALPHABITMAP) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::Set_MixerBitmap(this, core::mem::transmute_copy(&mixerpicture)).into()
            }
        }
        unsafe extern "system" fn MixerBitmapPositionRect<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rdest: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::MixerBitmapPositionRect(this) {
                    Ok(ok__) => {
                        rdest.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMixerBitmapPositionRect<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rdest: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::SetMixerBitmapPositionRect(this, core::mem::transmute_copy(&rdest)).into()
            }
        }
        unsafe extern "system" fn MixerBitmapOpacity<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, opacity: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::MixerBitmapOpacity(this) {
                    Ok(ok__) => {
                        opacity.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMixerBitmapOpacity<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, opacity: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::SetMixerBitmapOpacity(this, core::mem::transmute_copy(&opacity)).into()
            }
        }
        unsafe extern "system" fn SetupMixerBitmap<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mixerpicturedisp: *mut core::ffi::c_void, opacity: i32, rdest: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::SetupMixerBitmap(this, core::mem::transmute_copy(&mixerpicturedisp), core::mem::transmute_copy(&opacity), core::mem::transmute_copy(&rdest)).into()
            }
        }
        unsafe extern "system" fn SourceSize<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentsize: *mut SourceSizeList) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::SourceSize(this) {
                    Ok(ok__) => {
                        currentsize.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSourceSize<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newsize: SourceSizeList) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::SetSourceSize(this, core::mem::transmute_copy(&newsize)).into()
            }
        }
        unsafe extern "system" fn OverScan<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, plpercent: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::OverScan(this) {
                    Ok(ok__) => {
                        plpercent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetOverScan<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lpercent: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::SetOverScan(this, core::mem::transmute_copy(&lpercent)).into()
            }
        }
        unsafe extern "system" fn AvailableSourceRect<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prect: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::AvailableSourceRect(this) {
                    Ok(ok__) => {
                        prect.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn MaxVidRect<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppvidrect: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::MaxVidRect(this) {
                    Ok(ok__) => {
                        ppvidrect.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn MinVidRect<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppvidrect: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::MinVidRect(this) {
                    Ok(ok__) => {
                        ppvidrect.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn ClippedSourceRect<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prect: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::ClippedSourceRect(this) {
                    Ok(ok__) => {
                        prect.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetClippedSourceRect<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prect: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::SetClippedSourceRect(this, core::mem::transmute_copy(&prect)).into()
            }
        }
        unsafe extern "system" fn UsingOverlay<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, useoverlayval: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::UsingOverlay(this) {
                    Ok(ok__) => {
                        useoverlayval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetUsingOverlay<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, useoverlayval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::SetUsingOverlay(this, core::mem::transmute_copy(&useoverlayval)).into()
            }
        }
        unsafe extern "system" fn Capture<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentimage: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::Capture(this) {
                    Ok(ok__) => {
                        currentimage.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn FramesPerSecond<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::FramesPerSecond(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DecimateInput<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdeci: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer_Impl::DecimateInput(this) {
                    Ok(ok__) => {
                        pdeci.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDecimateInput<Identity: IMSVidVideoRenderer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdeci: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer_Impl::SetDecimateInput(this, core::mem::transmute_copy(&pdeci)).into()
            }
        }
        Self {
            base__: IMSVidOutputDevice_Vtbl::new::<Identity, OFFSET>(),
            CustomCompositorClass: CustomCompositorClass::<Identity, OFFSET>,
            SetCustomCompositorClass: SetCustomCompositorClass::<Identity, OFFSET>,
            _CustomCompositorClass: _CustomCompositorClass::<Identity, OFFSET>,
            Set_CustomCompositorClass: Set_CustomCompositorClass::<Identity, OFFSET>,
            _CustomCompositor: _CustomCompositor::<Identity, OFFSET>,
            Set_CustomCompositor: Set_CustomCompositor::<Identity, OFFSET>,
            MixerBitmap: MixerBitmap::<Identity, OFFSET>,
            _MixerBitmap: _MixerBitmap::<Identity, OFFSET>,
            SetMixerBitmap: SetMixerBitmap::<Identity, OFFSET>,
            Set_MixerBitmap: Set_MixerBitmap::<Identity, OFFSET>,
            MixerBitmapPositionRect: MixerBitmapPositionRect::<Identity, OFFSET>,
            SetMixerBitmapPositionRect: SetMixerBitmapPositionRect::<Identity, OFFSET>,
            MixerBitmapOpacity: MixerBitmapOpacity::<Identity, OFFSET>,
            SetMixerBitmapOpacity: SetMixerBitmapOpacity::<Identity, OFFSET>,
            SetupMixerBitmap: SetupMixerBitmap::<Identity, OFFSET>,
            SourceSize: SourceSize::<Identity, OFFSET>,
            SetSourceSize: SetSourceSize::<Identity, OFFSET>,
            OverScan: OverScan::<Identity, OFFSET>,
            SetOverScan: SetOverScan::<Identity, OFFSET>,
            AvailableSourceRect: AvailableSourceRect::<Identity, OFFSET>,
            MaxVidRect: MaxVidRect::<Identity, OFFSET>,
            MinVidRect: MinVidRect::<Identity, OFFSET>,
            ClippedSourceRect: ClippedSourceRect::<Identity, OFFSET>,
            SetClippedSourceRect: SetClippedSourceRect::<Identity, OFFSET>,
            UsingOverlay: UsingOverlay::<Identity, OFFSET>,
            SetUsingOverlay: SetUsingOverlay::<Identity, OFFSET>,
            Capture: Capture::<Identity, OFFSET>,
            FramesPerSecond: FramesPerSecond::<Identity, OFFSET>,
            DecimateInput: DecimateInput::<Identity, OFFSET>,
            SetDecimateInput: SetDecimateInput::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidVideoRenderer as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidOutputDevice as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidVideoRenderer {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidVideoRenderer2, IMSVidVideoRenderer2_Vtbl, 0x6bdd5c1e_2810_4159_94bc_05511ae8549b);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidVideoRenderer2 {
    type Target = IMSVidVideoRenderer;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidVideoRenderer2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidOutputDevice, IMSVidVideoRenderer);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidVideoRenderer2 {
    pub unsafe fn Allocator(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Allocator)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn _Allocator(&self) -> windows_core::Result<super::IVMRSurfaceAllocator> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._Allocator)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Allocator_ID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Allocator_ID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetAllocator<P0>(&self, allocpresent: P0, id: i32) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::IUnknown>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetAllocator)(windows_core::Interface::as_raw(self), allocpresent.param().abi(), id).ok() }
    }
    pub unsafe fn _SetAllocator2<P0>(&self, allocpresent: P0, id: i32) -> windows_core::Result<()>
    where
        P0: windows_core::Param<super::IVMRSurfaceAllocator>,
    {
        unsafe { (windows_core::Interface::vtable(self)._SetAllocator2)(windows_core::Interface::as_raw(self), allocpresent.param().abi(), id).ok() }
    }
    pub unsafe fn SetSuppressEffects(&self, bsuppress: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSuppressEffects)(windows_core::Interface::as_raw(self), bsuppress).ok() }
    }
    pub unsafe fn SuppressEffects(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SuppressEffects)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidVideoRenderer2_Vtbl {
    pub base__: IMSVidVideoRenderer_Vtbl,
    pub Allocator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub _Allocator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Allocator_ID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetAllocator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub _SetAllocator2: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub SetSuppressEffects: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SuppressEffects: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidVideoRenderer2_Impl: IMSVidVideoRenderer_Impl {
    fn Allocator(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn _Allocator(&self) -> windows_core::Result<super::IVMRSurfaceAllocator>;
    fn Allocator_ID(&self) -> windows_core::Result<i32>;
    fn SetAllocator(&self, allocpresent: windows_core::Ref<'_, windows_core::IUnknown>, id: i32) -> windows_core::Result<()>;
    fn _SetAllocator2(&self, allocpresent: windows_core::Ref<'_, super::IVMRSurfaceAllocator>, id: i32) -> windows_core::Result<()>;
    fn SetSuppressEffects(&self, bsuppress: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn SuppressEffects(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidVideoRenderer2_Vtbl {
    pub const fn new<Identity: IMSVidVideoRenderer2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Allocator<Identity: IMSVidVideoRenderer2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, allocpresent: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer2_Impl::Allocator(this) {
                    Ok(ok__) => {
                        allocpresent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _Allocator<Identity: IMSVidVideoRenderer2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, allocpresent: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer2_Impl::_Allocator(this) {
                    Ok(ok__) => {
                        allocpresent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Allocator_ID<Identity: IMSVidVideoRenderer2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, id: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer2_Impl::Allocator_ID(this) {
                    Ok(ok__) => {
                        id.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetAllocator<Identity: IMSVidVideoRenderer2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, allocpresent: *mut core::ffi::c_void, id: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer2_Impl::SetAllocator(this, core::mem::transmute_copy(&allocpresent), core::mem::transmute_copy(&id)).into()
            }
        }
        unsafe extern "system" fn _SetAllocator2<Identity: IMSVidVideoRenderer2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, allocpresent: *mut core::ffi::c_void, id: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer2_Impl::_SetAllocator2(this, core::mem::transmute_copy(&allocpresent), core::mem::transmute_copy(&id)).into()
            }
        }
        unsafe extern "system" fn SetSuppressEffects<Identity: IMSVidVideoRenderer2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bsuppress: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRenderer2_Impl::SetSuppressEffects(this, core::mem::transmute_copy(&bsuppress)).into()
            }
        }
        unsafe extern "system" fn SuppressEffects<Identity: IMSVidVideoRenderer2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bsuppress: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRenderer2_Impl::SuppressEffects(this) {
                    Ok(ok__) => {
                        bsuppress.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IMSVidVideoRenderer_Vtbl::new::<Identity, OFFSET>(),
            Allocator: Allocator::<Identity, OFFSET>,
            _Allocator: _Allocator::<Identity, OFFSET>,
            Allocator_ID: Allocator_ID::<Identity, OFFSET>,
            SetAllocator: SetAllocator::<Identity, OFFSET>,
            _SetAllocator2: _SetAllocator2::<Identity, OFFSET>,
            SetSuppressEffects: SetSuppressEffects::<Identity, OFFSET>,
            SuppressEffects: SuppressEffects::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidVideoRenderer2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidOutputDevice as windows_core::Interface>::IID || iid == &<IMSVidVideoRenderer as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_Graphics_DirectDraw", feature = "Win32_Graphics_Gdi", feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidVideoRenderer2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidVideoRendererDevices, IMSVidVideoRendererDevices_Vtbl, 0xc5702cd3_9b79_11d3_b654_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidVideoRendererDevices {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidVideoRendererDevices, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidVideoRendererDevices {
    pub unsafe fn Count(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Count)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._NewEnum)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn get_Item(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IMSVidVideoRenderer> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(v), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Add<P0>(&self, pdb: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidVideoRenderer>,
    {
        unsafe { (windows_core::Interface::vtable(self).Add)(windows_core::Interface::as_raw(self), pdb.param().abi()).ok() }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Remove(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Remove)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(v)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidVideoRendererDevices_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Count: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub _NewEnum: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    _NewEnum: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub get_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    get_Item: usize,
    pub Add: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Remove: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Remove: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidVideoRendererDevices_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Count(&self) -> windows_core::Result<i32>;
    fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn get_Item(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<IMSVidVideoRenderer>;
    fn Add(&self, pdb: windows_core::Ref<'_, IMSVidVideoRenderer>) -> windows_core::Result<()>;
    fn Remove(&self, v: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidVideoRendererDevices_Vtbl {
    pub const fn new<Identity: IMSVidVideoRendererDevices_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Count<Identity: IMSVidVideoRendererDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcount: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRendererDevices_Impl::Count(this) {
                    Ok(ok__) => {
                        lcount.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _NewEnum<Identity: IMSVidVideoRendererDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pd: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRendererDevices_Impl::_NewEnum(this) {
                    Ok(ok__) => {
                        pd.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_Item<Identity: IMSVidVideoRendererDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: super::super::super::System::Variant::VARIANT, pdb: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidVideoRendererDevices_Impl::get_Item(this, core::mem::transmute(&v)) {
                    Ok(ok__) => {
                        pdb.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Add<Identity: IMSVidVideoRendererDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdb: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRendererDevices_Impl::Add(this, core::mem::transmute_copy(&pdb)).into()
            }
        }
        unsafe extern "system" fn Remove<Identity: IMSVidVideoRendererDevices_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, v: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRendererDevices_Impl::Remove(this, core::mem::transmute(&v)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Count: Count::<Identity, OFFSET>,
            _NewEnum: _NewEnum::<Identity, OFFSET>,
            get_Item: get_Item::<Identity, OFFSET>,
            Add: Add::<Identity, OFFSET>,
            Remove: Remove::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidVideoRendererDevices as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidVideoRendererDevices {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidVideoRendererEvent, IMSVidVideoRendererEvent_Vtbl, 0x37b03545_a4c8_11d2_b634_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidVideoRendererEvent {
    type Target = IMSVidOutputDeviceEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidVideoRendererEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent, IMSVidOutputDeviceEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidVideoRendererEvent {
    pub unsafe fn OverlayUnavailable(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).OverlayUnavailable)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidVideoRendererEvent_Vtbl {
    pub base__: IMSVidOutputDeviceEvent_Vtbl,
    pub OverlayUnavailable: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidVideoRendererEvent_Impl: IMSVidOutputDeviceEvent_Impl {
    fn OverlayUnavailable(&self) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidVideoRendererEvent_Vtbl {
    pub const fn new<Identity: IMSVidVideoRendererEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn OverlayUnavailable<Identity: IMSVidVideoRendererEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRendererEvent_Impl::OverlayUnavailable(this).into()
            }
        }
        Self { base__: IMSVidOutputDeviceEvent_Vtbl::new::<Identity, OFFSET>(), OverlayUnavailable: OverlayUnavailable::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidVideoRendererEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidOutputDeviceEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidVideoRendererEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidVideoRendererEvent2, IMSVidVideoRendererEvent2_Vtbl, 0x7145ed66_4730_4fdb_8a53_fde7508d3e5e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidVideoRendererEvent2 {
    type Target = IMSVidOutputDeviceEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidVideoRendererEvent2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent, IMSVidOutputDeviceEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidVideoRendererEvent2 {
    pub unsafe fn OverlayUnavailable(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).OverlayUnavailable)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidVideoRendererEvent2_Vtbl {
    pub base__: IMSVidOutputDeviceEvent_Vtbl,
    pub OverlayUnavailable: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidVideoRendererEvent2_Impl: IMSVidOutputDeviceEvent_Impl {
    fn OverlayUnavailable(&self) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidVideoRendererEvent2_Vtbl {
    pub const fn new<Identity: IMSVidVideoRendererEvent2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn OverlayUnavailable<Identity: IMSVidVideoRendererEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidVideoRendererEvent2_Impl::OverlayUnavailable(this).into()
            }
        }
        Self { base__: IMSVidOutputDeviceEvent_Vtbl::new::<Identity, OFFSET>(), OverlayUnavailable: OverlayUnavailable::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidVideoRendererEvent2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidOutputDeviceEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidVideoRendererEvent2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidWebDVD, IMSVidWebDVD_Vtbl, 0xcf45f88b_ac56_4ee2_a73a_ed04e2885d3c);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidWebDVD {
    type Target = IMSVidPlayback;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidWebDVD, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidInputDevice, IMSVidPlayback);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidWebDVD {
    pub unsafe fn OnDVDEvent(&self, levent: i32, lparam1: isize, lparam2: isize) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).OnDVDEvent)(windows_core::Interface::as_raw(self), levent, lparam1, lparam2).ok() }
    }
    pub unsafe fn PlayTitle(&self, ltitle: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayTitle)(windows_core::Interface::as_raw(self), ltitle).ok() }
    }
    pub unsafe fn PlayChapterInTitle(&self, ltitle: i32, lchapter: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayChapterInTitle)(windows_core::Interface::as_raw(self), ltitle, lchapter).ok() }
    }
    pub unsafe fn PlayChapter(&self, lchapter: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayChapter)(windows_core::Interface::as_raw(self), lchapter).ok() }
    }
    pub unsafe fn PlayChaptersAutoStop(&self, ltitle: i32, lstrchapter: i32, lchaptercount: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayChaptersAutoStop)(windows_core::Interface::as_raw(self), ltitle, lstrchapter, lchaptercount).ok() }
    }
    pub unsafe fn PlayAtTime(&self, strtime: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayAtTime)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(strtime)).ok() }
    }
    pub unsafe fn PlayAtTimeInTitle(&self, ltitle: i32, strtime: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayAtTimeInTitle)(windows_core::Interface::as_raw(self), ltitle, core::mem::transmute_copy(strtime)).ok() }
    }
    pub unsafe fn PlayPeriodInTitleAutoStop(&self, ltitle: i32, strstarttime: &windows_core::BSTR, strendtime: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayPeriodInTitleAutoStop)(windows_core::Interface::as_raw(self), ltitle, core::mem::transmute_copy(strstarttime), core::mem::transmute_copy(strendtime)).ok() }
    }
    pub unsafe fn ReplayChapter(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ReplayChapter)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn PlayPrevChapter(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayPrevChapter)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn PlayNextChapter(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayNextChapter)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn StillOff(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).StillOff)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn get_AudioLanguage(&self, lstream: i32, fformat: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_AudioLanguage)(windows_core::Interface::as_raw(self), lstream, fformat, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn ShowMenu(&self, menuid: DVDMenuIDConstants) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ShowMenu)(windows_core::Interface::as_raw(self), menuid).ok() }
    }
    pub unsafe fn Resume(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Resume)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn ReturnFromSubmenu(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ReturnFromSubmenu)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn ButtonsAvailable(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ButtonsAvailable)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn CurrentButton(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CurrentButton)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SelectAndActivateButton(&self, lbutton: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SelectAndActivateButton)(windows_core::Interface::as_raw(self), lbutton).ok() }
    }
    pub unsafe fn ActivateButton(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ActivateButton)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn SelectRightButton(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SelectRightButton)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn SelectLeftButton(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SelectLeftButton)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn SelectLowerButton(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SelectLowerButton)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn SelectUpperButton(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SelectUpperButton)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn ActivateAtPosition(&self, xpos: i32, ypos: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ActivateAtPosition)(windows_core::Interface::as_raw(self), xpos, ypos).ok() }
    }
    pub unsafe fn SelectAtPosition(&self, xpos: i32, ypos: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SelectAtPosition)(windows_core::Interface::as_raw(self), xpos, ypos).ok() }
    }
    pub unsafe fn get_ButtonAtPosition(&self, xpos: i32, ypos: i32) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_ButtonAtPosition)(windows_core::Interface::as_raw(self), xpos, ypos, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn get_NumberOfChapters(&self, ltitle: i32) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_NumberOfChapters)(windows_core::Interface::as_raw(self), ltitle, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn TotalTitleTime(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TotalTitleTime)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn TitlesAvailable(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TitlesAvailable)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn VolumesAvailable(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).VolumesAvailable)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn CurrentVolume(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CurrentVolume)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn CurrentDiscSide(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CurrentDiscSide)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn CurrentDomain(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CurrentDomain)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn CurrentChapter(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CurrentChapter)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn CurrentTitle(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CurrentTitle)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn CurrentTime(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CurrentTime)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn DVDTimeCode2bstr(&self, timecode: i32) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DVDTimeCode2bstr)(windows_core::Interface::as_raw(self), timecode, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn DVDDirectory(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DVDDirectory)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetDVDDirectory(&self, newval: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDVDDirectory)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(newval)).ok() }
    }
    pub unsafe fn IsSubpictureStreamEnabled(&self, lstream: i32) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).IsSubpictureStreamEnabled)(windows_core::Interface::as_raw(self), lstream, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn IsAudioStreamEnabled(&self, lstream: i32) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).IsAudioStreamEnabled)(windows_core::Interface::as_raw(self), lstream, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn CurrentSubpictureStream(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CurrentSubpictureStream)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetCurrentSubpictureStream(&self, newval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCurrentSubpictureStream)(windows_core::Interface::as_raw(self), newval).ok() }
    }
    pub unsafe fn get_SubpictureLanguage(&self, lstream: i32) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_SubpictureLanguage)(windows_core::Interface::as_raw(self), lstream, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn CurrentAudioStream(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CurrentAudioStream)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetCurrentAudioStream(&self, newval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCurrentAudioStream)(windows_core::Interface::as_raw(self), newval).ok() }
    }
    pub unsafe fn AudioStreamsAvailable(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AudioStreamsAvailable)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn AnglesAvailable(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).AnglesAvailable)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn CurrentAngle(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CurrentAngle)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetCurrentAngle(&self, newval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCurrentAngle)(windows_core::Interface::as_raw(self), newval).ok() }
    }
    pub unsafe fn SubpictureStreamsAvailable(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SubpictureStreamsAvailable)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SubpictureOn(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SubpictureOn)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetSubpictureOn(&self, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSubpictureOn)(windows_core::Interface::as_raw(self), newval).ok() }
    }
    pub unsafe fn DVDUniqueID(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DVDUniqueID)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn AcceptParentalLevelChange(&self, faccept: super::super::super::Foundation::VARIANT_BOOL, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AcceptParentalLevelChange)(windows_core::Interface::as_raw(self), faccept, core::mem::transmute_copy(strusername), core::mem::transmute_copy(strpassword)).ok() }
    }
    pub unsafe fn NotifyParentalLevelChange(&self, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).NotifyParentalLevelChange)(windows_core::Interface::as_raw(self), newval).ok() }
    }
    pub unsafe fn SelectParentalCountry(&self, lcountry: i32, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SelectParentalCountry)(windows_core::Interface::as_raw(self), lcountry, core::mem::transmute_copy(strusername), core::mem::transmute_copy(strpassword)).ok() }
    }
    pub unsafe fn SelectParentalLevel(&self, lparentallevel: i32, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SelectParentalLevel)(windows_core::Interface::as_raw(self), lparentallevel, core::mem::transmute_copy(strusername), core::mem::transmute_copy(strpassword)).ok() }
    }
    pub unsafe fn get_TitleParentalLevels(&self, ltitle: i32) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_TitleParentalLevels)(windows_core::Interface::as_raw(self), ltitle, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn PlayerParentalCountry(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).PlayerParentalCountry)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn PlayerParentalLevel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).PlayerParentalLevel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Eject(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Eject)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn UOPValid(&self, luop: i32) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).UOPValid)(windows_core::Interface::as_raw(self), luop, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn get_SPRM(&self, lindex: i32) -> windows_core::Result<i16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_SPRM)(windows_core::Interface::as_raw(self), lindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn get_GPRM(&self, lindex: i32) -> windows_core::Result<i16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_GPRM)(windows_core::Interface::as_raw(self), lindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn put_GPRM(&self, lindex: i32, svalue: i16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).put_GPRM)(windows_core::Interface::as_raw(self), lindex, svalue).ok() }
    }
    pub unsafe fn get_DVDTextStringType(&self, llangindex: i32, lstringindex: i32) -> windows_core::Result<DVDTextStringType> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_DVDTextStringType)(windows_core::Interface::as_raw(self), llangindex, lstringindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn get_DVDTextString(&self, llangindex: i32, lstringindex: i32) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_DVDTextString)(windows_core::Interface::as_raw(self), llangindex, lstringindex, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn get_DVDTextNumberOfStrings(&self, llangindex: i32) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_DVDTextNumberOfStrings)(windows_core::Interface::as_raw(self), llangindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn DVDTextNumberOfLanguages(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DVDTextNumberOfLanguages)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn get_DVDTextLanguageLCID(&self, llangindex: i32) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_DVDTextLanguageLCID)(windows_core::Interface::as_raw(self), llangindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn RegionChange(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegionChange)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn DVDAdm(&self) -> windows_core::Result<super::super::super::System::Com::IDispatch> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DVDAdm)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn DeleteBookmark(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).DeleteBookmark)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn RestoreBookmark(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RestoreBookmark)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn SaveBookmark(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SaveBookmark)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn SelectDefaultAudioLanguage(&self, lang: i32, ext: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SelectDefaultAudioLanguage)(windows_core::Interface::as_raw(self), lang, ext).ok() }
    }
    pub unsafe fn SelectDefaultSubpictureLanguage(&self, lang: i32, ext: DVDSPExt) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SelectDefaultSubpictureLanguage)(windows_core::Interface::as_raw(self), lang, ext).ok() }
    }
    pub unsafe fn PreferredSubpictureStream(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).PreferredSubpictureStream)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn DefaultMenuLanguage(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DefaultMenuLanguage)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetDefaultMenuLanguage(&self, lang: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDefaultMenuLanguage)(windows_core::Interface::as_raw(self), lang).ok() }
    }
    pub unsafe fn DefaultSubpictureLanguage(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DefaultSubpictureLanguage)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn DefaultAudioLanguage(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DefaultAudioLanguage)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn DefaultSubpictureLanguageExt(&self) -> windows_core::Result<DVDSPExt> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DefaultSubpictureLanguageExt)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn DefaultAudioLanguageExt(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DefaultAudioLanguageExt)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn get_LanguageFromLCID(&self, lcid: i32) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_LanguageFromLCID)(windows_core::Interface::as_raw(self), lcid, &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn KaraokeAudioPresentationMode(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).KaraokeAudioPresentationMode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetKaraokeAudioPresentationMode(&self, newval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetKaraokeAudioPresentationMode)(windows_core::Interface::as_raw(self), newval).ok() }
    }
    pub unsafe fn get_KaraokeChannelContent(&self, lstream: i32, lchan: i32) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_KaraokeChannelContent)(windows_core::Interface::as_raw(self), lstream, lchan, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn get_KaraokeChannelAssignment(&self, lstream: i32) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_KaraokeChannelAssignment)(windows_core::Interface::as_raw(self), lstream, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn RestorePreferredSettings(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RestorePreferredSettings)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn get_ButtonRect(&self, lbutton: i32) -> windows_core::Result<IMSVidRect> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_ButtonRect)(windows_core::Interface::as_raw(self), lbutton, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn DVDScreenInMouseCoordinates(&self) -> windows_core::Result<IMSVidRect> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DVDScreenInMouseCoordinates)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetDVDScreenInMouseCoordinates<P0>(&self, prect: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IMSVidRect>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetDVDScreenInMouseCoordinates)(windows_core::Interface::as_raw(self), prect.param().abi()).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidWebDVD_Vtbl {
    pub base__: IMSVidPlayback_Vtbl,
    pub OnDVDEvent: unsafe extern "system" fn(*mut core::ffi::c_void, i32, isize, isize) -> windows_core::HRESULT,
    pub PlayTitle: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub PlayChapterInTitle: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32) -> windows_core::HRESULT,
    pub PlayChapter: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub PlayChaptersAutoStop: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32, i32) -> windows_core::HRESULT,
    pub PlayAtTime: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub PlayAtTimeInTitle: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub PlayPeriodInTitleAutoStop: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ReplayChapter: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub PlayPrevChapter: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub PlayNextChapter: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub StillOff: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub get_AudioLanguage: unsafe extern "system" fn(*mut core::ffi::c_void, i32, super::super::super::Foundation::VARIANT_BOOL, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ShowMenu: unsafe extern "system" fn(*mut core::ffi::c_void, DVDMenuIDConstants) -> windows_core::HRESULT,
    pub Resume: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ReturnFromSubmenu: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ButtonsAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub CurrentButton: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SelectAndActivateButton: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub ActivateButton: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SelectRightButton: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SelectLeftButton: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SelectLowerButton: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SelectUpperButton: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ActivateAtPosition: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32) -> windows_core::HRESULT,
    pub SelectAtPosition: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32) -> windows_core::HRESULT,
    pub get_ButtonAtPosition: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32, *mut i32) -> windows_core::HRESULT,
    pub get_NumberOfChapters: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut i32) -> windows_core::HRESULT,
    pub TotalTitleTime: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub TitlesAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub VolumesAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub CurrentVolume: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub CurrentDiscSide: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub CurrentDomain: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub CurrentChapter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub CurrentTitle: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub CurrentTime: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DVDTimeCode2bstr: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DVDDirectory: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetDVDDirectory: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub IsSubpictureStreamEnabled: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub IsAudioStreamEnabled: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub CurrentSubpictureStream: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetCurrentSubpictureStream: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub get_SubpictureLanguage: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub CurrentAudioStream: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetCurrentAudioStream: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub AudioStreamsAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub AnglesAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub CurrentAngle: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetCurrentAngle: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub SubpictureStreamsAvailable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SubpictureOn: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetSubpictureOn: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub DVDUniqueID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub AcceptParentalLevelChange: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub NotifyParentalLevelChange: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SelectParentalCountry: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SelectParentalLevel: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub get_TitleParentalLevels: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut i32) -> windows_core::HRESULT,
    pub PlayerParentalCountry: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub PlayerParentalLevel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub Eject: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub UOPValid: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub get_SPRM: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut i16) -> windows_core::HRESULT,
    pub get_GPRM: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut i16) -> windows_core::HRESULT,
    pub put_GPRM: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i16) -> windows_core::HRESULT,
    pub get_DVDTextStringType: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32, *mut DVDTextStringType) -> windows_core::HRESULT,
    pub get_DVDTextString: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub get_DVDTextNumberOfStrings: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut i32) -> windows_core::HRESULT,
    pub DVDTextNumberOfLanguages: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub get_DVDTextLanguageLCID: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut i32) -> windows_core::HRESULT,
    pub RegionChange: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DVDAdm: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DeleteBookmark: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RestoreBookmark: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SaveBookmark: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SelectDefaultAudioLanguage: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32) -> windows_core::HRESULT,
    pub SelectDefaultSubpictureLanguage: unsafe extern "system" fn(*mut core::ffi::c_void, i32, DVDSPExt) -> windows_core::HRESULT,
    pub PreferredSubpictureStream: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub DefaultMenuLanguage: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetDefaultMenuLanguage: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub DefaultSubpictureLanguage: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub DefaultAudioLanguage: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub DefaultSubpictureLanguageExt: unsafe extern "system" fn(*mut core::ffi::c_void, *mut DVDSPExt) -> windows_core::HRESULT,
    pub DefaultAudioLanguageExt: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub get_LanguageFromLCID: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub KaraokeAudioPresentationMode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetKaraokeAudioPresentationMode: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub get_KaraokeChannelContent: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32, *mut i32) -> windows_core::HRESULT,
    pub get_KaraokeChannelAssignment: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut i32) -> windows_core::HRESULT,
    pub RestorePreferredSettings: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub get_ButtonRect: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DVDScreenInMouseCoordinates: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetDVDScreenInMouseCoordinates: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidWebDVD_Impl: IMSVidPlayback_Impl {
    fn OnDVDEvent(&self, levent: i32, lparam1: isize, lparam2: isize) -> windows_core::Result<()>;
    fn PlayTitle(&self, ltitle: i32) -> windows_core::Result<()>;
    fn PlayChapterInTitle(&self, ltitle: i32, lchapter: i32) -> windows_core::Result<()>;
    fn PlayChapter(&self, lchapter: i32) -> windows_core::Result<()>;
    fn PlayChaptersAutoStop(&self, ltitle: i32, lstrchapter: i32, lchaptercount: i32) -> windows_core::Result<()>;
    fn PlayAtTime(&self, strtime: &windows_core::BSTR) -> windows_core::Result<()>;
    fn PlayAtTimeInTitle(&self, ltitle: i32, strtime: &windows_core::BSTR) -> windows_core::Result<()>;
    fn PlayPeriodInTitleAutoStop(&self, ltitle: i32, strstarttime: &windows_core::BSTR, strendtime: &windows_core::BSTR) -> windows_core::Result<()>;
    fn ReplayChapter(&self) -> windows_core::Result<()>;
    fn PlayPrevChapter(&self) -> windows_core::Result<()>;
    fn PlayNextChapter(&self) -> windows_core::Result<()>;
    fn StillOff(&self) -> windows_core::Result<()>;
    fn get_AudioLanguage(&self, lstream: i32, fformat: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<windows_core::BSTR>;
    fn ShowMenu(&self, menuid: DVDMenuIDConstants) -> windows_core::Result<()>;
    fn Resume(&self) -> windows_core::Result<()>;
    fn ReturnFromSubmenu(&self) -> windows_core::Result<()>;
    fn ButtonsAvailable(&self) -> windows_core::Result<i32>;
    fn CurrentButton(&self) -> windows_core::Result<i32>;
    fn SelectAndActivateButton(&self, lbutton: i32) -> windows_core::Result<()>;
    fn ActivateButton(&self) -> windows_core::Result<()>;
    fn SelectRightButton(&self) -> windows_core::Result<()>;
    fn SelectLeftButton(&self) -> windows_core::Result<()>;
    fn SelectLowerButton(&self) -> windows_core::Result<()>;
    fn SelectUpperButton(&self) -> windows_core::Result<()>;
    fn ActivateAtPosition(&self, xpos: i32, ypos: i32) -> windows_core::Result<()>;
    fn SelectAtPosition(&self, xpos: i32, ypos: i32) -> windows_core::Result<()>;
    fn get_ButtonAtPosition(&self, xpos: i32, ypos: i32) -> windows_core::Result<i32>;
    fn get_NumberOfChapters(&self, ltitle: i32) -> windows_core::Result<i32>;
    fn TotalTitleTime(&self) -> windows_core::Result<windows_core::BSTR>;
    fn TitlesAvailable(&self) -> windows_core::Result<i32>;
    fn VolumesAvailable(&self) -> windows_core::Result<i32>;
    fn CurrentVolume(&self) -> windows_core::Result<i32>;
    fn CurrentDiscSide(&self) -> windows_core::Result<i32>;
    fn CurrentDomain(&self) -> windows_core::Result<i32>;
    fn CurrentChapter(&self) -> windows_core::Result<i32>;
    fn CurrentTitle(&self) -> windows_core::Result<i32>;
    fn CurrentTime(&self) -> windows_core::Result<windows_core::BSTR>;
    fn DVDTimeCode2bstr(&self, timecode: i32) -> windows_core::Result<windows_core::BSTR>;
    fn DVDDirectory(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetDVDDirectory(&self, newval: &windows_core::BSTR) -> windows_core::Result<()>;
    fn IsSubpictureStreamEnabled(&self, lstream: i32) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn IsAudioStreamEnabled(&self, lstream: i32) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn CurrentSubpictureStream(&self) -> windows_core::Result<i32>;
    fn SetCurrentSubpictureStream(&self, newval: i32) -> windows_core::Result<()>;
    fn get_SubpictureLanguage(&self, lstream: i32) -> windows_core::Result<windows_core::BSTR>;
    fn CurrentAudioStream(&self) -> windows_core::Result<i32>;
    fn SetCurrentAudioStream(&self, newval: i32) -> windows_core::Result<()>;
    fn AudioStreamsAvailable(&self) -> windows_core::Result<i32>;
    fn AnglesAvailable(&self) -> windows_core::Result<i32>;
    fn CurrentAngle(&self) -> windows_core::Result<i32>;
    fn SetCurrentAngle(&self, newval: i32) -> windows_core::Result<()>;
    fn SubpictureStreamsAvailable(&self) -> windows_core::Result<i32>;
    fn SubpictureOn(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetSubpictureOn(&self, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn DVDUniqueID(&self) -> windows_core::Result<windows_core::BSTR>;
    fn AcceptParentalLevelChange(&self, faccept: super::super::super::Foundation::VARIANT_BOOL, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<()>;
    fn NotifyParentalLevelChange(&self, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn SelectParentalCountry(&self, lcountry: i32, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<()>;
    fn SelectParentalLevel(&self, lparentallevel: i32, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<()>;
    fn get_TitleParentalLevels(&self, ltitle: i32) -> windows_core::Result<i32>;
    fn PlayerParentalCountry(&self) -> windows_core::Result<i32>;
    fn PlayerParentalLevel(&self) -> windows_core::Result<i32>;
    fn Eject(&self) -> windows_core::Result<()>;
    fn UOPValid(&self, luop: i32) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn get_SPRM(&self, lindex: i32) -> windows_core::Result<i16>;
    fn get_GPRM(&self, lindex: i32) -> windows_core::Result<i16>;
    fn put_GPRM(&self, lindex: i32, svalue: i16) -> windows_core::Result<()>;
    fn get_DVDTextStringType(&self, llangindex: i32, lstringindex: i32) -> windows_core::Result<DVDTextStringType>;
    fn get_DVDTextString(&self, llangindex: i32, lstringindex: i32) -> windows_core::Result<windows_core::BSTR>;
    fn get_DVDTextNumberOfStrings(&self, llangindex: i32) -> windows_core::Result<i32>;
    fn DVDTextNumberOfLanguages(&self) -> windows_core::Result<i32>;
    fn get_DVDTextLanguageLCID(&self, llangindex: i32) -> windows_core::Result<i32>;
    fn RegionChange(&self) -> windows_core::Result<()>;
    fn DVDAdm(&self) -> windows_core::Result<super::super::super::System::Com::IDispatch>;
    fn DeleteBookmark(&self) -> windows_core::Result<()>;
    fn RestoreBookmark(&self) -> windows_core::Result<()>;
    fn SaveBookmark(&self) -> windows_core::Result<()>;
    fn SelectDefaultAudioLanguage(&self, lang: i32, ext: i32) -> windows_core::Result<()>;
    fn SelectDefaultSubpictureLanguage(&self, lang: i32, ext: DVDSPExt) -> windows_core::Result<()>;
    fn PreferredSubpictureStream(&self) -> windows_core::Result<i32>;
    fn DefaultMenuLanguage(&self) -> windows_core::Result<i32>;
    fn SetDefaultMenuLanguage(&self, lang: i32) -> windows_core::Result<()>;
    fn DefaultSubpictureLanguage(&self) -> windows_core::Result<i32>;
    fn DefaultAudioLanguage(&self) -> windows_core::Result<i32>;
    fn DefaultSubpictureLanguageExt(&self) -> windows_core::Result<DVDSPExt>;
    fn DefaultAudioLanguageExt(&self) -> windows_core::Result<i32>;
    fn get_LanguageFromLCID(&self, lcid: i32) -> windows_core::Result<windows_core::BSTR>;
    fn KaraokeAudioPresentationMode(&self) -> windows_core::Result<i32>;
    fn SetKaraokeAudioPresentationMode(&self, newval: i32) -> windows_core::Result<()>;
    fn get_KaraokeChannelContent(&self, lstream: i32, lchan: i32) -> windows_core::Result<i32>;
    fn get_KaraokeChannelAssignment(&self, lstream: i32) -> windows_core::Result<i32>;
    fn RestorePreferredSettings(&self) -> windows_core::Result<()>;
    fn get_ButtonRect(&self, lbutton: i32) -> windows_core::Result<IMSVidRect>;
    fn DVDScreenInMouseCoordinates(&self) -> windows_core::Result<IMSVidRect>;
    fn SetDVDScreenInMouseCoordinates(&self, prect: windows_core::Ref<'_, IMSVidRect>) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidWebDVD_Vtbl {
    pub const fn new<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn OnDVDEvent<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, levent: i32, lparam1: isize, lparam2: isize) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::OnDVDEvent(this, core::mem::transmute_copy(&levent), core::mem::transmute_copy(&lparam1), core::mem::transmute_copy(&lparam2)).into()
            }
        }
        unsafe extern "system" fn PlayTitle<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ltitle: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::PlayTitle(this, core::mem::transmute_copy(&ltitle)).into()
            }
        }
        unsafe extern "system" fn PlayChapterInTitle<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ltitle: i32, lchapter: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::PlayChapterInTitle(this, core::mem::transmute_copy(&ltitle), core::mem::transmute_copy(&lchapter)).into()
            }
        }
        unsafe extern "system" fn PlayChapter<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lchapter: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::PlayChapter(this, core::mem::transmute_copy(&lchapter)).into()
            }
        }
        unsafe extern "system" fn PlayChaptersAutoStop<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ltitle: i32, lstrchapter: i32, lchaptercount: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::PlayChaptersAutoStop(this, core::mem::transmute_copy(&ltitle), core::mem::transmute_copy(&lstrchapter), core::mem::transmute_copy(&lchaptercount)).into()
            }
        }
        unsafe extern "system" fn PlayAtTime<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, strtime: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::PlayAtTime(this, core::mem::transmute(&strtime)).into()
            }
        }
        unsafe extern "system" fn PlayAtTimeInTitle<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ltitle: i32, strtime: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::PlayAtTimeInTitle(this, core::mem::transmute_copy(&ltitle), core::mem::transmute(&strtime)).into()
            }
        }
        unsafe extern "system" fn PlayPeriodInTitleAutoStop<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ltitle: i32, strstarttime: *mut core::ffi::c_void, strendtime: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::PlayPeriodInTitleAutoStop(this, core::mem::transmute_copy(&ltitle), core::mem::transmute(&strstarttime), core::mem::transmute(&strendtime)).into()
            }
        }
        unsafe extern "system" fn ReplayChapter<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::ReplayChapter(this).into()
            }
        }
        unsafe extern "system" fn PlayPrevChapter<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::PlayPrevChapter(this).into()
            }
        }
        unsafe extern "system" fn PlayNextChapter<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::PlayNextChapter(this).into()
            }
        }
        unsafe extern "system" fn StillOff<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::StillOff(this).into()
            }
        }
        unsafe extern "system" fn get_AudioLanguage<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lstream: i32, fformat: super::super::super::Foundation::VARIANT_BOOL, straudiolang: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_AudioLanguage(this, core::mem::transmute_copy(&lstream), core::mem::transmute_copy(&fformat)) {
                    Ok(ok__) => {
                        straudiolang.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn ShowMenu<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, menuid: DVDMenuIDConstants) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::ShowMenu(this, core::mem::transmute_copy(&menuid)).into()
            }
        }
        unsafe extern "system" fn Resume<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::Resume(this).into()
            }
        }
        unsafe extern "system" fn ReturnFromSubmenu<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::ReturnFromSubmenu(this).into()
            }
        }
        unsafe extern "system" fn ButtonsAvailable<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::ButtonsAvailable(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CurrentButton<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::CurrentButton(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SelectAndActivateButton<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lbutton: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SelectAndActivateButton(this, core::mem::transmute_copy(&lbutton)).into()
            }
        }
        unsafe extern "system" fn ActivateButton<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::ActivateButton(this).into()
            }
        }
        unsafe extern "system" fn SelectRightButton<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SelectRightButton(this).into()
            }
        }
        unsafe extern "system" fn SelectLeftButton<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SelectLeftButton(this).into()
            }
        }
        unsafe extern "system" fn SelectLowerButton<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SelectLowerButton(this).into()
            }
        }
        unsafe extern "system" fn SelectUpperButton<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SelectUpperButton(this).into()
            }
        }
        unsafe extern "system" fn ActivateAtPosition<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, xpos: i32, ypos: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::ActivateAtPosition(this, core::mem::transmute_copy(&xpos), core::mem::transmute_copy(&ypos)).into()
            }
        }
        unsafe extern "system" fn SelectAtPosition<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, xpos: i32, ypos: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SelectAtPosition(this, core::mem::transmute_copy(&xpos), core::mem::transmute_copy(&ypos)).into()
            }
        }
        unsafe extern "system" fn get_ButtonAtPosition<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, xpos: i32, ypos: i32, plbutton: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_ButtonAtPosition(this, core::mem::transmute_copy(&xpos), core::mem::transmute_copy(&ypos)) {
                    Ok(ok__) => {
                        plbutton.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_NumberOfChapters<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ltitle: i32, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_NumberOfChapters(this, core::mem::transmute_copy(&ltitle)) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn TotalTitleTime<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::TotalTitleTime(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn TitlesAvailable<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::TitlesAvailable(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn VolumesAvailable<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::VolumesAvailable(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CurrentVolume<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::CurrentVolume(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CurrentDiscSide<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::CurrentDiscSide(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CurrentDomain<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::CurrentDomain(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CurrentChapter<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::CurrentChapter(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CurrentTitle<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::CurrentTitle(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CurrentTime<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::CurrentTime(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DVDTimeCode2bstr<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, timecode: i32, ptimestr: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::DVDTimeCode2bstr(this, core::mem::transmute_copy(&timecode)) {
                    Ok(ok__) => {
                        ptimestr.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DVDDirectory<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::DVDDirectory(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDVDDirectory<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SetDVDDirectory(this, core::mem::transmute(&newval)).into()
            }
        }
        unsafe extern "system" fn IsSubpictureStreamEnabled<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lstream: i32, fenabled: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::IsSubpictureStreamEnabled(this, core::mem::transmute_copy(&lstream)) {
                    Ok(ok__) => {
                        fenabled.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn IsAudioStreamEnabled<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lstream: i32, fenabled: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::IsAudioStreamEnabled(this, core::mem::transmute_copy(&lstream)) {
                    Ok(ok__) => {
                        fenabled.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CurrentSubpictureStream<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::CurrentSubpictureStream(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCurrentSubpictureStream<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SetCurrentSubpictureStream(this, core::mem::transmute_copy(&newval)).into()
            }
        }
        unsafe extern "system" fn get_SubpictureLanguage<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lstream: i32, strlanguage: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_SubpictureLanguage(this, core::mem::transmute_copy(&lstream)) {
                    Ok(ok__) => {
                        strlanguage.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CurrentAudioStream<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::CurrentAudioStream(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCurrentAudioStream<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SetCurrentAudioStream(this, core::mem::transmute_copy(&newval)).into()
            }
        }
        unsafe extern "system" fn AudioStreamsAvailable<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::AudioStreamsAvailable(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn AnglesAvailable<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::AnglesAvailable(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn CurrentAngle<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::CurrentAngle(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCurrentAngle<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SetCurrentAngle(this, core::mem::transmute_copy(&newval)).into()
            }
        }
        unsafe extern "system" fn SubpictureStreamsAvailable<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::SubpictureStreamsAvailable(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SubpictureOn<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::SubpictureOn(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetSubpictureOn<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SetSubpictureOn(this, core::mem::transmute_copy(&newval)).into()
            }
        }
        unsafe extern "system" fn DVDUniqueID<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::DVDUniqueID(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn AcceptParentalLevelChange<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, faccept: super::super::super::Foundation::VARIANT_BOOL, strusername: *mut core::ffi::c_void, strpassword: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::AcceptParentalLevelChange(this, core::mem::transmute_copy(&faccept), core::mem::transmute(&strusername), core::mem::transmute(&strpassword)).into()
            }
        }
        unsafe extern "system" fn NotifyParentalLevelChange<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::NotifyParentalLevelChange(this, core::mem::transmute_copy(&newval)).into()
            }
        }
        unsafe extern "system" fn SelectParentalCountry<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcountry: i32, strusername: *mut core::ffi::c_void, strpassword: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SelectParentalCountry(this, core::mem::transmute_copy(&lcountry), core::mem::transmute(&strusername), core::mem::transmute(&strpassword)).into()
            }
        }
        unsafe extern "system" fn SelectParentalLevel<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lparentallevel: i32, strusername: *mut core::ffi::c_void, strpassword: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SelectParentalLevel(this, core::mem::transmute_copy(&lparentallevel), core::mem::transmute(&strusername), core::mem::transmute(&strpassword)).into()
            }
        }
        unsafe extern "system" fn get_TitleParentalLevels<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ltitle: i32, plparentallevels: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_TitleParentalLevels(this, core::mem::transmute_copy(&ltitle)) {
                    Ok(ok__) => {
                        plparentallevels.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn PlayerParentalCountry<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, plcountrycode: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::PlayerParentalCountry(this) {
                    Ok(ok__) => {
                        plcountrycode.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn PlayerParentalLevel<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, plparentallevel: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::PlayerParentalLevel(this) {
                    Ok(ok__) => {
                        plparentallevel.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Eject<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::Eject(this).into()
            }
        }
        unsafe extern "system" fn UOPValid<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, luop: i32, pfvalid: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::UOPValid(this, core::mem::transmute_copy(&luop)) {
                    Ok(ok__) => {
                        pfvalid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_SPRM<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lindex: i32, pssprm: *mut i16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_SPRM(this, core::mem::transmute_copy(&lindex)) {
                    Ok(ok__) => {
                        pssprm.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_GPRM<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lindex: i32, pssprm: *mut i16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_GPRM(this, core::mem::transmute_copy(&lindex)) {
                    Ok(ok__) => {
                        pssprm.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn put_GPRM<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lindex: i32, svalue: i16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::put_GPRM(this, core::mem::transmute_copy(&lindex), core::mem::transmute_copy(&svalue)).into()
            }
        }
        unsafe extern "system" fn get_DVDTextStringType<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, llangindex: i32, lstringindex: i32, ptype: *mut DVDTextStringType) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_DVDTextStringType(this, core::mem::transmute_copy(&llangindex), core::mem::transmute_copy(&lstringindex)) {
                    Ok(ok__) => {
                        ptype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_DVDTextString<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, llangindex: i32, lstringindex: i32, pstrtext: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_DVDTextString(this, core::mem::transmute_copy(&llangindex), core::mem::transmute_copy(&lstringindex)) {
                    Ok(ok__) => {
                        pstrtext.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_DVDTextNumberOfStrings<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, llangindex: i32, plnumofstrings: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_DVDTextNumberOfStrings(this, core::mem::transmute_copy(&llangindex)) {
                    Ok(ok__) => {
                        plnumofstrings.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DVDTextNumberOfLanguages<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, plnumoflangs: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::DVDTextNumberOfLanguages(this) {
                    Ok(ok__) => {
                        plnumoflangs.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_DVDTextLanguageLCID<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, llangindex: i32, lcid: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_DVDTextLanguageLCID(this, core::mem::transmute_copy(&llangindex)) {
                    Ok(ok__) => {
                        lcid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RegionChange<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::RegionChange(this).into()
            }
        }
        unsafe extern "system" fn DVDAdm<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::DVDAdm(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DeleteBookmark<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::DeleteBookmark(this).into()
            }
        }
        unsafe extern "system" fn RestoreBookmark<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::RestoreBookmark(this).into()
            }
        }
        unsafe extern "system" fn SaveBookmark<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SaveBookmark(this).into()
            }
        }
        unsafe extern "system" fn SelectDefaultAudioLanguage<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lang: i32, ext: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SelectDefaultAudioLanguage(this, core::mem::transmute_copy(&lang), core::mem::transmute_copy(&ext)).into()
            }
        }
        unsafe extern "system" fn SelectDefaultSubpictureLanguage<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lang: i32, ext: DVDSPExt) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SelectDefaultSubpictureLanguage(this, core::mem::transmute_copy(&lang), core::mem::transmute_copy(&ext)).into()
            }
        }
        unsafe extern "system" fn PreferredSubpictureStream<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::PreferredSubpictureStream(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DefaultMenuLanguage<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lang: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::DefaultMenuLanguage(this) {
                    Ok(ok__) => {
                        lang.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDefaultMenuLanguage<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lang: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SetDefaultMenuLanguage(this, core::mem::transmute_copy(&lang)).into()
            }
        }
        unsafe extern "system" fn DefaultSubpictureLanguage<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lang: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::DefaultSubpictureLanguage(this) {
                    Ok(ok__) => {
                        lang.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DefaultAudioLanguage<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lang: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::DefaultAudioLanguage(this) {
                    Ok(ok__) => {
                        lang.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DefaultSubpictureLanguageExt<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ext: *mut DVDSPExt) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::DefaultSubpictureLanguageExt(this) {
                    Ok(ok__) => {
                        ext.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DefaultAudioLanguageExt<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ext: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::DefaultAudioLanguageExt(this) {
                    Ok(ok__) => {
                        ext.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_LanguageFromLCID<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcid: i32, lang: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_LanguageFromLCID(this, core::mem::transmute_copy(&lcid)) {
                    Ok(ok__) => {
                        lang.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn KaraokeAudioPresentationMode<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::KaraokeAudioPresentationMode(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetKaraokeAudioPresentationMode<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SetKaraokeAudioPresentationMode(this, core::mem::transmute_copy(&newval)).into()
            }
        }
        unsafe extern "system" fn get_KaraokeChannelContent<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lstream: i32, lchan: i32, lcontent: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_KaraokeChannelContent(this, core::mem::transmute_copy(&lstream), core::mem::transmute_copy(&lchan)) {
                    Ok(ok__) => {
                        lcontent.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_KaraokeChannelAssignment<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lstream: i32, lchannelassignment: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_KaraokeChannelAssignment(this, core::mem::transmute_copy(&lstream)) {
                    Ok(ok__) => {
                        lchannelassignment.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RestorePreferredSettings<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::RestorePreferredSettings(this).into()
            }
        }
        unsafe extern "system" fn get_ButtonRect<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lbutton: i32, prect: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::get_ButtonRect(this, core::mem::transmute_copy(&lbutton)) {
                    Ok(ok__) => {
                        prect.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DVDScreenInMouseCoordinates<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pprect: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVD_Impl::DVDScreenInMouseCoordinates(this) {
                    Ok(ok__) => {
                        pprect.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDVDScreenInMouseCoordinates<Identity: IMSVidWebDVD_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prect: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD_Impl::SetDVDScreenInMouseCoordinates(this, core::mem::transmute_copy(&prect)).into()
            }
        }
        Self {
            base__: IMSVidPlayback_Vtbl::new::<Identity, OFFSET>(),
            OnDVDEvent: OnDVDEvent::<Identity, OFFSET>,
            PlayTitle: PlayTitle::<Identity, OFFSET>,
            PlayChapterInTitle: PlayChapterInTitle::<Identity, OFFSET>,
            PlayChapter: PlayChapter::<Identity, OFFSET>,
            PlayChaptersAutoStop: PlayChaptersAutoStop::<Identity, OFFSET>,
            PlayAtTime: PlayAtTime::<Identity, OFFSET>,
            PlayAtTimeInTitle: PlayAtTimeInTitle::<Identity, OFFSET>,
            PlayPeriodInTitleAutoStop: PlayPeriodInTitleAutoStop::<Identity, OFFSET>,
            ReplayChapter: ReplayChapter::<Identity, OFFSET>,
            PlayPrevChapter: PlayPrevChapter::<Identity, OFFSET>,
            PlayNextChapter: PlayNextChapter::<Identity, OFFSET>,
            StillOff: StillOff::<Identity, OFFSET>,
            get_AudioLanguage: get_AudioLanguage::<Identity, OFFSET>,
            ShowMenu: ShowMenu::<Identity, OFFSET>,
            Resume: Resume::<Identity, OFFSET>,
            ReturnFromSubmenu: ReturnFromSubmenu::<Identity, OFFSET>,
            ButtonsAvailable: ButtonsAvailable::<Identity, OFFSET>,
            CurrentButton: CurrentButton::<Identity, OFFSET>,
            SelectAndActivateButton: SelectAndActivateButton::<Identity, OFFSET>,
            ActivateButton: ActivateButton::<Identity, OFFSET>,
            SelectRightButton: SelectRightButton::<Identity, OFFSET>,
            SelectLeftButton: SelectLeftButton::<Identity, OFFSET>,
            SelectLowerButton: SelectLowerButton::<Identity, OFFSET>,
            SelectUpperButton: SelectUpperButton::<Identity, OFFSET>,
            ActivateAtPosition: ActivateAtPosition::<Identity, OFFSET>,
            SelectAtPosition: SelectAtPosition::<Identity, OFFSET>,
            get_ButtonAtPosition: get_ButtonAtPosition::<Identity, OFFSET>,
            get_NumberOfChapters: get_NumberOfChapters::<Identity, OFFSET>,
            TotalTitleTime: TotalTitleTime::<Identity, OFFSET>,
            TitlesAvailable: TitlesAvailable::<Identity, OFFSET>,
            VolumesAvailable: VolumesAvailable::<Identity, OFFSET>,
            CurrentVolume: CurrentVolume::<Identity, OFFSET>,
            CurrentDiscSide: CurrentDiscSide::<Identity, OFFSET>,
            CurrentDomain: CurrentDomain::<Identity, OFFSET>,
            CurrentChapter: CurrentChapter::<Identity, OFFSET>,
            CurrentTitle: CurrentTitle::<Identity, OFFSET>,
            CurrentTime: CurrentTime::<Identity, OFFSET>,
            DVDTimeCode2bstr: DVDTimeCode2bstr::<Identity, OFFSET>,
            DVDDirectory: DVDDirectory::<Identity, OFFSET>,
            SetDVDDirectory: SetDVDDirectory::<Identity, OFFSET>,
            IsSubpictureStreamEnabled: IsSubpictureStreamEnabled::<Identity, OFFSET>,
            IsAudioStreamEnabled: IsAudioStreamEnabled::<Identity, OFFSET>,
            CurrentSubpictureStream: CurrentSubpictureStream::<Identity, OFFSET>,
            SetCurrentSubpictureStream: SetCurrentSubpictureStream::<Identity, OFFSET>,
            get_SubpictureLanguage: get_SubpictureLanguage::<Identity, OFFSET>,
            CurrentAudioStream: CurrentAudioStream::<Identity, OFFSET>,
            SetCurrentAudioStream: SetCurrentAudioStream::<Identity, OFFSET>,
            AudioStreamsAvailable: AudioStreamsAvailable::<Identity, OFFSET>,
            AnglesAvailable: AnglesAvailable::<Identity, OFFSET>,
            CurrentAngle: CurrentAngle::<Identity, OFFSET>,
            SetCurrentAngle: SetCurrentAngle::<Identity, OFFSET>,
            SubpictureStreamsAvailable: SubpictureStreamsAvailable::<Identity, OFFSET>,
            SubpictureOn: SubpictureOn::<Identity, OFFSET>,
            SetSubpictureOn: SetSubpictureOn::<Identity, OFFSET>,
            DVDUniqueID: DVDUniqueID::<Identity, OFFSET>,
            AcceptParentalLevelChange: AcceptParentalLevelChange::<Identity, OFFSET>,
            NotifyParentalLevelChange: NotifyParentalLevelChange::<Identity, OFFSET>,
            SelectParentalCountry: SelectParentalCountry::<Identity, OFFSET>,
            SelectParentalLevel: SelectParentalLevel::<Identity, OFFSET>,
            get_TitleParentalLevels: get_TitleParentalLevels::<Identity, OFFSET>,
            PlayerParentalCountry: PlayerParentalCountry::<Identity, OFFSET>,
            PlayerParentalLevel: PlayerParentalLevel::<Identity, OFFSET>,
            Eject: Eject::<Identity, OFFSET>,
            UOPValid: UOPValid::<Identity, OFFSET>,
            get_SPRM: get_SPRM::<Identity, OFFSET>,
            get_GPRM: get_GPRM::<Identity, OFFSET>,
            put_GPRM: put_GPRM::<Identity, OFFSET>,
            get_DVDTextStringType: get_DVDTextStringType::<Identity, OFFSET>,
            get_DVDTextString: get_DVDTextString::<Identity, OFFSET>,
            get_DVDTextNumberOfStrings: get_DVDTextNumberOfStrings::<Identity, OFFSET>,
            DVDTextNumberOfLanguages: DVDTextNumberOfLanguages::<Identity, OFFSET>,
            get_DVDTextLanguageLCID: get_DVDTextLanguageLCID::<Identity, OFFSET>,
            RegionChange: RegionChange::<Identity, OFFSET>,
            DVDAdm: DVDAdm::<Identity, OFFSET>,
            DeleteBookmark: DeleteBookmark::<Identity, OFFSET>,
            RestoreBookmark: RestoreBookmark::<Identity, OFFSET>,
            SaveBookmark: SaveBookmark::<Identity, OFFSET>,
            SelectDefaultAudioLanguage: SelectDefaultAudioLanguage::<Identity, OFFSET>,
            SelectDefaultSubpictureLanguage: SelectDefaultSubpictureLanguage::<Identity, OFFSET>,
            PreferredSubpictureStream: PreferredSubpictureStream::<Identity, OFFSET>,
            DefaultMenuLanguage: DefaultMenuLanguage::<Identity, OFFSET>,
            SetDefaultMenuLanguage: SetDefaultMenuLanguage::<Identity, OFFSET>,
            DefaultSubpictureLanguage: DefaultSubpictureLanguage::<Identity, OFFSET>,
            DefaultAudioLanguage: DefaultAudioLanguage::<Identity, OFFSET>,
            DefaultSubpictureLanguageExt: DefaultSubpictureLanguageExt::<Identity, OFFSET>,
            DefaultAudioLanguageExt: DefaultAudioLanguageExt::<Identity, OFFSET>,
            get_LanguageFromLCID: get_LanguageFromLCID::<Identity, OFFSET>,
            KaraokeAudioPresentationMode: KaraokeAudioPresentationMode::<Identity, OFFSET>,
            SetKaraokeAudioPresentationMode: SetKaraokeAudioPresentationMode::<Identity, OFFSET>,
            get_KaraokeChannelContent: get_KaraokeChannelContent::<Identity, OFFSET>,
            get_KaraokeChannelAssignment: get_KaraokeChannelAssignment::<Identity, OFFSET>,
            RestorePreferredSettings: RestorePreferredSettings::<Identity, OFFSET>,
            get_ButtonRect: get_ButtonRect::<Identity, OFFSET>,
            DVDScreenInMouseCoordinates: DVDScreenInMouseCoordinates::<Identity, OFFSET>,
            SetDVDScreenInMouseCoordinates: SetDVDScreenInMouseCoordinates::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidWebDVD as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidInputDevice as windows_core::Interface>::IID || iid == &<IMSVidPlayback as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidWebDVD {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidWebDVD2, IMSVidWebDVD2_Vtbl, 0x7027212f_ee9a_4a7c_8b67_f023714cdaff);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidWebDVD2 {
    type Target = IMSVidWebDVD;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidWebDVD2, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidInputDevice, IMSVidPlayback, IMSVidWebDVD);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidWebDVD2 {
    pub unsafe fn get_Bookmark(&self, ppdata: *mut *mut u8, pdatalength: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).get_Bookmark)(windows_core::Interface::as_raw(self), ppdata as _, pdatalength as _).ok() }
    }
    pub unsafe fn put_Bookmark(&self, pdata: *const u8, dwdatalength: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).put_Bookmark)(windows_core::Interface::as_raw(self), pdata, dwdatalength).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidWebDVD2_Vtbl {
    pub base__: IMSVidWebDVD_Vtbl,
    pub get_Bookmark: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut u8, *mut u32) -> windows_core::HRESULT,
    pub put_Bookmark: unsafe extern "system" fn(*mut core::ffi::c_void, *const u8, u32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidWebDVD2_Impl: IMSVidWebDVD_Impl {
    fn get_Bookmark(&self, ppdata: *mut *mut u8, pdatalength: *mut u32) -> windows_core::Result<()>;
    fn put_Bookmark(&self, pdata: *const u8, dwdatalength: u32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidWebDVD2_Vtbl {
    pub const fn new<Identity: IMSVidWebDVD2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn get_Bookmark<Identity: IMSVidWebDVD2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppdata: *mut *mut u8, pdatalength: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD2_Impl::get_Bookmark(this, core::mem::transmute_copy(&ppdata), core::mem::transmute_copy(&pdatalength)).into()
            }
        }
        unsafe extern "system" fn put_Bookmark<Identity: IMSVidWebDVD2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdata: *const u8, dwdatalength: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVD2_Impl::put_Bookmark(this, core::mem::transmute_copy(&pdata), core::mem::transmute_copy(&dwdatalength)).into()
            }
        }
        Self {
            base__: IMSVidWebDVD_Vtbl::new::<Identity, OFFSET>(),
            get_Bookmark: get_Bookmark::<Identity, OFFSET>,
            put_Bookmark: put_Bookmark::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidWebDVD2 as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidInputDevice as windows_core::Interface>::IID || iid == &<IMSVidPlayback as windows_core::Interface>::IID || iid == &<IMSVidWebDVD as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidWebDVD2 {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidWebDVDAdm, IMSVidWebDVDAdm_Vtbl, 0xb8be681a_eb2c_47f0_b415_94d5452f0e05);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidWebDVDAdm {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidWebDVDAdm, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidWebDVDAdm {
    pub unsafe fn ChangePassword(&self, strusername: &windows_core::BSTR, strold: &windows_core::BSTR, strnew: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ChangePassword)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(strusername), core::mem::transmute_copy(strold), core::mem::transmute_copy(strnew)).ok() }
    }
    pub unsafe fn SaveParentalLevel(&self, level: i32, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SaveParentalLevel)(windows_core::Interface::as_raw(self), level, core::mem::transmute_copy(strusername), core::mem::transmute_copy(strpassword)).ok() }
    }
    pub unsafe fn SaveParentalCountry(&self, country: i32, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SaveParentalCountry)(windows_core::Interface::as_raw(self), country, core::mem::transmute_copy(strusername), core::mem::transmute_copy(strpassword)).ok() }
    }
    pub unsafe fn ConfirmPassword(&self, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ConfirmPassword)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(strusername), core::mem::transmute_copy(strpassword), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetParentalLevel(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetParentalLevel)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetParentalCountry(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetParentalCountry)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn DefaultAudioLCID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DefaultAudioLCID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetDefaultAudioLCID(&self, newval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDefaultAudioLCID)(windows_core::Interface::as_raw(self), newval).ok() }
    }
    pub unsafe fn DefaultSubpictureLCID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DefaultSubpictureLCID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetDefaultSubpictureLCID(&self, newval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDefaultSubpictureLCID)(windows_core::Interface::as_raw(self), newval).ok() }
    }
    pub unsafe fn DefaultMenuLCID(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DefaultMenuLCID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetDefaultMenuLCID(&self, newval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetDefaultMenuLCID)(windows_core::Interface::as_raw(self), newval).ok() }
    }
    pub unsafe fn BookmarkOnStop(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).BookmarkOnStop)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetBookmarkOnStop(&self, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetBookmarkOnStop)(windows_core::Interface::as_raw(self), newval).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidWebDVDAdm_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub ChangePassword: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SaveParentalLevel: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SaveParentalCountry: unsafe extern "system" fn(*mut core::ffi::c_void, i32, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ConfirmPassword: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub GetParentalLevel: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub GetParentalCountry: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub DefaultAudioLCID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetDefaultAudioLCID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub DefaultSubpictureLCID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetDefaultSubpictureLCID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub DefaultMenuLCID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetDefaultMenuLCID: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub BookmarkOnStop: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SetBookmarkOnStop: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidWebDVDAdm_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn ChangePassword(&self, strusername: &windows_core::BSTR, strold: &windows_core::BSTR, strnew: &windows_core::BSTR) -> windows_core::Result<()>;
    fn SaveParentalLevel(&self, level: i32, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<()>;
    fn SaveParentalCountry(&self, country: i32, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<()>;
    fn ConfirmPassword(&self, strusername: &windows_core::BSTR, strpassword: &windows_core::BSTR) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn GetParentalLevel(&self) -> windows_core::Result<i32>;
    fn GetParentalCountry(&self) -> windows_core::Result<i32>;
    fn DefaultAudioLCID(&self) -> windows_core::Result<i32>;
    fn SetDefaultAudioLCID(&self, newval: i32) -> windows_core::Result<()>;
    fn DefaultSubpictureLCID(&self) -> windows_core::Result<i32>;
    fn SetDefaultSubpictureLCID(&self, newval: i32) -> windows_core::Result<()>;
    fn DefaultMenuLCID(&self) -> windows_core::Result<i32>;
    fn SetDefaultMenuLCID(&self, newval: i32) -> windows_core::Result<()>;
    fn BookmarkOnStop(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
    fn SetBookmarkOnStop(&self, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidWebDVDAdm_Vtbl {
    pub const fn new<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn ChangePassword<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, strusername: *mut core::ffi::c_void, strold: *mut core::ffi::c_void, strnew: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDAdm_Impl::ChangePassword(this, core::mem::transmute(&strusername), core::mem::transmute(&strold), core::mem::transmute(&strnew)).into()
            }
        }
        unsafe extern "system" fn SaveParentalLevel<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, level: i32, strusername: *mut core::ffi::c_void, strpassword: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDAdm_Impl::SaveParentalLevel(this, core::mem::transmute_copy(&level), core::mem::transmute(&strusername), core::mem::transmute(&strpassword)).into()
            }
        }
        unsafe extern "system" fn SaveParentalCountry<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, country: i32, strusername: *mut core::ffi::c_void, strpassword: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDAdm_Impl::SaveParentalCountry(this, core::mem::transmute_copy(&country), core::mem::transmute(&strusername), core::mem::transmute(&strpassword)).into()
            }
        }
        unsafe extern "system" fn ConfirmPassword<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, strusername: *mut core::ffi::c_void, strpassword: *mut core::ffi::c_void, pval: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVDAdm_Impl::ConfirmPassword(this, core::mem::transmute(&strusername), core::mem::transmute(&strpassword)) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetParentalLevel<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, llevel: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVDAdm_Impl::GetParentalLevel(this) {
                    Ok(ok__) => {
                        llevel.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetParentalCountry<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, lcountry: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVDAdm_Impl::GetParentalCountry(this) {
                    Ok(ok__) => {
                        lcountry.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DefaultAudioLCID<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVDAdm_Impl::DefaultAudioLCID(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDefaultAudioLCID<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDAdm_Impl::SetDefaultAudioLCID(this, core::mem::transmute_copy(&newval)).into()
            }
        }
        unsafe extern "system" fn DefaultSubpictureLCID<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVDAdm_Impl::DefaultSubpictureLCID(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDefaultSubpictureLCID<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDAdm_Impl::SetDefaultSubpictureLCID(this, core::mem::transmute_copy(&newval)).into()
            }
        }
        unsafe extern "system" fn DefaultMenuLCID<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVDAdm_Impl::DefaultMenuLCID(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDefaultMenuLCID<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDAdm_Impl::SetDefaultMenuLCID(this, core::mem::transmute_copy(&newval)).into()
            }
        }
        unsafe extern "system" fn BookmarkOnStop<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pval: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidWebDVDAdm_Impl::BookmarkOnStop(this) {
                    Ok(ok__) => {
                        pval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetBookmarkOnStop<Identity: IMSVidWebDVDAdm_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newval: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDAdm_Impl::SetBookmarkOnStop(this, core::mem::transmute_copy(&newval)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            ChangePassword: ChangePassword::<Identity, OFFSET>,
            SaveParentalLevel: SaveParentalLevel::<Identity, OFFSET>,
            SaveParentalCountry: SaveParentalCountry::<Identity, OFFSET>,
            ConfirmPassword: ConfirmPassword::<Identity, OFFSET>,
            GetParentalLevel: GetParentalLevel::<Identity, OFFSET>,
            GetParentalCountry: GetParentalCountry::<Identity, OFFSET>,
            DefaultAudioLCID: DefaultAudioLCID::<Identity, OFFSET>,
            SetDefaultAudioLCID: SetDefaultAudioLCID::<Identity, OFFSET>,
            DefaultSubpictureLCID: DefaultSubpictureLCID::<Identity, OFFSET>,
            SetDefaultSubpictureLCID: SetDefaultSubpictureLCID::<Identity, OFFSET>,
            DefaultMenuLCID: DefaultMenuLCID::<Identity, OFFSET>,
            SetDefaultMenuLCID: SetDefaultMenuLCID::<Identity, OFFSET>,
            BookmarkOnStop: BookmarkOnStop::<Identity, OFFSET>,
            SetBookmarkOnStop: SetBookmarkOnStop::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidWebDVDAdm as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidWebDVDAdm {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidWebDVDEvent, IMSVidWebDVDEvent_Vtbl, 0xb4f7a674_9b83_49cb_a357_c63b871be958);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidWebDVDEvent {
    type Target = IMSVidPlaybackEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidWebDVDEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidInputDeviceEvent, IMSVidPlaybackEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidWebDVDEvent {
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn DVDNotify(&self, leventcode: i32, lparam1: &super::super::super::System::Variant::VARIANT, lparam2: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).DVDNotify)(windows_core::Interface::as_raw(self), leventcode, core::mem::transmute_copy(lparam1), core::mem::transmute_copy(lparam2)).ok() }
    }
    pub unsafe fn PlayForwards(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayForwards)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn PlayBackwards(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayBackwards)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn ShowMenu(&self, menuid: DVDMenuIDConstants, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ShowMenu)(windows_core::Interface::as_raw(self), menuid, benabled).ok() }
    }
    pub unsafe fn Resume(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Resume)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn SelectOrActivateButton(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SelectOrActivateButton)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn StillOff(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).StillOff)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn PauseOn(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PauseOn)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn ChangeCurrentAudioStream(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ChangeCurrentAudioStream)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn ChangeCurrentSubpictureStream(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ChangeCurrentSubpictureStream)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn ChangeCurrentAngle(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ChangeCurrentAngle)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn PlayAtTimeInTitle(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayAtTimeInTitle)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn PlayAtTime(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayAtTime)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn PlayChapterInTitle(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayChapterInTitle)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn PlayChapter(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayChapter)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn ReplayChapter(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ReplayChapter)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn PlayNextChapter(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayNextChapter)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn Stop(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Stop)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn ReturnFromSubmenu(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ReturnFromSubmenu)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn PlayTitle(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayTitle)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn PlayPrevChapter(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PlayPrevChapter)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn ChangeKaraokePresMode(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ChangeKaraokePresMode)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
    pub unsafe fn ChangeVideoPresMode(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ChangeVideoPresMode)(windows_core::Interface::as_raw(self), benabled).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidWebDVDEvent_Vtbl {
    pub base__: IMSVidPlaybackEvent_Vtbl,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub DVDNotify: unsafe extern "system" fn(*mut core::ffi::c_void, i32, super::super::super::System::Variant::VARIANT, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    DVDNotify: usize,
    pub PlayForwards: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub PlayBackwards: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub ShowMenu: unsafe extern "system" fn(*mut core::ffi::c_void, DVDMenuIDConstants, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub Resume: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub SelectOrActivateButton: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub StillOff: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub PauseOn: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub ChangeCurrentAudioStream: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub ChangeCurrentSubpictureStream: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub ChangeCurrentAngle: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub PlayAtTimeInTitle: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub PlayAtTime: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub PlayChapterInTitle: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub PlayChapter: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub ReplayChapter: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub PlayNextChapter: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub Stop: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub ReturnFromSubmenu: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub PlayTitle: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub PlayPrevChapter: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub ChangeKaraokePresMode: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
    pub ChangeVideoPresMode: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidWebDVDEvent_Impl: IMSVidPlaybackEvent_Impl {
    fn DVDNotify(&self, leventcode: i32, lparam1: &super::super::super::System::Variant::VARIANT, lparam2: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn PlayForwards(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn PlayBackwards(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn ShowMenu(&self, menuid: DVDMenuIDConstants, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn Resume(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn SelectOrActivateButton(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn StillOff(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn PauseOn(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn ChangeCurrentAudioStream(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn ChangeCurrentSubpictureStream(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn ChangeCurrentAngle(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn PlayAtTimeInTitle(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn PlayAtTime(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn PlayChapterInTitle(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn PlayChapter(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn ReplayChapter(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn PlayNextChapter(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn Stop(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn ReturnFromSubmenu(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn PlayTitle(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn PlayPrevChapter(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn ChangeKaraokePresMode(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
    fn ChangeVideoPresMode(&self, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidWebDVDEvent_Vtbl {
    pub const fn new<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn DVDNotify<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, leventcode: i32, lparam1: super::super::super::System::Variant::VARIANT, lparam2: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::DVDNotify(this, core::mem::transmute_copy(&leventcode), core::mem::transmute(&lparam1), core::mem::transmute(&lparam2)).into()
            }
        }
        unsafe extern "system" fn PlayForwards<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::PlayForwards(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn PlayBackwards<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::PlayBackwards(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn ShowMenu<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, menuid: DVDMenuIDConstants, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::ShowMenu(this, core::mem::transmute_copy(&menuid), core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn Resume<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::Resume(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn SelectOrActivateButton<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::SelectOrActivateButton(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn StillOff<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::StillOff(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn PauseOn<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::PauseOn(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn ChangeCurrentAudioStream<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::ChangeCurrentAudioStream(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn ChangeCurrentSubpictureStream<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::ChangeCurrentSubpictureStream(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn ChangeCurrentAngle<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::ChangeCurrentAngle(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn PlayAtTimeInTitle<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::PlayAtTimeInTitle(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn PlayAtTime<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::PlayAtTime(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn PlayChapterInTitle<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::PlayChapterInTitle(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn PlayChapter<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::PlayChapter(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn ReplayChapter<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::ReplayChapter(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn PlayNextChapter<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::PlayNextChapter(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn Stop<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::Stop(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn ReturnFromSubmenu<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::ReturnFromSubmenu(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn PlayTitle<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::PlayTitle(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn PlayPrevChapter<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::PlayPrevChapter(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn ChangeKaraokePresMode<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::ChangeKaraokePresMode(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        unsafe extern "system" fn ChangeVideoPresMode<Identity: IMSVidWebDVDEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, benabled: super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidWebDVDEvent_Impl::ChangeVideoPresMode(this, core::mem::transmute_copy(&benabled)).into()
            }
        }
        Self {
            base__: IMSVidPlaybackEvent_Vtbl::new::<Identity, OFFSET>(),
            DVDNotify: DVDNotify::<Identity, OFFSET>,
            PlayForwards: PlayForwards::<Identity, OFFSET>,
            PlayBackwards: PlayBackwards::<Identity, OFFSET>,
            ShowMenu: ShowMenu::<Identity, OFFSET>,
            Resume: Resume::<Identity, OFFSET>,
            SelectOrActivateButton: SelectOrActivateButton::<Identity, OFFSET>,
            StillOff: StillOff::<Identity, OFFSET>,
            PauseOn: PauseOn::<Identity, OFFSET>,
            ChangeCurrentAudioStream: ChangeCurrentAudioStream::<Identity, OFFSET>,
            ChangeCurrentSubpictureStream: ChangeCurrentSubpictureStream::<Identity, OFFSET>,
            ChangeCurrentAngle: ChangeCurrentAngle::<Identity, OFFSET>,
            PlayAtTimeInTitle: PlayAtTimeInTitle::<Identity, OFFSET>,
            PlayAtTime: PlayAtTime::<Identity, OFFSET>,
            PlayChapterInTitle: PlayChapterInTitle::<Identity, OFFSET>,
            PlayChapter: PlayChapter::<Identity, OFFSET>,
            ReplayChapter: ReplayChapter::<Identity, OFFSET>,
            PlayNextChapter: PlayNextChapter::<Identity, OFFSET>,
            Stop: Stop::<Identity, OFFSET>,
            ReturnFromSubmenu: ReturnFromSubmenu::<Identity, OFFSET>,
            PlayTitle: PlayTitle::<Identity, OFFSET>,
            PlayPrevChapter: PlayPrevChapter::<Identity, OFFSET>,
            ChangeKaraokePresMode: ChangeKaraokePresMode::<Identity, OFFSET>,
            ChangeVideoPresMode: ChangeVideoPresMode::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidWebDVDEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidInputDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidPlaybackEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidWebDVDEvent {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidXDS, IMSVidXDS_Vtbl, 0x11ebc158_e712_4d1f_8bb3_01ed5274c4ce);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidXDS {
    type Target = IMSVidFeature;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidXDS, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDevice, IMSVidFeature);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidXDS {
    pub unsafe fn ChannelChangeInterface(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).ChannelChangeInterface)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidXDS_Vtbl {
    pub base__: IMSVidFeature_Vtbl,
    pub ChannelChangeInterface: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidXDS_Impl: IMSVidFeature_Impl {
    fn ChannelChangeInterface(&self) -> windows_core::Result<windows_core::IUnknown>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidXDS_Vtbl {
    pub const fn new<Identity: IMSVidXDS_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn ChannelChangeInterface<Identity: IMSVidXDS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, punkcc: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMSVidXDS_Impl::ChannelChangeInterface(this) {
                    Ok(ok__) => {
                        punkcc.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: IMSVidFeature_Vtbl::new::<Identity, OFFSET>(), ChannelChangeInterface: ChannelChangeInterface::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidXDS as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDevice as windows_core::Interface>::IID || iid == &<IMSVidFeature as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidXDS {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IMSVidXDSEvent, IMSVidXDSEvent_Vtbl, 0x6db2317d_3b23_41ec_ba4b_701f407eaf3a);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IMSVidXDSEvent {
    type Target = IMSVidFeatureEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IMSVidXDSEvent, windows_core::IUnknown, super::super::super::System::Com::IDispatch, IMSVidDeviceEvent, IMSVidFeatureEvent);
#[cfg(feature = "Win32_System_Com")]
impl IMSVidXDSEvent {
    pub unsafe fn RatingChange(&self, prevratingsystem: EnTvRat_System, prevlevel: EnTvRat_GenericLevel, prevattributes: BfEnTvRat_GenericAttributes, newratingsystem: EnTvRat_System, newlevel: EnTvRat_GenericLevel, newattributes: BfEnTvRat_GenericAttributes) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RatingChange)(windows_core::Interface::as_raw(self), prevratingsystem, prevlevel, prevattributes, newratingsystem, newlevel, newattributes).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IMSVidXDSEvent_Vtbl {
    pub base__: IMSVidFeatureEvent_Vtbl,
    pub RatingChange: unsafe extern "system" fn(*mut core::ffi::c_void, EnTvRat_System, EnTvRat_GenericLevel, BfEnTvRat_GenericAttributes, EnTvRat_System, EnTvRat_GenericLevel, BfEnTvRat_GenericAttributes) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IMSVidXDSEvent_Impl: IMSVidFeatureEvent_Impl {
    fn RatingChange(&self, prevratingsystem: EnTvRat_System, prevlevel: EnTvRat_GenericLevel, prevattributes: BfEnTvRat_GenericAttributes, newratingsystem: EnTvRat_System, newlevel: EnTvRat_GenericLevel, newattributes: BfEnTvRat_GenericAttributes) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IMSVidXDSEvent_Vtbl {
    pub const fn new<Identity: IMSVidXDSEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn RatingChange<Identity: IMSVidXDSEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prevratingsystem: EnTvRat_System, prevlevel: EnTvRat_GenericLevel, prevattributes: BfEnTvRat_GenericAttributes, newratingsystem: EnTvRat_System, newlevel: EnTvRat_GenericLevel, newattributes: BfEnTvRat_GenericAttributes) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMSVidXDSEvent_Impl::RatingChange(this, core::mem::transmute_copy(&prevratingsystem), core::mem::transmute_copy(&prevlevel), core::mem::transmute_copy(&prevattributes), core::mem::transmute_copy(&newratingsystem), core::mem::transmute_copy(&newlevel), core::mem::transmute_copy(&newattributes)).into()
            }
        }
        Self { base__: IMSVidFeatureEvent_Vtbl::new::<Identity, OFFSET>(), RatingChange: RatingChange::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMSVidXDSEvent as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID || iid == &<IMSVidDeviceEvent as windows_core::Interface>::IID || iid == &<IMSVidFeatureEvent as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IMSVidXDSEvent {}
windows_core::imp::define_interface!(IMceBurnerControl, IMceBurnerControl_Vtbl, 0x5a86b91a_e71e_46c1_88a9_9bb338710552);
windows_core::imp::interface_hierarchy!(IMceBurnerControl, windows_core::IUnknown);
impl IMceBurnerControl {
    pub unsafe fn GetBurnerNoDecryption(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetBurnerNoDecryption)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IMceBurnerControl_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetBurnerNoDecryption: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IMceBurnerControl_Impl: windows_core::IUnknownImpl {
    fn GetBurnerNoDecryption(&self) -> windows_core::Result<()>;
}
impl IMceBurnerControl_Vtbl {
    pub const fn new<Identity: IMceBurnerControl_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetBurnerNoDecryption<Identity: IMceBurnerControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMceBurnerControl_Impl::GetBurnerNoDecryption(this).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), GetBurnerNoDecryption: GetBurnerNoDecryption::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMceBurnerControl as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IMceBurnerControl {}
windows_core::imp::define_interface!(IMpeg2Data, IMpeg2Data_Vtbl, 0x9b396d40_f380_4e3c_a514_1a82bf6ebfe6);
windows_core::imp::interface_hierarchy!(IMpeg2Data, windows_core::IUnknown);
impl IMpeg2Data {
    pub unsafe fn GetSection(&self, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, dwtimeout: u32) -> windows_core::Result<ISectionList> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSection)(windows_core::Interface::as_raw(self), pid, tid, pfilter, dwtimeout, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTable(&self, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, dwtimeout: u32) -> windows_core::Result<ISectionList> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTable)(windows_core::Interface::as_raw(self), pid, tid, pfilter, dwtimeout, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetStreamOfSections(&self, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, hdatareadyevent: super::super::super::Foundation::HANDLE) -> windows_core::Result<IMpeg2Stream> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetStreamOfSections)(windows_core::Interface::as_raw(self), pid, tid, pfilter, hdatareadyevent, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IMpeg2Data_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetSection: unsafe extern "system" fn(*mut core::ffi::c_void, u16, u8, *const MPEG2_FILTER, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTable: unsafe extern "system" fn(*mut core::ffi::c_void, u16, u8, *const MPEG2_FILTER, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetStreamOfSections: unsafe extern "system" fn(*mut core::ffi::c_void, u16, u8, *const MPEG2_FILTER, super::super::super::Foundation::HANDLE, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IMpeg2Data_Impl: windows_core::IUnknownImpl {
    fn GetSection(&self, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, dwtimeout: u32) -> windows_core::Result<ISectionList>;
    fn GetTable(&self, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, dwtimeout: u32) -> windows_core::Result<ISectionList>;
    fn GetStreamOfSections(&self, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, hdatareadyevent: super::super::super::Foundation::HANDLE) -> windows_core::Result<IMpeg2Stream>;
}
impl IMpeg2Data_Vtbl {
    pub const fn new<Identity: IMpeg2Data_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetSection<Identity: IMpeg2Data_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, dwtimeout: u32, ppsectionlist: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMpeg2Data_Impl::GetSection(this, core::mem::transmute_copy(&pid), core::mem::transmute_copy(&tid), core::mem::transmute_copy(&pfilter), core::mem::transmute_copy(&dwtimeout)) {
                    Ok(ok__) => {
                        ppsectionlist.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTable<Identity: IMpeg2Data_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, dwtimeout: u32, ppsectionlist: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMpeg2Data_Impl::GetTable(this, core::mem::transmute_copy(&pid), core::mem::transmute_copy(&tid), core::mem::transmute_copy(&pfilter), core::mem::transmute_copy(&dwtimeout)) {
                    Ok(ok__) => {
                        ppsectionlist.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetStreamOfSections<Identity: IMpeg2Data_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, hdatareadyevent: super::super::super::Foundation::HANDLE, ppmpegstream: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IMpeg2Data_Impl::GetStreamOfSections(this, core::mem::transmute_copy(&pid), core::mem::transmute_copy(&tid), core::mem::transmute_copy(&pfilter), core::mem::transmute_copy(&hdatareadyevent)) {
                    Ok(ok__) => {
                        ppmpegstream.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetSection: GetSection::<Identity, OFFSET>,
            GetTable: GetTable::<Identity, OFFSET>,
            GetStreamOfSections: GetStreamOfSections::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMpeg2Data as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IMpeg2Data {}
windows_core::imp::define_interface!(IMpeg2Stream, IMpeg2Stream_Vtbl, 0x400cc286_32a0_4ce4_9041_39571125a635);
windows_core::imp::interface_hierarchy!(IMpeg2Stream, windows_core::IUnknown);
impl IMpeg2Stream {
    pub unsafe fn Initialize<P1>(&self, requesttype: MPEG_REQUEST_TYPE, pmpeg2data: P1, pcontext: *const MPEG_CONTEXT, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, hdatareadyevent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>
    where
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), requesttype, pmpeg2data.param().abi(), pcontext, pid, tid, pfilter, hdatareadyevent).ok() }
    }
    pub unsafe fn SupplyDataBuffer(&self, pstreambuffer: *const MPEG_STREAM_BUFFER) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SupplyDataBuffer)(windows_core::Interface::as_raw(self), pstreambuffer).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IMpeg2Stream_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, MPEG_REQUEST_TYPE, *mut core::ffi::c_void, *const MPEG_CONTEXT, u16, u8, *const MPEG2_FILTER, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub SupplyDataBuffer: unsafe extern "system" fn(*mut core::ffi::c_void, *const MPEG_STREAM_BUFFER) -> windows_core::HRESULT,
}
pub trait IMpeg2Stream_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, requesttype: MPEG_REQUEST_TYPE, pmpeg2data: windows_core::Ref<'_, IMpeg2Data>, pcontext: *const MPEG_CONTEXT, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, hdatareadyevent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn SupplyDataBuffer(&self, pstreambuffer: *const MPEG_STREAM_BUFFER) -> windows_core::Result<()>;
}
impl IMpeg2Stream_Vtbl {
    pub const fn new<Identity: IMpeg2Stream_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IMpeg2Stream_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, requesttype: MPEG_REQUEST_TYPE, pmpeg2data: *mut core::ffi::c_void, pcontext: *const MPEG_CONTEXT, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, hdatareadyevent: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMpeg2Stream_Impl::Initialize(this, core::mem::transmute_copy(&requesttype), core::mem::transmute_copy(&pmpeg2data), core::mem::transmute_copy(&pcontext), core::mem::transmute_copy(&pid), core::mem::transmute_copy(&tid), core::mem::transmute_copy(&pfilter), core::mem::transmute_copy(&hdatareadyevent)).into()
            }
        }
        unsafe extern "system" fn SupplyDataBuffer<Identity: IMpeg2Stream_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pstreambuffer: *const MPEG_STREAM_BUFFER) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMpeg2Stream_Impl::SupplyDataBuffer(this, core::mem::transmute_copy(&pstreambuffer)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            SupplyDataBuffer: SupplyDataBuffer::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMpeg2Stream as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IMpeg2Stream {}
windows_core::imp::define_interface!(IMpeg2TableFilter, IMpeg2TableFilter_Vtbl, 0xbdcdd913_9ecd_4fb2_81ae_adf747ea75a5);
windows_core::imp::interface_hierarchy!(IMpeg2TableFilter, windows_core::IUnknown);
impl IMpeg2TableFilter {
    pub unsafe fn AddPID(&self, p: u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AddPID)(windows_core::Interface::as_raw(self), p).ok() }
    }
    pub unsafe fn AddTable(&self, p: u16, t: u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AddTable)(windows_core::Interface::as_raw(self), p, t).ok() }
    }
    pub unsafe fn AddExtension(&self, p: u16, t: u8, e: u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AddExtension)(windows_core::Interface::as_raw(self), p, t, e).ok() }
    }
    pub unsafe fn RemovePID(&self, p: u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RemovePID)(windows_core::Interface::as_raw(self), p).ok() }
    }
    pub unsafe fn RemoveTable(&self, p: u16, t: u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RemoveTable)(windows_core::Interface::as_raw(self), p, t).ok() }
    }
    pub unsafe fn RemoveExtension(&self, p: u16, t: u8, e: u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RemoveExtension)(windows_core::Interface::as_raw(self), p, t, e).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IMpeg2TableFilter_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub AddPID: unsafe extern "system" fn(*mut core::ffi::c_void, u16) -> windows_core::HRESULT,
    pub AddTable: unsafe extern "system" fn(*mut core::ffi::c_void, u16, u8) -> windows_core::HRESULT,
    pub AddExtension: unsafe extern "system" fn(*mut core::ffi::c_void, u16, u8, u16) -> windows_core::HRESULT,
    pub RemovePID: unsafe extern "system" fn(*mut core::ffi::c_void, u16) -> windows_core::HRESULT,
    pub RemoveTable: unsafe extern "system" fn(*mut core::ffi::c_void, u16, u8) -> windows_core::HRESULT,
    pub RemoveExtension: unsafe extern "system" fn(*mut core::ffi::c_void, u16, u8, u16) -> windows_core::HRESULT,
}
pub trait IMpeg2TableFilter_Impl: windows_core::IUnknownImpl {
    fn AddPID(&self, p: u16) -> windows_core::Result<()>;
    fn AddTable(&self, p: u16, t: u8) -> windows_core::Result<()>;
    fn AddExtension(&self, p: u16, t: u8, e: u16) -> windows_core::Result<()>;
    fn RemovePID(&self, p: u16) -> windows_core::Result<()>;
    fn RemoveTable(&self, p: u16, t: u8) -> windows_core::Result<()>;
    fn RemoveExtension(&self, p: u16, t: u8, e: u16) -> windows_core::Result<()>;
}
impl IMpeg2TableFilter_Vtbl {
    pub const fn new<Identity: IMpeg2TableFilter_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn AddPID<Identity: IMpeg2TableFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, p: u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMpeg2TableFilter_Impl::AddPID(this, core::mem::transmute_copy(&p)).into()
            }
        }
        unsafe extern "system" fn AddTable<Identity: IMpeg2TableFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, p: u16, t: u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMpeg2TableFilter_Impl::AddTable(this, core::mem::transmute_copy(&p), core::mem::transmute_copy(&t)).into()
            }
        }
        unsafe extern "system" fn AddExtension<Identity: IMpeg2TableFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, p: u16, t: u8, e: u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMpeg2TableFilter_Impl::AddExtension(this, core::mem::transmute_copy(&p), core::mem::transmute_copy(&t), core::mem::transmute_copy(&e)).into()
            }
        }
        unsafe extern "system" fn RemovePID<Identity: IMpeg2TableFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, p: u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMpeg2TableFilter_Impl::RemovePID(this, core::mem::transmute_copy(&p)).into()
            }
        }
        unsafe extern "system" fn RemoveTable<Identity: IMpeg2TableFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, p: u16, t: u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMpeg2TableFilter_Impl::RemoveTable(this, core::mem::transmute_copy(&p), core::mem::transmute_copy(&t)).into()
            }
        }
        unsafe extern "system" fn RemoveExtension<Identity: IMpeg2TableFilter_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, p: u16, t: u8, e: u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IMpeg2TableFilter_Impl::RemoveExtension(this, core::mem::transmute_copy(&p), core::mem::transmute_copy(&t), core::mem::transmute_copy(&e)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            AddPID: AddPID::<Identity, OFFSET>,
            AddTable: AddTable::<Identity, OFFSET>,
            AddExtension: AddExtension::<Identity, OFFSET>,
            RemovePID: RemovePID::<Identity, OFFSET>,
            RemoveTable: RemoveTable::<Identity, OFFSET>,
            RemoveExtension: RemoveExtension::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IMpeg2TableFilter as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IMpeg2TableFilter {}
windows_core::imp::define_interface!(IPAT, IPAT_Vtbl, 0x6623b511_4b5f_43c3_9a01_e8ff84188060);
windows_core::imp::interface_hierarchy!(IPAT, windows_core::IUnknown);
impl IPAT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetTransportStreamId(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTransportStreamId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordProgramNumber(&self, dwindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordProgramNumber)(windows_core::Interface::as_raw(self), dwindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordProgramMapPid(&self, dwindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordProgramMapPid)(windows_core::Interface::as_raw(self), dwindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn FindRecordProgramMapPid(&self, wprogramnumber: u16) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).FindRecordProgramMapPid)(windows_core::Interface::as_raw(self), wprogramnumber, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForNextTable)(windows_core::Interface::as_raw(self), hnexttableavailable).ok() }
    }
    pub unsafe fn GetNextTable(&self) -> windows_core::Result<IPAT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNextTable)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForWhenCurrent)(windows_core::Interface::as_raw(self), hnexttableiscurrent).ok() }
    }
    pub unsafe fn ConvertNextToCurrent(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ConvertNextToCurrent)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IPAT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTransportStreamId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordProgramNumber: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordProgramMapPid: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub FindRecordProgramMapPid: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *mut u16) -> windows_core::HRESULT,
    pub RegisterForNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub GetNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForWhenCurrent: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub ConvertNextToCurrent: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IPAT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetTransportStreamId(&self) -> windows_core::Result<u16>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordProgramNumber(&self, dwindex: u32) -> windows_core::Result<u16>;
    fn GetRecordProgramMapPid(&self, dwindex: u32) -> windows_core::Result<u16>;
    fn FindRecordProgramMapPid(&self, wprogramnumber: u16) -> windows_core::Result<u16>;
    fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn GetNextTable(&self) -> windows_core::Result<IPAT>;
    fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn ConvertNextToCurrent(&self) -> windows_core::Result<()>;
}
impl IPAT_Vtbl {
    pub const fn new<Identity: IPAT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IPAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPAT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetTransportStreamId<Identity: IPAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPAT_Impl::GetTransportStreamId(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IPAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPAT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IPAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPAT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordProgramNumber<Identity: IPAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPAT_Impl::GetRecordProgramNumber(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordProgramMapPid<Identity: IPAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPAT_Impl::GetRecordProgramMapPid(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn FindRecordProgramMapPid<Identity: IPAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, wprogramnumber: u16, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPAT_Impl::FindRecordProgramMapPid(this, core::mem::transmute_copy(&wprogramnumber)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RegisterForNextTable<Identity: IPAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPAT_Impl::RegisterForNextTable(this, core::mem::transmute_copy(&hnexttableavailable)).into()
            }
        }
        unsafe extern "system" fn GetNextTable<Identity: IPAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pppat: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPAT_Impl::GetNextTable(this) {
                    Ok(ok__) => {
                        pppat.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RegisterForWhenCurrent<Identity: IPAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPAT_Impl::RegisterForWhenCurrent(this, core::mem::transmute_copy(&hnexttableiscurrent)).into()
            }
        }
        unsafe extern "system" fn ConvertNextToCurrent<Identity: IPAT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPAT_Impl::ConvertNextToCurrent(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetTransportStreamId: GetTransportStreamId::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordProgramNumber: GetRecordProgramNumber::<Identity, OFFSET>,
            GetRecordProgramMapPid: GetRecordProgramMapPid::<Identity, OFFSET>,
            FindRecordProgramMapPid: FindRecordProgramMapPid::<Identity, OFFSET>,
            RegisterForNextTable: RegisterForNextTable::<Identity, OFFSET>,
            GetNextTable: GetNextTable::<Identity, OFFSET>,
            RegisterForWhenCurrent: RegisterForWhenCurrent::<Identity, OFFSET>,
            ConvertNextToCurrent: ConvertNextToCurrent::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPAT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IPAT {}
windows_core::imp::define_interface!(IPBDAAttributesDescriptor, IPBDAAttributesDescriptor_Vtbl, 0x313b3620_3263_45a6_9533_968befbeac03);
windows_core::imp::interface_hierarchy!(IPBDAAttributesDescriptor, windows_core::IUnknown);
impl IPBDAAttributesDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetAttributePayload(&self, ppbattributebuffer: *mut *mut u8, pdwattributelength: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetAttributePayload)(windows_core::Interface::as_raw(self), ppbattributebuffer as _, pdwattributelength as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IPBDAAttributesDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetAttributePayload: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut u8, *mut u32) -> windows_core::HRESULT,
}
pub trait IPBDAAttributesDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u16>;
    fn GetAttributePayload(&self, ppbattributebuffer: *mut *mut u8, pdwattributelength: *mut u32) -> windows_core::Result<()>;
}
impl IPBDAAttributesDescriptor_Vtbl {
    pub const fn new<Identity: IPBDAAttributesDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IPBDAAttributesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDAAttributesDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IPBDAAttributesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDAAttributesDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetAttributePayload<Identity: IPBDAAttributesDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppbattributebuffer: *mut *mut u8, pdwattributelength: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPBDAAttributesDescriptor_Impl::GetAttributePayload(this, core::mem::transmute_copy(&ppbattributebuffer), core::mem::transmute_copy(&pdwattributelength)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetAttributePayload: GetAttributePayload::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPBDAAttributesDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IPBDAAttributesDescriptor {}
windows_core::imp::define_interface!(IPBDAEntitlementDescriptor, IPBDAEntitlementDescriptor_Vtbl, 0x22632497_0de3_4587_aadc_d8d99017e760);
windows_core::imp::interface_hierarchy!(IPBDAEntitlementDescriptor, windows_core::IUnknown);
impl IPBDAEntitlementDescriptor {
    pub unsafe fn GetTag(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTag)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLength(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetToken(&self, ppbtokenbuffer: *mut *mut u8, pdwtokenlength: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetToken)(windows_core::Interface::as_raw(self), ppbtokenbuffer as _, pdwtokenlength as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IPBDAEntitlementDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTag: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetToken: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut u8, *mut u32) -> windows_core::HRESULT,
}
pub trait IPBDAEntitlementDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetTag(&self) -> windows_core::Result<u8>;
    fn GetLength(&self) -> windows_core::Result<u16>;
    fn GetToken(&self, ppbtokenbuffer: *mut *mut u8, pdwtokenlength: *mut u32) -> windows_core::Result<()>;
}
impl IPBDAEntitlementDescriptor_Vtbl {
    pub const fn new<Identity: IPBDAEntitlementDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTag<Identity: IPBDAEntitlementDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDAEntitlementDescriptor_Impl::GetTag(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLength<Identity: IPBDAEntitlementDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDAEntitlementDescriptor_Impl::GetLength(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetToken<Identity: IPBDAEntitlementDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppbtokenbuffer: *mut *mut u8, pdwtokenlength: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPBDAEntitlementDescriptor_Impl::GetToken(this, core::mem::transmute_copy(&ppbtokenbuffer), core::mem::transmute_copy(&pdwtokenlength)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetTag: GetTag::<Identity, OFFSET>,
            GetLength: GetLength::<Identity, OFFSET>,
            GetToken: GetToken::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPBDAEntitlementDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IPBDAEntitlementDescriptor {}
windows_core::imp::define_interface!(IPBDASiParser, IPBDASiParser_Vtbl, 0x9de49a74_aba2_4a18_93e1_21f17f95c3c3);
windows_core::imp::interface_hierarchy!(IPBDASiParser, windows_core::IUnknown);
impl IPBDASiParser {
    pub unsafe fn Initialize<P0>(&self, punk: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::IUnknown>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), punk.param().abi()).ok() }
    }
    pub unsafe fn GetEIT(&self, dwsize: u32, pbuffer: *const u8) -> windows_core::Result<IPBDA_EIT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEIT)(windows_core::Interface::as_raw(self), dwsize, pbuffer, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetServices(&self, dwsize: u32, pbuffer: *const u8) -> windows_core::Result<IPBDA_Services> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServices)(windows_core::Interface::as_raw(self), dwsize, pbuffer, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IPBDASiParser_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetEIT: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *const u8, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetServices: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *const u8, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IPBDASiParser_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, punk: windows_core::Ref<'_, windows_core::IUnknown>) -> windows_core::Result<()>;
    fn GetEIT(&self, dwsize: u32, pbuffer: *const u8) -> windows_core::Result<IPBDA_EIT>;
    fn GetServices(&self, dwsize: u32, pbuffer: *const u8) -> windows_core::Result<IPBDA_Services>;
}
impl IPBDASiParser_Vtbl {
    pub const fn new<Identity: IPBDASiParser_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IPBDASiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, punk: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPBDASiParser_Impl::Initialize(this, core::mem::transmute_copy(&punk)).into()
            }
        }
        unsafe extern "system" fn GetEIT<Identity: IPBDASiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwsize: u32, pbuffer: *const u8, ppeit: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDASiParser_Impl::GetEIT(this, core::mem::transmute_copy(&dwsize), core::mem::transmute_copy(&pbuffer)) {
                    Ok(ok__) => {
                        ppeit.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServices<Identity: IPBDASiParser_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwsize: u32, pbuffer: *const u8, ppservices: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDASiParser_Impl::GetServices(this, core::mem::transmute_copy(&dwsize), core::mem::transmute_copy(&pbuffer)) {
                    Ok(ok__) => {
                        ppservices.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetEIT: GetEIT::<Identity, OFFSET>,
            GetServices: GetServices::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPBDASiParser as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IPBDASiParser {}
windows_core::imp::define_interface!(IPBDA_EIT, IPBDA_EIT_Vtbl, 0xa35f2dea_098f_4ebd_984c_2bd4c3c8ce0a);
windows_core::imp::interface_hierarchy!(IPBDA_EIT, windows_core::IUnknown);
impl IPBDA_EIT {
    pub unsafe fn Initialize(&self, pbuffer: &[u8]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), pbuffer.len().try_into().unwrap(), core::mem::transmute(pbuffer.as_ptr())).ok() }
    }
    pub unsafe fn GetTableId(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableId)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetServiceIdx(&self) -> windows_core::Result<u64> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetServiceIdx)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordEventId(&self, dwrecordindex: u32) -> windows_core::Result<u64> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordEventId)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordStartTime(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_DATE_AND_TIME> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordStartTime)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDuration(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_TIME> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDuration)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IPBDA_EIT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *const u8) -> windows_core::HRESULT,
    pub GetTableId: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetServiceIdx: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u64) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordEventId: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u64) -> windows_core::HRESULT,
    pub GetRecordStartTime: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT,
    pub GetRecordDuration: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut MPEG_TIME) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IPBDA_EIT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, size: u32, pbuffer: *const u8) -> windows_core::Result<()>;
    fn GetTableId(&self) -> windows_core::Result<u8>;
    fn GetVersionNumber(&self) -> windows_core::Result<u16>;
    fn GetServiceIdx(&self) -> windows_core::Result<u64>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordEventId(&self, dwrecordindex: u32) -> windows_core::Result<u64>;
    fn GetRecordStartTime(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_DATE_AND_TIME>;
    fn GetRecordDuration(&self, dwrecordindex: u32) -> windows_core::Result<MPEG_TIME>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
}
impl IPBDA_EIT_Vtbl {
    pub const fn new<Identity: IPBDA_EIT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IPBDA_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, size: u32, pbuffer: *const u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPBDA_EIT_Impl::Initialize(this, core::mem::transmute_copy(&size), core::mem::transmute_copy(&pbuffer)).into()
            }
        }
        unsafe extern "system" fn GetTableId<Identity: IPBDA_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDA_EIT_Impl::GetTableId(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IPBDA_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDA_EIT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetServiceIdx<Identity: IPBDA_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, plwval: *mut u64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDA_EIT_Impl::GetServiceIdx(this) {
                    Ok(ok__) => {
                        plwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IPBDA_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDA_EIT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordEventId<Identity: IPBDA_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, plwval: *mut u64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDA_EIT_Impl::GetRecordEventId(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        plwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordStartTime<Identity: IPBDA_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pmdtval: *mut MPEG_DATE_AND_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDA_EIT_Impl::GetRecordStartTime(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pmdtval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDuration<Identity: IPBDA_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pmdval: *mut MPEG_TIME) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDA_EIT_Impl::GetRecordDuration(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pmdval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IPBDA_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDA_EIT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IPBDA_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDA_EIT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IPBDA_EIT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPBDA_EIT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetTableId: GetTableId::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetServiceIdx: GetServiceIdx::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordEventId: GetRecordEventId::<Identity, OFFSET>,
            GetRecordStartTime: GetRecordStartTime::<Identity, OFFSET>,
            GetRecordDuration: GetRecordDuration::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPBDA_EIT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IPBDA_EIT {}
windows_core::imp::define_interface!(IPBDA_Services, IPBDA_Services_Vtbl, 0x944eab37_eed4_4850_afd2_77e7efeb4427);
windows_core::imp::interface_hierarchy!(IPBDA_Services, windows_core::IUnknown);
impl IPBDA_Services {
    pub unsafe fn Initialize(&self, pbuffer: &[u8]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), pbuffer.len().try_into().unwrap(), core::mem::transmute(pbuffer.as_ptr())).ok() }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordByIndex(&self, dwrecordindex: u32) -> windows_core::Result<u64> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IPBDA_Services_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *const u8) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetRecordByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u64) -> windows_core::HRESULT,
}
pub trait IPBDA_Services_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, size: u32, pbuffer: *const u8) -> windows_core::Result<()>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u32>;
    fn GetRecordByIndex(&self, dwrecordindex: u32) -> windows_core::Result<u64>;
}
impl IPBDA_Services_Vtbl {
    pub const fn new<Identity: IPBDA_Services_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IPBDA_Services_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, size: u32, pbuffer: *const u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPBDA_Services_Impl::Initialize(this, core::mem::transmute_copy(&size), core::mem::transmute_copy(&pbuffer)).into()
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IPBDA_Services_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDA_Services_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordByIndex<Identity: IPBDA_Services_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pul64serviceidx: *mut u64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPBDA_Services_Impl::GetRecordByIndex(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pul64serviceidx.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordByIndex: GetRecordByIndex::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPBDA_Services as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IPBDA_Services {}
windows_core::imp::define_interface!(IPMT, IPMT_Vtbl, 0x01f3b398_9527_4736_94db_5195878e97a8);
windows_core::imp::interface_hierarchy!(IPMT, windows_core::IUnknown);
impl IPMT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetProgramNumber(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetProgramNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetPcrPid(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPcrPid)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn GetCountOfRecords(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfRecords)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordStreamType(&self, dwrecordindex: u32) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordStreamType)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordElementaryPid(&self, dwrecordindex: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordElementaryPid)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordCountOfDescriptors)(windows_core::Interface::as_raw(self), dwrecordindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwdescindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRecordDescriptorByIndex)(windows_core::Interface::as_raw(self), dwrecordindex, dwdescindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordDescriptorByTag)(windows_core::Interface::as_raw(self), dwrecordindex, btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn QueryServiceGatewayInfo(&self, ppdsmcclist: *mut *mut DSMCC_ELEMENT, puicount: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).QueryServiceGatewayInfo)(windows_core::Interface::as_raw(self), ppdsmcclist as _, puicount as _).ok() }
    }
    pub unsafe fn QueryMPEInfo(&self, ppmpelist: *mut *mut MPE_ELEMENT, puicount: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).QueryMPEInfo)(windows_core::Interface::as_raw(self), ppmpelist as _, puicount as _).ok() }
    }
    pub unsafe fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForNextTable)(windows_core::Interface::as_raw(self), hnexttableavailable).ok() }
    }
    pub unsafe fn GetNextTable(&self) -> windows_core::Result<IPMT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNextTable)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForWhenCurrent)(windows_core::Interface::as_raw(self), hnexttableiscurrent).ok() }
    }
    pub unsafe fn ConvertNextToCurrent(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ConvertNextToCurrent)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IPMT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetProgramNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetPcrPid: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetCountOfRecords: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetRecordStreamType: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u8) -> windows_core::HRESULT,
    pub GetRecordElementaryPid: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetRecordCountOfDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32) -> windows_core::HRESULT,
    pub GetRecordDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRecordDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub QueryServiceGatewayInfo: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut DSMCC_ELEMENT, *mut u32) -> windows_core::HRESULT,
    pub QueryMPEInfo: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut MPE_ELEMENT, *mut u32) -> windows_core::HRESULT,
    pub RegisterForNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub GetNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForWhenCurrent: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub ConvertNextToCurrent: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IPMT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetProgramNumber(&self) -> windows_core::Result<u16>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetPcrPid(&self) -> windows_core::Result<u16>;
    fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn GetCountOfRecords(&self) -> windows_core::Result<u16>;
    fn GetRecordStreamType(&self, dwrecordindex: u32) -> windows_core::Result<u8>;
    fn GetRecordElementaryPid(&self, dwrecordindex: u32) -> windows_core::Result<u16>;
    fn GetRecordCountOfDescriptors(&self, dwrecordindex: u32) -> windows_core::Result<u32>;
    fn GetRecordDescriptorByIndex(&self, dwrecordindex: u32, dwdescindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetRecordDescriptorByTag(&self, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn QueryServiceGatewayInfo(&self, ppdsmcclist: *mut *mut DSMCC_ELEMENT, puicount: *mut u32) -> windows_core::Result<()>;
    fn QueryMPEInfo(&self, ppmpelist: *mut *mut MPE_ELEMENT, puicount: *mut u32) -> windows_core::Result<()>;
    fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn GetNextTable(&self) -> windows_core::Result<IPMT>;
    fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn ConvertNextToCurrent(&self) -> windows_core::Result<()>;
}
impl IPMT_Vtbl {
    pub const fn new<Identity: IPMT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPMT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetProgramNumber<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPMT_Impl::GetProgramNumber(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPMT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPcrPid<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppidval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPMT_Impl::GetPcrPid(this) {
                    Ok(ok__) => {
                        ppidval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPMT_Impl::GetCountOfTableDescriptors(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPMT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPMT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn GetCountOfRecords<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPMT_Impl::GetCountOfRecords(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordStreamType<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPMT_Impl::GetRecordStreamType(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordElementaryPid<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, ppidval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPMT_Impl::GetRecordElementaryPid(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        ppidval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordCountOfDescriptors<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPMT_Impl::GetRecordCountOfDescriptors(this, core::mem::transmute_copy(&dwrecordindex)) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByIndex<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, dwdescindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPMT_Impl::GetRecordDescriptorByIndex(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&dwdescindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRecordDescriptorByTag<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwrecordindex: u32, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPMT_Impl::GetRecordDescriptorByTag(this, core::mem::transmute_copy(&dwrecordindex), core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn QueryServiceGatewayInfo<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppdsmcclist: *mut *mut DSMCC_ELEMENT, puicount: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPMT_Impl::QueryServiceGatewayInfo(this, core::mem::transmute_copy(&ppdsmcclist), core::mem::transmute_copy(&puicount)).into()
            }
        }
        unsafe extern "system" fn QueryMPEInfo<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppmpelist: *mut *mut MPE_ELEMENT, puicount: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPMT_Impl::QueryMPEInfo(this, core::mem::transmute_copy(&ppmpelist), core::mem::transmute_copy(&puicount)).into()
            }
        }
        unsafe extern "system" fn RegisterForNextTable<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPMT_Impl::RegisterForNextTable(this, core::mem::transmute_copy(&hnexttableavailable)).into()
            }
        }
        unsafe extern "system" fn GetNextTable<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pppmt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPMT_Impl::GetNextTable(this) {
                    Ok(ok__) => {
                        pppmt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RegisterForWhenCurrent<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPMT_Impl::RegisterForWhenCurrent(this, core::mem::transmute_copy(&hnexttableiscurrent)).into()
            }
        }
        unsafe extern "system" fn ConvertNextToCurrent<Identity: IPMT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPMT_Impl::ConvertNextToCurrent(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetProgramNumber: GetProgramNumber::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetPcrPid: GetPcrPid::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
            GetCountOfRecords: GetCountOfRecords::<Identity, OFFSET>,
            GetRecordStreamType: GetRecordStreamType::<Identity, OFFSET>,
            GetRecordElementaryPid: GetRecordElementaryPid::<Identity, OFFSET>,
            GetRecordCountOfDescriptors: GetRecordCountOfDescriptors::<Identity, OFFSET>,
            GetRecordDescriptorByIndex: GetRecordDescriptorByIndex::<Identity, OFFSET>,
            GetRecordDescriptorByTag: GetRecordDescriptorByTag::<Identity, OFFSET>,
            QueryServiceGatewayInfo: QueryServiceGatewayInfo::<Identity, OFFSET>,
            QueryMPEInfo: QueryMPEInfo::<Identity, OFFSET>,
            RegisterForNextTable: RegisterForNextTable::<Identity, OFFSET>,
            GetNextTable: GetNextTable::<Identity, OFFSET>,
            RegisterForWhenCurrent: RegisterForWhenCurrent::<Identity, OFFSET>,
            ConvertNextToCurrent: ConvertNextToCurrent::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPMT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IPMT {}
windows_core::imp::define_interface!(IPSITables, IPSITables_Vtbl, 0x919f24c5_7b14_42ac_a4b0_2ae08daf00ac);
windows_core::imp::interface_hierarchy!(IPSITables, windows_core::IUnknown);
impl IPSITables {
    pub unsafe fn GetTable(&self, dwtsid: u32, dwtid_pid: u32, dwhashedver: u32, dwpara4: u32) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTable)(windows_core::Interface::as_raw(self), dwtsid, dwtid_pid, dwhashedver, dwpara4, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IPSITables_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetTable: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32, u32, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IPSITables_Impl: windows_core::IUnknownImpl {
    fn GetTable(&self, dwtsid: u32, dwtid_pid: u32, dwhashedver: u32, dwpara4: u32) -> windows_core::Result<windows_core::IUnknown>;
}
impl IPSITables_Vtbl {
    pub const fn new<Identity: IPSITables_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetTable<Identity: IPSITables_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwtsid: u32, dwtid_pid: u32, dwhashedver: u32, dwpara4: u32, ppiunknown: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPSITables_Impl::GetTable(this, core::mem::transmute_copy(&dwtsid), core::mem::transmute_copy(&dwtid_pid), core::mem::transmute_copy(&dwhashedver), core::mem::transmute_copy(&dwpara4)) {
                    Ok(ok__) => {
                        ppiunknown.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), GetTable: GetTable::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPSITables as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IPSITables {}
windows_core::imp::define_interface!(IPTFilterLicenseRenewal, IPTFilterLicenseRenewal_Vtbl, 0x26d836a5_0c15_44c7_ac59_b0da8728f240);
windows_core::imp::interface_hierarchy!(IPTFilterLicenseRenewal, windows_core::IUnknown);
impl IPTFilterLicenseRenewal {
    pub unsafe fn RenewLicenses<P0, P1>(&self, wszfilename: P0, wszexpiredkid: P1, dwcallersid: u32, bhighpriority: bool) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::PCWSTR>,
        P1: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe { (windows_core::Interface::vtable(self).RenewLicenses)(windows_core::Interface::as_raw(self), wszfilename.param().abi(), wszexpiredkid.param().abi(), dwcallersid, bhighpriority.into()).ok() }
    }
    pub unsafe fn CancelLicenseRenewal(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).CancelLicenseRenewal)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IPTFilterLicenseRenewal_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub RenewLicenses: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::PCWSTR, windows_core::PCWSTR, u32, windows_core::BOOL) -> windows_core::HRESULT,
    pub CancelLicenseRenewal: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IPTFilterLicenseRenewal_Impl: windows_core::IUnknownImpl {
    fn RenewLicenses(&self, wszfilename: &windows_core::PCWSTR, wszexpiredkid: &windows_core::PCWSTR, dwcallersid: u32, bhighpriority: windows_core::BOOL) -> windows_core::Result<()>;
    fn CancelLicenseRenewal(&self) -> windows_core::Result<()>;
}
impl IPTFilterLicenseRenewal_Vtbl {
    pub const fn new<Identity: IPTFilterLicenseRenewal_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn RenewLicenses<Identity: IPTFilterLicenseRenewal_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, wszfilename: windows_core::PCWSTR, wszexpiredkid: windows_core::PCWSTR, dwcallersid: u32, bhighpriority: windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPTFilterLicenseRenewal_Impl::RenewLicenses(this, core::mem::transmute(&wszfilename), core::mem::transmute(&wszexpiredkid), core::mem::transmute_copy(&dwcallersid), core::mem::transmute_copy(&bhighpriority)).into()
            }
        }
        unsafe extern "system" fn CancelLicenseRenewal<Identity: IPTFilterLicenseRenewal_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPTFilterLicenseRenewal_Impl::CancelLicenseRenewal(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            RenewLicenses: RenewLicenses::<Identity, OFFSET>,
            CancelLicenseRenewal: CancelLicenseRenewal::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPTFilterLicenseRenewal as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IPTFilterLicenseRenewal {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IPersistTuneXml, IPersistTuneXml_Vtbl, 0x0754cd31_8d15_47a9_8215_d20064157244);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IPersistTuneXml {
    type Target = super::super::super::System::Com::IPersist;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IPersistTuneXml, windows_core::IUnknown, super::super::super::System::Com::IPersist);
#[cfg(feature = "Win32_System_Com")]
impl IPersistTuneXml {
    pub unsafe fn InitNew(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).InitNew)(windows_core::Interface::as_raw(self)).ok() }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Load(&self, varvalue: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Load)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varvalue)).ok() }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Save(&self) -> windows_core::Result<super::super::super::System::Variant::VARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Save)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IPersistTuneXml_Vtbl {
    pub base__: super::super::super::System::Com::IPersist_Vtbl,
    pub InitNew: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Load: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Load: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Save: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Save: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IPersistTuneXml_Impl: super::super::super::System::Com::IPersist_Impl {
    fn InitNew(&self) -> windows_core::Result<()>;
    fn Load(&self, varvalue: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn Save(&self) -> windows_core::Result<super::super::super::System::Variant::VARIANT>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IPersistTuneXml_Vtbl {
    pub const fn new<Identity: IPersistTuneXml_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn InitNew<Identity: IPersistTuneXml_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPersistTuneXml_Impl::InitNew(this).into()
            }
        }
        unsafe extern "system" fn Load<Identity: IPersistTuneXml_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varvalue: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IPersistTuneXml_Impl::Load(this, core::mem::transmute(&varvalue)).into()
            }
        }
        unsafe extern "system" fn Save<Identity: IPersistTuneXml_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pvarfragment: *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPersistTuneXml_Impl::Save(this) {
                    Ok(ok__) => {
                        pvarfragment.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::super::super::System::Com::IPersist_Vtbl::new::<Identity, OFFSET>(),
            InitNew: InitNew::<Identity, OFFSET>,
            Load: Load::<Identity, OFFSET>,
            Save: Save::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPersistTuneXml as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IPersist as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IPersistTuneXml {}
windows_core::imp::define_interface!(IPersistTuneXmlUtility, IPersistTuneXmlUtility_Vtbl, 0x990237ae_ac11_4614_be8f_dd217a4cb4cb);
windows_core::imp::interface_hierarchy!(IPersistTuneXmlUtility, windows_core::IUnknown);
impl IPersistTuneXmlUtility {
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Deserialize(&self, varvalue: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Deserialize)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varvalue), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IPersistTuneXmlUtility_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Deserialize: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Deserialize: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IPersistTuneXmlUtility_Impl: windows_core::IUnknownImpl {
    fn Deserialize(&self, varvalue: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<windows_core::IUnknown>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IPersistTuneXmlUtility_Vtbl {
    pub const fn new<Identity: IPersistTuneXmlUtility_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Deserialize<Identity: IPersistTuneXmlUtility_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varvalue: super::super::super::System::Variant::VARIANT, ppobject: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPersistTuneXmlUtility_Impl::Deserialize(this, core::mem::transmute(&varvalue)) {
                    Ok(ok__) => {
                        ppobject.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), Deserialize: Deserialize::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPersistTuneXmlUtility as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IPersistTuneXmlUtility {}
windows_core::imp::define_interface!(IPersistTuneXmlUtility2, IPersistTuneXmlUtility2_Vtbl, 0x992e165f_ea24_4b2f_9a1d_009d92120451);
impl core::ops::Deref for IPersistTuneXmlUtility2 {
    type Target = IPersistTuneXmlUtility;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IPersistTuneXmlUtility2, windows_core::IUnknown, IPersistTuneXmlUtility);
impl IPersistTuneXmlUtility2 {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn Serialize<P0>(&self, pitunerequest: P0) -> windows_core::Result<windows_core::BSTR>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Serialize)(windows_core::Interface::as_raw(self), pitunerequest.param().abi(), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IPersistTuneXmlUtility2_Vtbl {
    pub base__: IPersistTuneXmlUtility_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub Serialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    Serialize: usize,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IPersistTuneXmlUtility2_Impl: IPersistTuneXmlUtility_Impl {
    fn Serialize(&self, pitunerequest: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<windows_core::BSTR>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IPersistTuneXmlUtility2_Vtbl {
    pub const fn new<Identity: IPersistTuneXmlUtility2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Serialize<Identity: IPersistTuneXmlUtility2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pitunerequest: *mut core::ffi::c_void, pstring: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IPersistTuneXmlUtility2_Impl::Serialize(this, core::mem::transmute_copy(&pitunerequest)) {
                    Ok(ok__) => {
                        pstring.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: IPersistTuneXmlUtility_Vtbl::new::<Identity, OFFSET>(), Serialize: Serialize::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IPersistTuneXmlUtility2 as windows_core::Interface>::IID || iid == &<IPersistTuneXmlUtility as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IPersistTuneXmlUtility2 {}
windows_core::imp::define_interface!(IRegisterTuner, IRegisterTuner_Vtbl, 0x359b3901_572c_4854_bb49_cdef66606a25);
windows_core::imp::interface_hierarchy!(IRegisterTuner, windows_core::IUnknown);
impl IRegisterTuner {
    pub unsafe fn Register<P0, P1>(&self, ptuner: P0, pgraph: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ITuner>,
        P1: windows_core::Param<super::IGraphBuilder>,
    {
        unsafe { (windows_core::Interface::vtable(self).Register)(windows_core::Interface::as_raw(self), ptuner.param().abi(), pgraph.param().abi()).ok() }
    }
    pub unsafe fn Unregister(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Unregister)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IRegisterTuner_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Register: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Unregister: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IRegisterTuner_Impl: windows_core::IUnknownImpl {
    fn Register(&self, ptuner: windows_core::Ref<'_, ITuner>, pgraph: windows_core::Ref<'_, super::IGraphBuilder>) -> windows_core::Result<()>;
    fn Unregister(&self) -> windows_core::Result<()>;
}
impl IRegisterTuner_Vtbl {
    pub const fn new<Identity: IRegisterTuner_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Register<Identity: IRegisterTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ptuner: *mut core::ffi::c_void, pgraph: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IRegisterTuner_Impl::Register(this, core::mem::transmute_copy(&ptuner), core::mem::transmute_copy(&pgraph)).into()
            }
        }
        unsafe extern "system" fn Unregister<Identity: IRegisterTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IRegisterTuner_Impl::Unregister(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Register: Register::<Identity, OFFSET>,
            Unregister: Unregister::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IRegisterTuner as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IRegisterTuner {}
windows_core::imp::define_interface!(ISBE2Crossbar, ISBE2Crossbar_Vtbl, 0x547b6d26_3226_487e_8253_8aa168749434);
windows_core::imp::interface_hierarchy!(ISBE2Crossbar, windows_core::IUnknown);
impl ISBE2Crossbar {
    pub unsafe fn EnableDefaultMode(&self, defaultflags: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).EnableDefaultMode)(windows_core::Interface::as_raw(self), defaultflags).ok() }
    }
    pub unsafe fn GetInitialProfile(&self) -> windows_core::Result<ISBE2MediaTypeProfile> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetInitialProfile)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetOutputProfile<P0>(&self, pprofile: P0, pcoutputpins: *mut u32, ppoutputpins: *mut Option<super::IPin>) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISBE2MediaTypeProfile>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetOutputProfile)(windows_core::Interface::as_raw(self), pprofile.param().abi(), pcoutputpins as _, core::mem::transmute(ppoutputpins)).ok() }
    }
    pub unsafe fn EnumStreams(&self) -> windows_core::Result<ISBE2EnumStream> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumStreams)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISBE2Crossbar_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub EnableDefaultMode: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub GetInitialProfile: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetOutputProfile: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub EnumStreams: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait ISBE2Crossbar_Impl: windows_core::IUnknownImpl {
    fn EnableDefaultMode(&self, defaultflags: u32) -> windows_core::Result<()>;
    fn GetInitialProfile(&self) -> windows_core::Result<ISBE2MediaTypeProfile>;
    fn SetOutputProfile(&self, pprofile: windows_core::Ref<'_, ISBE2MediaTypeProfile>, pcoutputpins: *mut u32, ppoutputpins: windows_core::OutRef<'_, super::IPin>) -> windows_core::Result<()>;
    fn EnumStreams(&self) -> windows_core::Result<ISBE2EnumStream>;
}
impl ISBE2Crossbar_Vtbl {
    pub const fn new<Identity: ISBE2Crossbar_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn EnableDefaultMode<Identity: ISBE2Crossbar_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, defaultflags: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2Crossbar_Impl::EnableDefaultMode(this, core::mem::transmute_copy(&defaultflags)).into()
            }
        }
        unsafe extern "system" fn GetInitialProfile<Identity: ISBE2Crossbar_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppprofile: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISBE2Crossbar_Impl::GetInitialProfile(this) {
                    Ok(ok__) => {
                        ppprofile.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetOutputProfile<Identity: ISBE2Crossbar_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pprofile: *mut core::ffi::c_void, pcoutputpins: *mut u32, ppoutputpins: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2Crossbar_Impl::SetOutputProfile(this, core::mem::transmute_copy(&pprofile), core::mem::transmute_copy(&pcoutputpins), core::mem::transmute_copy(&ppoutputpins)).into()
            }
        }
        unsafe extern "system" fn EnumStreams<Identity: ISBE2Crossbar_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppstreams: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISBE2Crossbar_Impl::EnumStreams(this) {
                    Ok(ok__) => {
                        ppstreams.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            EnableDefaultMode: EnableDefaultMode::<Identity, OFFSET>,
            GetInitialProfile: GetInitialProfile::<Identity, OFFSET>,
            SetOutputProfile: SetOutputProfile::<Identity, OFFSET>,
            EnumStreams: EnumStreams::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISBE2Crossbar as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ISBE2Crossbar {}
windows_core::imp::define_interface!(ISBE2EnumStream, ISBE2EnumStream_Vtbl, 0xf7611092_9fbc_46ec_a7c7_548ea78b71a4);
windows_core::imp::interface_hierarchy!(ISBE2EnumStream, windows_core::IUnknown);
impl ISBE2EnumStream {
    pub unsafe fn Next(&self, pstreamdesc: &mut [SBE2_STREAM_DESC], pcreceived: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Next)(windows_core::Interface::as_raw(self), pstreamdesc.len().try_into().unwrap(), core::mem::transmute(pstreamdesc.as_ptr()), pcreceived as _).ok() }
    }
    pub unsafe fn Skip(&self, crecords: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Skip)(windows_core::Interface::as_raw(self), crecords).ok() }
    }
    pub unsafe fn Reset(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Reset)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<ISBE2EnumStream> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISBE2EnumStream_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Next: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut SBE2_STREAM_DESC, *mut u32) -> windows_core::HRESULT,
    pub Skip: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub Reset: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait ISBE2EnumStream_Impl: windows_core::IUnknownImpl {
    fn Next(&self, crequest: u32, pstreamdesc: *mut SBE2_STREAM_DESC, pcreceived: *mut u32) -> windows_core::Result<()>;
    fn Skip(&self, crecords: u32) -> windows_core::Result<()>;
    fn Reset(&self) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<ISBE2EnumStream>;
}
impl ISBE2EnumStream_Vtbl {
    pub const fn new<Identity: ISBE2EnumStream_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Next<Identity: ISBE2EnumStream_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, crequest: u32, pstreamdesc: *mut SBE2_STREAM_DESC, pcreceived: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2EnumStream_Impl::Next(this, core::mem::transmute_copy(&crequest), core::mem::transmute_copy(&pstreamdesc), core::mem::transmute_copy(&pcreceived)).into()
            }
        }
        unsafe extern "system" fn Skip<Identity: ISBE2EnumStream_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, crecords: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2EnumStream_Impl::Skip(this, core::mem::transmute_copy(&crecords)).into()
            }
        }
        unsafe extern "system" fn Reset<Identity: ISBE2EnumStream_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2EnumStream_Impl::Reset(this).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: ISBE2EnumStream_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppienumstream: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISBE2EnumStream_Impl::Clone(this) {
                    Ok(ok__) => {
                        ppienumstream.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Next: Next::<Identity, OFFSET>,
            Skip: Skip::<Identity, OFFSET>,
            Reset: Reset::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISBE2EnumStream as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ISBE2EnumStream {}
windows_core::imp::define_interface!(ISBE2FileScan, ISBE2FileScan_Vtbl, 0x3e2bf5a5_4f96_4899_a1a3_75e8be9a5ac0);
windows_core::imp::interface_hierarchy!(ISBE2FileScan, windows_core::IUnknown);
impl ISBE2FileScan {
    pub unsafe fn RepairFile<P0>(&self, filename: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe { (windows_core::Interface::vtable(self).RepairFile)(windows_core::Interface::as_raw(self), filename.param().abi()).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISBE2FileScan_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub RepairFile: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::PCWSTR) -> windows_core::HRESULT,
}
pub trait ISBE2FileScan_Impl: windows_core::IUnknownImpl {
    fn RepairFile(&self, filename: &windows_core::PCWSTR) -> windows_core::Result<()>;
}
impl ISBE2FileScan_Vtbl {
    pub const fn new<Identity: ISBE2FileScan_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn RepairFile<Identity: ISBE2FileScan_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, filename: windows_core::PCWSTR) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2FileScan_Impl::RepairFile(this, core::mem::transmute(&filename)).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), RepairFile: RepairFile::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISBE2FileScan as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ISBE2FileScan {}
windows_core::imp::define_interface!(ISBE2GlobalEvent, ISBE2GlobalEvent_Vtbl, 0xcaede759_b6b1_11db_a578_0018f3fa24c6);
windows_core::imp::interface_hierarchy!(ISBE2GlobalEvent, windows_core::IUnknown);
impl ISBE2GlobalEvent {
    pub unsafe fn GetEvent(&self, idevt: *const windows_core::GUID, param1: u32, param2: u32, param3: u32, param4: u32, pspanning: *mut windows_core::BOOL, pcb: *mut u32, pb: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetEvent)(windows_core::Interface::as_raw(self), idevt, param1, param2, param3, param4, pspanning as _, pcb as _, pb as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISBE2GlobalEvent_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetEvent: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID, u32, u32, u32, u32, *mut windows_core::BOOL, *mut u32, *mut u8) -> windows_core::HRESULT,
}
pub trait ISBE2GlobalEvent_Impl: windows_core::IUnknownImpl {
    fn GetEvent(&self, idevt: *const windows_core::GUID, param1: u32, param2: u32, param3: u32, param4: u32, pspanning: *mut windows_core::BOOL, pcb: *mut u32, pb: *mut u8) -> windows_core::Result<()>;
}
impl ISBE2GlobalEvent_Vtbl {
    pub const fn new<Identity: ISBE2GlobalEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetEvent<Identity: ISBE2GlobalEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, idevt: *const windows_core::GUID, param1: u32, param2: u32, param3: u32, param4: u32, pspanning: *mut windows_core::BOOL, pcb: *mut u32, pb: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2GlobalEvent_Impl::GetEvent(this, core::mem::transmute_copy(&idevt), core::mem::transmute_copy(&param1), core::mem::transmute_copy(&param2), core::mem::transmute_copy(&param3), core::mem::transmute_copy(&param4), core::mem::transmute_copy(&pspanning), core::mem::transmute_copy(&pcb), core::mem::transmute_copy(&pb)).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), GetEvent: GetEvent::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISBE2GlobalEvent as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ISBE2GlobalEvent {}
windows_core::imp::define_interface!(ISBE2GlobalEvent2, ISBE2GlobalEvent2_Vtbl, 0x6d8309bf_00fe_4506_8b03_f8c65b5c9b39);
impl core::ops::Deref for ISBE2GlobalEvent2 {
    type Target = ISBE2GlobalEvent;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(ISBE2GlobalEvent2, windows_core::IUnknown, ISBE2GlobalEvent);
impl ISBE2GlobalEvent2 {
    pub unsafe fn GetEventEx(&self, idevt: *const windows_core::GUID, param1: u32, param2: u32, param3: u32, param4: u32, pspanning: *mut windows_core::BOOL, pcb: *mut u32, pb: *mut u8, pstreamtime: *mut i64) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetEventEx)(windows_core::Interface::as_raw(self), idevt, param1, param2, param3, param4, pspanning as _, pcb as _, pb as _, pstreamtime as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISBE2GlobalEvent2_Vtbl {
    pub base__: ISBE2GlobalEvent_Vtbl,
    pub GetEventEx: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID, u32, u32, u32, u32, *mut windows_core::BOOL, *mut u32, *mut u8, *mut i64) -> windows_core::HRESULT,
}
pub trait ISBE2GlobalEvent2_Impl: ISBE2GlobalEvent_Impl {
    fn GetEventEx(&self, idevt: *const windows_core::GUID, param1: u32, param2: u32, param3: u32, param4: u32, pspanning: *mut windows_core::BOOL, pcb: *mut u32, pb: *mut u8, pstreamtime: *mut i64) -> windows_core::Result<()>;
}
impl ISBE2GlobalEvent2_Vtbl {
    pub const fn new<Identity: ISBE2GlobalEvent2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetEventEx<Identity: ISBE2GlobalEvent2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, idevt: *const windows_core::GUID, param1: u32, param2: u32, param3: u32, param4: u32, pspanning: *mut windows_core::BOOL, pcb: *mut u32, pb: *mut u8, pstreamtime: *mut i64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2GlobalEvent2_Impl::GetEventEx(this, core::mem::transmute_copy(&idevt), core::mem::transmute_copy(&param1), core::mem::transmute_copy(&param2), core::mem::transmute_copy(&param3), core::mem::transmute_copy(&param4), core::mem::transmute_copy(&pspanning), core::mem::transmute_copy(&pcb), core::mem::transmute_copy(&pb), core::mem::transmute_copy(&pstreamtime)).into()
            }
        }
        Self { base__: ISBE2GlobalEvent_Vtbl::new::<Identity, OFFSET>(), GetEventEx: GetEventEx::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISBE2GlobalEvent2 as windows_core::Interface>::IID || iid == &<ISBE2GlobalEvent as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ISBE2GlobalEvent2 {}
windows_core::imp::define_interface!(ISBE2MediaTypeProfile, ISBE2MediaTypeProfile_Vtbl, 0xf238267d_4671_40d7_997e_25dc32cfed2a);
windows_core::imp::interface_hierarchy!(ISBE2MediaTypeProfile, windows_core::IUnknown);
impl ISBE2MediaTypeProfile {
    pub unsafe fn GetStreamCount(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetStreamCount)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub unsafe fn GetStream(&self, index: u32) -> windows_core::Result<*mut super::super::MediaFoundation::AM_MEDIA_TYPE> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetStream)(windows_core::Interface::as_raw(self), index, &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub unsafe fn AddStream(&self, pmediatype: *const super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AddStream)(windows_core::Interface::as_raw(self), core::mem::transmute(pmediatype)).ok() }
    }
    pub unsafe fn DeleteStream(&self, index: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).DeleteStream)(windows_core::Interface::as_raw(self), index).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISBE2MediaTypeProfile_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetStreamCount: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub GetStream: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_Media_MediaFoundation"))]
    GetStream: usize,
    #[cfg(feature = "Win32_Media_MediaFoundation")]
    pub AddStream: unsafe extern "system" fn(*mut core::ffi::c_void, *const super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_Media_MediaFoundation"))]
    AddStream: usize,
    pub DeleteStream: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_Media_MediaFoundation")]
pub trait ISBE2MediaTypeProfile_Impl: windows_core::IUnknownImpl {
    fn GetStreamCount(&self) -> windows_core::Result<u32>;
    fn GetStream(&self, index: u32) -> windows_core::Result<*mut super::super::MediaFoundation::AM_MEDIA_TYPE>;
    fn AddStream(&self, pmediatype: *const super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::Result<()>;
    fn DeleteStream(&self, index: u32) -> windows_core::Result<()>;
}
#[cfg(feature = "Win32_Media_MediaFoundation")]
impl ISBE2MediaTypeProfile_Vtbl {
    pub const fn new<Identity: ISBE2MediaTypeProfile_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetStreamCount<Identity: ISBE2MediaTypeProfile_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pcount: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISBE2MediaTypeProfile_Impl::GetStreamCount(this) {
                    Ok(ok__) => {
                        pcount.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetStream<Identity: ISBE2MediaTypeProfile_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, index: u32, ppmediatype: *mut *mut super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISBE2MediaTypeProfile_Impl::GetStream(this, core::mem::transmute_copy(&index)) {
                    Ok(ok__) => {
                        ppmediatype.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn AddStream<Identity: ISBE2MediaTypeProfile_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pmediatype: *const super::super::MediaFoundation::AM_MEDIA_TYPE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2MediaTypeProfile_Impl::AddStream(this, core::mem::transmute_copy(&pmediatype)).into()
            }
        }
        unsafe extern "system" fn DeleteStream<Identity: ISBE2MediaTypeProfile_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, index: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2MediaTypeProfile_Impl::DeleteStream(this, core::mem::transmute_copy(&index)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetStreamCount: GetStreamCount::<Identity, OFFSET>,
            GetStream: GetStream::<Identity, OFFSET>,
            AddStream: AddStream::<Identity, OFFSET>,
            DeleteStream: DeleteStream::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISBE2MediaTypeProfile as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_Media_MediaFoundation")]
impl windows_core::RuntimeName for ISBE2MediaTypeProfile {}
windows_core::imp::define_interface!(ISBE2SpanningEvent, ISBE2SpanningEvent_Vtbl, 0xcaede760_b6b1_11db_a578_0018f3fa24c6);
windows_core::imp::interface_hierarchy!(ISBE2SpanningEvent, windows_core::IUnknown);
impl ISBE2SpanningEvent {
    pub unsafe fn GetEvent(&self, idevt: *const windows_core::GUID, streamid: u32, pcb: *mut u32, pb: *mut u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetEvent)(windows_core::Interface::as_raw(self), idevt, streamid, pcb as _, pb as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISBE2SpanningEvent_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetEvent: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID, u32, *mut u32, *mut u8) -> windows_core::HRESULT,
}
pub trait ISBE2SpanningEvent_Impl: windows_core::IUnknownImpl {
    fn GetEvent(&self, idevt: *const windows_core::GUID, streamid: u32, pcb: *mut u32, pb: *mut u8) -> windows_core::Result<()>;
}
impl ISBE2SpanningEvent_Vtbl {
    pub const fn new<Identity: ISBE2SpanningEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetEvent<Identity: ISBE2SpanningEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, idevt: *const windows_core::GUID, streamid: u32, pcb: *mut u32, pb: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2SpanningEvent_Impl::GetEvent(this, core::mem::transmute_copy(&idevt), core::mem::transmute_copy(&streamid), core::mem::transmute_copy(&pcb), core::mem::transmute_copy(&pb)).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), GetEvent: GetEvent::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISBE2SpanningEvent as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ISBE2SpanningEvent {}
windows_core::imp::define_interface!(ISBE2StreamMap, ISBE2StreamMap_Vtbl, 0x667c7745_85b1_4c55_ae55_4e25056159fc);
windows_core::imp::interface_hierarchy!(ISBE2StreamMap, windows_core::IUnknown);
impl ISBE2StreamMap {
    pub unsafe fn MapStream(&self, stream: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).MapStream)(windows_core::Interface::as_raw(self), stream).ok() }
    }
    pub unsafe fn UnmapStream(&self, stream: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).UnmapStream)(windows_core::Interface::as_raw(self), stream).ok() }
    }
    pub unsafe fn EnumMappedStreams(&self) -> windows_core::Result<ISBE2EnumStream> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumMappedStreams)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISBE2StreamMap_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub MapStream: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub UnmapStream: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub EnumMappedStreams: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait ISBE2StreamMap_Impl: windows_core::IUnknownImpl {
    fn MapStream(&self, stream: u32) -> windows_core::Result<()>;
    fn UnmapStream(&self, stream: u32) -> windows_core::Result<()>;
    fn EnumMappedStreams(&self) -> windows_core::Result<ISBE2EnumStream>;
}
impl ISBE2StreamMap_Vtbl {
    pub const fn new<Identity: ISBE2StreamMap_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn MapStream<Identity: ISBE2StreamMap_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, stream: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2StreamMap_Impl::MapStream(this, core::mem::transmute_copy(&stream)).into()
            }
        }
        unsafe extern "system" fn UnmapStream<Identity: ISBE2StreamMap_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, stream: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISBE2StreamMap_Impl::UnmapStream(this, core::mem::transmute_copy(&stream)).into()
            }
        }
        unsafe extern "system" fn EnumMappedStreams<Identity: ISBE2StreamMap_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppstreams: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISBE2StreamMap_Impl::EnumMappedStreams(this) {
                    Ok(ok__) => {
                        ppstreams.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            MapStream: MapStream::<Identity, OFFSET>,
            UnmapStream: UnmapStream::<Identity, OFFSET>,
            EnumMappedStreams: EnumMappedStreams::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISBE2StreamMap as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ISBE2StreamMap {}
windows_core::imp::define_interface!(ISCTE_EAS, ISCTE_EAS_Vtbl, 0x1ff544d6_161d_4fae_9faa_4f9f492ae999);
windows_core::imp::interface_hierarchy!(ISCTE_EAS, windows_core::IUnknown);
impl ISCTE_EAS {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSequencyNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSequencyNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetProtocolVersion(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetProtocolVersion)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetEASEventID(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEASEventID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetOriginatorCode(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetOriginatorCode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetEASEventCodeLen(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEASEventCodeLen)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetEASEventCode(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetEASEventCode)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRawNatureOfActivationTextLen(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRawNatureOfActivationTextLen)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRawNatureOfActivationText(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRawNatureOfActivationText)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetNatureOfActivationText(&self, bstris0639code: &windows_core::BSTR) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNatureOfActivationText)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(bstris0639code), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetTimeRemaining(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTimeRemaining)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetStartTime(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetStartTime)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDuration(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDuration)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetAlertPriority(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetAlertPriority)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDetailsOOBSourceID(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDetailsOOBSourceID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDetailsMajor(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDetailsMajor)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDetailsMinor(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDetailsMinor)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetDetailsAudioOOBSourceID(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDetailsAudioOOBSourceID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetAlertText(&self, bstris0639code: &windows_core::BSTR) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetAlertText)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(bstris0639code), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn GetRawAlertTextLen(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRawAlertTextLen)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetRawAlertText(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetRawAlertText)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLocationCount(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetLocationCount)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLocationCodes(&self, bindex: u8, pbstate: *mut u8, pbcountysubdivision: *mut u8, pwcounty: *mut u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLocationCodes)(windows_core::Interface::as_raw(self), bindex, pbstate as _, pbcountysubdivision as _, pwcounty as _).ok() }
    }
    pub unsafe fn GetExceptionCount(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetExceptionCount)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetExceptionService(&self, bindex: u8, pbibref: *mut u8, pwfirst: *mut u16, pwsecond: *mut u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetExceptionService)(windows_core::Interface::as_raw(self), bindex, pbibref as _, pwfirst as _, pwsecond as _).ok() }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISCTE_EAS_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetSequencyNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetProtocolVersion: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetEASEventID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetOriginatorCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetEASEventCodeLen: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetEASEventCode: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRawNatureOfActivationTextLen: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetRawNatureOfActivationText: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetNatureOfActivationText: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTimeRemaining: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetStartTime: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetDuration: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetAlertPriority: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetDetailsOOBSourceID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetDetailsMajor: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetDetailsMinor: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetDetailsAudioOOBSourceID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetAlertText: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetRawAlertTextLen: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetRawAlertText: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLocationCount: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetLocationCodes: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8, *mut u8, *mut u16) -> windows_core::HRESULT,
    pub GetExceptionCount: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetExceptionService: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8, *mut u16, *mut u16) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait ISCTE_EAS_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetSequencyNumber(&self) -> windows_core::Result<u8>;
    fn GetProtocolVersion(&self) -> windows_core::Result<u8>;
    fn GetEASEventID(&self) -> windows_core::Result<u16>;
    fn GetOriginatorCode(&self) -> windows_core::Result<u8>;
    fn GetEASEventCodeLen(&self) -> windows_core::Result<u8>;
    fn GetEASEventCode(&self) -> windows_core::Result<u8>;
    fn GetRawNatureOfActivationTextLen(&self) -> windows_core::Result<u8>;
    fn GetRawNatureOfActivationText(&self) -> windows_core::Result<u8>;
    fn GetNatureOfActivationText(&self, bstris0639code: &windows_core::BSTR) -> windows_core::Result<windows_core::BSTR>;
    fn GetTimeRemaining(&self) -> windows_core::Result<u8>;
    fn GetStartTime(&self) -> windows_core::Result<u32>;
    fn GetDuration(&self) -> windows_core::Result<u16>;
    fn GetAlertPriority(&self) -> windows_core::Result<u8>;
    fn GetDetailsOOBSourceID(&self) -> windows_core::Result<u16>;
    fn GetDetailsMajor(&self) -> windows_core::Result<u16>;
    fn GetDetailsMinor(&self) -> windows_core::Result<u16>;
    fn GetDetailsAudioOOBSourceID(&self) -> windows_core::Result<u16>;
    fn GetAlertText(&self, bstris0639code: &windows_core::BSTR) -> windows_core::Result<windows_core::BSTR>;
    fn GetRawAlertTextLen(&self) -> windows_core::Result<u16>;
    fn GetRawAlertText(&self) -> windows_core::Result<u8>;
    fn GetLocationCount(&self) -> windows_core::Result<u8>;
    fn GetLocationCodes(&self, bindex: u8, pbstate: *mut u8, pbcountysubdivision: *mut u8, pwcounty: *mut u16) -> windows_core::Result<()>;
    fn GetExceptionCount(&self) -> windows_core::Result<u8>;
    fn GetExceptionService(&self, bindex: u8, pbibref: *mut u8, pwfirst: *mut u16, pwsecond: *mut u16) -> windows_core::Result<()>;
    fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
}
impl ISCTE_EAS_Vtbl {
    pub const fn new<Identity: ISCTE_EAS_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISCTE_EAS_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSequencyNumber<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetSequencyNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetProtocolVersion<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetProtocolVersion(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEASEventID<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetEASEventID(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetOriginatorCode<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetOriginatorCode(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEASEventCodeLen<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetEASEventCodeLen(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetEASEventCode<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetEASEventCode(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRawNatureOfActivationTextLen<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetRawNatureOfActivationTextLen(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRawNatureOfActivationText<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetRawNatureOfActivationText(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetNatureOfActivationText<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bstris0639code: *mut core::ffi::c_void, pbstrstring: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetNatureOfActivationText(this, core::mem::transmute(&bstris0639code)) {
                    Ok(ok__) => {
                        pbstrstring.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTimeRemaining<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetTimeRemaining(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetStartTime<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetStartTime(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDuration<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetDuration(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetAlertPriority<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetAlertPriority(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDetailsOOBSourceID<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetDetailsOOBSourceID(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDetailsMajor<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetDetailsMajor(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDetailsMinor<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetDetailsMinor(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetDetailsAudioOOBSourceID<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetDetailsAudioOOBSourceID(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetAlertText<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bstris0639code: *mut core::ffi::c_void, pbstrstring: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetAlertText(this, core::mem::transmute(&bstris0639code)) {
                    Ok(ok__) => {
                        pbstrstring.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRawAlertTextLen<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetRawAlertTextLen(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetRawAlertText<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetRawAlertText(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLocationCount<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetLocationCount(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLocationCodes<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, pbstate: *mut u8, pbcountysubdivision: *mut u8, pwcounty: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISCTE_EAS_Impl::GetLocationCodes(this, core::mem::transmute_copy(&bindex), core::mem::transmute_copy(&pbstate), core::mem::transmute_copy(&pbcountysubdivision), core::mem::transmute_copy(&pwcounty)).into()
            }
        }
        unsafe extern "system" fn GetExceptionCount<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetExceptionCount(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetExceptionService<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, pbibref: *mut u8, pwfirst: *mut u16, pwsecond: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISCTE_EAS_Impl::GetExceptionService(this, core::mem::transmute_copy(&bindex), core::mem::transmute_copy(&pbibref), core::mem::transmute_copy(&pwfirst), core::mem::transmute_copy(&pwsecond)).into()
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetCountOfTableDescriptors(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISCTE_EAS_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: ISCTE_EAS_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISCTE_EAS_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetSequencyNumber: GetSequencyNumber::<Identity, OFFSET>,
            GetProtocolVersion: GetProtocolVersion::<Identity, OFFSET>,
            GetEASEventID: GetEASEventID::<Identity, OFFSET>,
            GetOriginatorCode: GetOriginatorCode::<Identity, OFFSET>,
            GetEASEventCodeLen: GetEASEventCodeLen::<Identity, OFFSET>,
            GetEASEventCode: GetEASEventCode::<Identity, OFFSET>,
            GetRawNatureOfActivationTextLen: GetRawNatureOfActivationTextLen::<Identity, OFFSET>,
            GetRawNatureOfActivationText: GetRawNatureOfActivationText::<Identity, OFFSET>,
            GetNatureOfActivationText: GetNatureOfActivationText::<Identity, OFFSET>,
            GetTimeRemaining: GetTimeRemaining::<Identity, OFFSET>,
            GetStartTime: GetStartTime::<Identity, OFFSET>,
            GetDuration: GetDuration::<Identity, OFFSET>,
            GetAlertPriority: GetAlertPriority::<Identity, OFFSET>,
            GetDetailsOOBSourceID: GetDetailsOOBSourceID::<Identity, OFFSET>,
            GetDetailsMajor: GetDetailsMajor::<Identity, OFFSET>,
            GetDetailsMinor: GetDetailsMinor::<Identity, OFFSET>,
            GetDetailsAudioOOBSourceID: GetDetailsAudioOOBSourceID::<Identity, OFFSET>,
            GetAlertText: GetAlertText::<Identity, OFFSET>,
            GetRawAlertTextLen: GetRawAlertTextLen::<Identity, OFFSET>,
            GetRawAlertText: GetRawAlertText::<Identity, OFFSET>,
            GetLocationCount: GetLocationCount::<Identity, OFFSET>,
            GetLocationCodes: GetLocationCodes::<Identity, OFFSET>,
            GetExceptionCount: GetExceptionCount::<Identity, OFFSET>,
            GetExceptionService: GetExceptionService::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISCTE_EAS as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ISCTE_EAS {}
pub const ISDBSLocator: windows_core::GUID = windows_core::GUID::from_u128(0x6504afed_a629_455c_a7f1_04964dea5cc4);
pub const ISDB_BIT_PID: u32 = 36u32;
pub const ISDB_BIT_TID: u32 = 196u32;
pub const ISDB_CABLE_TV_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0xc974ddb5_41fe_4b25_9741_92f049f1d5d1);
pub const ISDB_CDT_PID: u32 = 41u32;
pub const ISDB_CDT_TID: u32 = 200u32;
pub const ISDB_EMM_TID: u32 = 133u32;
pub const ISDB_LDT_PID: u32 = 37u32;
pub const ISDB_LDT_TID: u32 = 199u32;
pub const ISDB_NBIT_MSG_TID: u32 = 197u32;
pub const ISDB_NBIT_PID: u32 = 37u32;
pub const ISDB_NBIT_REF_TID: u32 = 198u32;
pub const ISDB_SATELLITE_TV_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0xb0a4e6a0_6a1a_4b83_bb5b_903e1d90e6b6);
pub const ISDB_SDTT_ALT_PID: u32 = 40u32;
pub const ISDB_SDTT_PID: u32 = 35u32;
pub const ISDB_SDTT_TID: u32 = 195u32;
pub const ISDB_ST_TID: u32 = 114u32;
pub const ISDB_S_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0xa1e78202_1459_41b1_9ca9_2a92587a42cc);
pub const ISDB_TERRESTRIAL_TV_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0x95037f6f_3ac7_4452_b6c4_45a9ce9292a2);
pub const ISDB_T_NETWORK_TYPE: windows_core::GUID = windows_core::GUID::from_u128(0xfc3855a6_c901_4f2e_aba8_90815afc6c83);
windows_core::imp::define_interface!(ISIInbandEPG, ISIInbandEPG_Vtbl, 0xf90ad9d0_b854_4b68_9cc1_b2cc96119d85);
windows_core::imp::interface_hierarchy!(ISIInbandEPG, windows_core::IUnknown);
impl ISIInbandEPG {
    pub unsafe fn StartSIEPGScan(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).StartSIEPGScan)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn StopSIEPGScan(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).StopSIEPGScan)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn IsSIEPGScanRunning(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).IsSIEPGScanRunning)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISIInbandEPG_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub StartSIEPGScan: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub StopSIEPGScan: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub IsSIEPGScanRunning: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
}
pub trait ISIInbandEPG_Impl: windows_core::IUnknownImpl {
    fn StartSIEPGScan(&self) -> windows_core::Result<()>;
    fn StopSIEPGScan(&self) -> windows_core::Result<()>;
    fn IsSIEPGScanRunning(&self) -> windows_core::Result<windows_core::BOOL>;
}
impl ISIInbandEPG_Vtbl {
    pub const fn new<Identity: ISIInbandEPG_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn StartSIEPGScan<Identity: ISIInbandEPG_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISIInbandEPG_Impl::StartSIEPGScan(this).into()
            }
        }
        unsafe extern "system" fn StopSIEPGScan<Identity: ISIInbandEPG_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISIInbandEPG_Impl::StopSIEPGScan(this).into()
            }
        }
        unsafe extern "system" fn IsSIEPGScanRunning<Identity: ISIInbandEPG_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, brunning: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISIInbandEPG_Impl::IsSIEPGScanRunning(this) {
                    Ok(ok__) => {
                        brunning.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            StartSIEPGScan: StartSIEPGScan::<Identity, OFFSET>,
            StopSIEPGScan: StopSIEPGScan::<Identity, OFFSET>,
            IsSIEPGScanRunning: IsSIEPGScanRunning::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISIInbandEPG as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ISIInbandEPG {}
windows_core::imp::define_interface!(ISIInbandEPGEvent, ISIInbandEPGEvent_Vtbl, 0x7e47913a_5a89_423d_9a2b_e15168858934);
windows_core::imp::interface_hierarchy!(ISIInbandEPGEvent, windows_core::IUnknown);
impl ISIInbandEPGEvent {
    pub unsafe fn SIObjectEvent<P0>(&self, pidvb_eit: P0, dwtable_id: u32, dwservice_id: u32) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IDVB_EIT2>,
    {
        unsafe { (windows_core::Interface::vtable(self).SIObjectEvent)(windows_core::Interface::as_raw(self), pidvb_eit.param().abi(), dwtable_id, dwservice_id).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISIInbandEPGEvent_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub SIObjectEvent: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, u32, u32) -> windows_core::HRESULT,
}
pub trait ISIInbandEPGEvent_Impl: windows_core::IUnknownImpl {
    fn SIObjectEvent(&self, pidvb_eit: windows_core::Ref<'_, IDVB_EIT2>, dwtable_id: u32, dwservice_id: u32) -> windows_core::Result<()>;
}
impl ISIInbandEPGEvent_Vtbl {
    pub const fn new<Identity: ISIInbandEPGEvent_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SIObjectEvent<Identity: ISIInbandEPGEvent_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pidvb_eit: *mut core::ffi::c_void, dwtable_id: u32, dwservice_id: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISIInbandEPGEvent_Impl::SIObjectEvent(this, core::mem::transmute_copy(&pidvb_eit), core::mem::transmute_copy(&dwtable_id), core::mem::transmute_copy(&dwservice_id)).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), SIObjectEvent: SIObjectEvent::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISIInbandEPGEvent as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ISIInbandEPGEvent {}
windows_core::imp::define_interface!(IScanningTuner, IScanningTuner_Vtbl, 0x1dfd0a5c_0284_11d3_9d8e_00c04f72d980);
impl core::ops::Deref for IScanningTuner {
    type Target = ITuner;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IScanningTuner, windows_core::IUnknown, ITuner);
impl IScanningTuner {
    pub unsafe fn SeekUp(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SeekUp)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn SeekDown(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SeekDown)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn ScanUp(&self, millisecondspause: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ScanUp)(windows_core::Interface::as_raw(self), millisecondspause).ok() }
    }
    pub unsafe fn ScanDown(&self, millisecondspause: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ScanDown)(windows_core::Interface::as_raw(self), millisecondspause).ok() }
    }
    pub unsafe fn AutoProgram(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).AutoProgram)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IScanningTuner_Vtbl {
    pub base__: ITuner_Vtbl,
    pub SeekUp: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SeekDown: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ScanUp: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub ScanDown: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub AutoProgram: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IScanningTuner_Impl: ITuner_Impl {
    fn SeekUp(&self) -> windows_core::Result<()>;
    fn SeekDown(&self) -> windows_core::Result<()>;
    fn ScanUp(&self, millisecondspause: i32) -> windows_core::Result<()>;
    fn ScanDown(&self, millisecondspause: i32) -> windows_core::Result<()>;
    fn AutoProgram(&self) -> windows_core::Result<()>;
}
#[cfg(feature = "Win32_System_Com")]
impl IScanningTuner_Vtbl {
    pub const fn new<Identity: IScanningTuner_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SeekUp<Identity: IScanningTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTuner_Impl::SeekUp(this).into()
            }
        }
        unsafe extern "system" fn SeekDown<Identity: IScanningTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTuner_Impl::SeekDown(this).into()
            }
        }
        unsafe extern "system" fn ScanUp<Identity: IScanningTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, millisecondspause: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTuner_Impl::ScanUp(this, core::mem::transmute_copy(&millisecondspause)).into()
            }
        }
        unsafe extern "system" fn ScanDown<Identity: IScanningTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, millisecondspause: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTuner_Impl::ScanDown(this, core::mem::transmute_copy(&millisecondspause)).into()
            }
        }
        unsafe extern "system" fn AutoProgram<Identity: IScanningTuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTuner_Impl::AutoProgram(this).into()
            }
        }
        Self {
            base__: ITuner_Vtbl::new::<Identity, OFFSET>(),
            SeekUp: SeekUp::<Identity, OFFSET>,
            SeekDown: SeekDown::<Identity, OFFSET>,
            ScanUp: ScanUp::<Identity, OFFSET>,
            ScanDown: ScanDown::<Identity, OFFSET>,
            AutoProgram: AutoProgram::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IScanningTuner as windows_core::Interface>::IID || iid == &<ITuner as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IScanningTuner {}
windows_core::imp::define_interface!(IScanningTunerEx, IScanningTunerEx_Vtbl, 0x04bbd195_0e2d_4593_9bd5_4f908bc33cf5);
impl core::ops::Deref for IScanningTunerEx {
    type Target = IScanningTuner;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IScanningTunerEx, windows_core::IUnknown, ITuner, IScanningTuner);
impl IScanningTunerEx {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetCurrentLocator(&self, pilocator: *const Option<ILocator>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetCurrentLocator)(windows_core::Interface::as_raw(self), core::mem::transmute(pilocator)).ok() }
    }
    pub unsafe fn PerformExhaustiveScan(&self, dwlowerfreq: i32, dwhigherfreq: i32, bfinetune: super::super::super::Foundation::VARIANT_BOOL, hevent: usize) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).PerformExhaustiveScan)(windows_core::Interface::as_raw(self), dwlowerfreq, dwhigherfreq, bfinetune, hevent).ok() }
    }
    pub unsafe fn TerminateCurrentScan(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TerminateCurrentScan)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn ResumeCurrentScan(&self, hevent: usize) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ResumeCurrentScan)(windows_core::Interface::as_raw(self), hevent).ok() }
    }
    pub unsafe fn GetTunerScanningCapability(&self, hardwareassistedscanning: *mut i32, numstandardssupported: *mut i32, broadcaststandards: *mut windows_core::GUID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTunerScanningCapability)(windows_core::Interface::as_raw(self), hardwareassistedscanning as _, numstandardssupported as _, broadcaststandards as _).ok() }
    }
    pub unsafe fn GetTunerStatus(&self, secondsleft: *mut i32, currentlocktype: *mut i32, autodetect: *mut i32, currentfreq: *mut i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTunerStatus)(windows_core::Interface::as_raw(self), secondsleft as _, currentlocktype as _, autodetect as _, currentfreq as _).ok() }
    }
    pub unsafe fn GetCurrentTunerStandardCapability(&self, currentbroadcaststandard: windows_core::GUID, settlingtime: *mut i32, tvstandardssupported: *mut i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetCurrentTunerStandardCapability)(windows_core::Interface::as_raw(self), core::mem::transmute(currentbroadcaststandard), settlingtime as _, tvstandardssupported as _).ok() }
    }
    pub unsafe fn SetScanSignalTypeFilter(&self, scanmodulationtypes: i32, analogvideostandard: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetScanSignalTypeFilter)(windows_core::Interface::as_raw(self), scanmodulationtypes, analogvideostandard).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IScanningTunerEx_Vtbl {
    pub base__: IScanningTuner_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub GetCurrentLocator: unsafe extern "system" fn(*mut core::ffi::c_void, *const *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetCurrentLocator: usize,
    pub PerformExhaustiveScan: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32, super::super::super::Foundation::VARIANT_BOOL, usize) -> windows_core::HRESULT,
    pub TerminateCurrentScan: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub ResumeCurrentScan: unsafe extern "system" fn(*mut core::ffi::c_void, usize) -> windows_core::HRESULT,
    pub GetTunerScanningCapability: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32, *mut i32, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub GetTunerStatus: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32, *mut i32, *mut i32, *mut i32) -> windows_core::HRESULT,
    pub GetCurrentTunerStandardCapability: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::GUID, *mut i32, *mut i32) -> windows_core::HRESULT,
    pub SetScanSignalTypeFilter: unsafe extern "system" fn(*mut core::ffi::c_void, i32, i32) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait IScanningTunerEx_Impl: IScanningTuner_Impl {
    fn GetCurrentLocator(&self, pilocator: *const Option<ILocator>) -> windows_core::Result<()>;
    fn PerformExhaustiveScan(&self, dwlowerfreq: i32, dwhigherfreq: i32, bfinetune: super::super::super::Foundation::VARIANT_BOOL, hevent: usize) -> windows_core::Result<()>;
    fn TerminateCurrentScan(&self) -> windows_core::Result<i32>;
    fn ResumeCurrentScan(&self, hevent: usize) -> windows_core::Result<()>;
    fn GetTunerScanningCapability(&self, hardwareassistedscanning: *mut i32, numstandardssupported: *mut i32, broadcaststandards: *mut windows_core::GUID) -> windows_core::Result<()>;
    fn GetTunerStatus(&self, secondsleft: *mut i32, currentlocktype: *mut i32, autodetect: *mut i32, currentfreq: *mut i32) -> windows_core::Result<()>;
    fn GetCurrentTunerStandardCapability(&self, currentbroadcaststandard: &windows_core::GUID, settlingtime: *mut i32, tvstandardssupported: *mut i32) -> windows_core::Result<()>;
    fn SetScanSignalTypeFilter(&self, scanmodulationtypes: i32, analogvideostandard: i32) -> windows_core::Result<()>;
}
#[cfg(feature = "Win32_System_Com")]
impl IScanningTunerEx_Vtbl {
    pub const fn new<Identity: IScanningTunerEx_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetCurrentLocator<Identity: IScanningTunerEx_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pilocator: *const *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTunerEx_Impl::GetCurrentLocator(this, core::mem::transmute_copy(&pilocator)).into()
            }
        }
        unsafe extern "system" fn PerformExhaustiveScan<Identity: IScanningTunerEx_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwlowerfreq: i32, dwhigherfreq: i32, bfinetune: super::super::super::Foundation::VARIANT_BOOL, hevent: usize) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTunerEx_Impl::PerformExhaustiveScan(this, core::mem::transmute_copy(&dwlowerfreq), core::mem::transmute_copy(&dwhigherfreq), core::mem::transmute_copy(&bfinetune), core::mem::transmute_copy(&hevent)).into()
            }
        }
        unsafe extern "system" fn TerminateCurrentScan<Identity: IScanningTunerEx_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pcurrentfreq: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IScanningTunerEx_Impl::TerminateCurrentScan(this) {
                    Ok(ok__) => {
                        pcurrentfreq.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn ResumeCurrentScan<Identity: IScanningTunerEx_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hevent: usize) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTunerEx_Impl::ResumeCurrentScan(this, core::mem::transmute_copy(&hevent)).into()
            }
        }
        unsafe extern "system" fn GetTunerScanningCapability<Identity: IScanningTunerEx_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hardwareassistedscanning: *mut i32, numstandardssupported: *mut i32, broadcaststandards: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTunerEx_Impl::GetTunerScanningCapability(this, core::mem::transmute_copy(&hardwareassistedscanning), core::mem::transmute_copy(&numstandardssupported), core::mem::transmute_copy(&broadcaststandards)).into()
            }
        }
        unsafe extern "system" fn GetTunerStatus<Identity: IScanningTunerEx_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, secondsleft: *mut i32, currentlocktype: *mut i32, autodetect: *mut i32, currentfreq: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTunerEx_Impl::GetTunerStatus(this, core::mem::transmute_copy(&secondsleft), core::mem::transmute_copy(&currentlocktype), core::mem::transmute_copy(&autodetect), core::mem::transmute_copy(&currentfreq)).into()
            }
        }
        unsafe extern "system" fn GetCurrentTunerStandardCapability<Identity: IScanningTunerEx_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentbroadcaststandard: windows_core::GUID, settlingtime: *mut i32, tvstandardssupported: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTunerEx_Impl::GetCurrentTunerStandardCapability(this, core::mem::transmute(&currentbroadcaststandard), core::mem::transmute_copy(&settlingtime), core::mem::transmute_copy(&tvstandardssupported)).into()
            }
        }
        unsafe extern "system" fn SetScanSignalTypeFilter<Identity: IScanningTunerEx_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, scanmodulationtypes: i32, analogvideostandard: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IScanningTunerEx_Impl::SetScanSignalTypeFilter(this, core::mem::transmute_copy(&scanmodulationtypes), core::mem::transmute_copy(&analogvideostandard)).into()
            }
        }
        Self {
            base__: IScanningTuner_Vtbl::new::<Identity, OFFSET>(),
            GetCurrentLocator: GetCurrentLocator::<Identity, OFFSET>,
            PerformExhaustiveScan: PerformExhaustiveScan::<Identity, OFFSET>,
            TerminateCurrentScan: TerminateCurrentScan::<Identity, OFFSET>,
            ResumeCurrentScan: ResumeCurrentScan::<Identity, OFFSET>,
            GetTunerScanningCapability: GetTunerScanningCapability::<Identity, OFFSET>,
            GetTunerStatus: GetTunerStatus::<Identity, OFFSET>,
            GetCurrentTunerStandardCapability: GetCurrentTunerStandardCapability::<Identity, OFFSET>,
            SetScanSignalTypeFilter: SetScanSignalTypeFilter::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IScanningTunerEx as windows_core::Interface>::IID || iid == &<ITuner as windows_core::Interface>::IID || iid == &<IScanningTuner as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for IScanningTunerEx {}
windows_core::imp::define_interface!(ISectionList, ISectionList_Vtbl, 0xafec1eb5_2a64_46c6_bf4b_ae3ccb6afdb0);
windows_core::imp::interface_hierarchy!(ISectionList, windows_core::IUnknown);
impl ISectionList {
    pub unsafe fn Initialize<P1>(&self, requesttype: MPEG_REQUEST_TYPE, pmpeg2data: P1, pcontext: *const MPEG_CONTEXT, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, timeout: u32, hdoneevent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>
    where
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), requesttype, pmpeg2data.param().abi(), pcontext, pid, tid, pfilter, timeout, hdoneevent).ok() }
    }
    pub unsafe fn InitializeWithRawSections(&self, pmplsections: *const MPEG_PACKET_LIST) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).InitializeWithRawSections)(windows_core::Interface::as_raw(self), pmplsections).ok() }
    }
    pub unsafe fn CancelPendingRequest(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).CancelPendingRequest)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn GetNumberOfSections(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNumberOfSections)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetSectionData(&self, sectionnumber: u16, pdwrawpacketlength: *mut u32, ppsection: *mut *mut SECTION) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetSectionData)(windows_core::Interface::as_raw(self), sectionnumber, pdwrawpacketlength as _, ppsection as _).ok() }
    }
    pub unsafe fn GetProgramIdentifier(&self, ppid: *const u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetProgramIdentifier)(windows_core::Interface::as_raw(self), ppid).ok() }
    }
    pub unsafe fn GetTableIdentifier(&self, ptableid: *const u8) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableIdentifier)(windows_core::Interface::as_raw(self), ptableid).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ISectionList_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, MPEG_REQUEST_TYPE, *mut core::ffi::c_void, *const MPEG_CONTEXT, u16, u8, *const MPEG2_FILTER, u32, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub InitializeWithRawSections: unsafe extern "system" fn(*mut core::ffi::c_void, *const MPEG_PACKET_LIST) -> windows_core::HRESULT,
    pub CancelPendingRequest: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetNumberOfSections: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetSectionData: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *mut u32, *mut *mut SECTION) -> windows_core::HRESULT,
    pub GetProgramIdentifier: unsafe extern "system" fn(*mut core::ffi::c_void, *const u16) -> windows_core::HRESULT,
    pub GetTableIdentifier: unsafe extern "system" fn(*mut core::ffi::c_void, *const u8) -> windows_core::HRESULT,
}
pub trait ISectionList_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, requesttype: MPEG_REQUEST_TYPE, pmpeg2data: windows_core::Ref<'_, IMpeg2Data>, pcontext: *const MPEG_CONTEXT, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, timeout: u32, hdoneevent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn InitializeWithRawSections(&self, pmplsections: *const MPEG_PACKET_LIST) -> windows_core::Result<()>;
    fn CancelPendingRequest(&self) -> windows_core::Result<()>;
    fn GetNumberOfSections(&self) -> windows_core::Result<u16>;
    fn GetSectionData(&self, sectionnumber: u16, pdwrawpacketlength: *mut u32, ppsection: *mut *mut SECTION) -> windows_core::Result<()>;
    fn GetProgramIdentifier(&self, ppid: *const u16) -> windows_core::Result<()>;
    fn GetTableIdentifier(&self, ptableid: *const u8) -> windows_core::Result<()>;
}
impl ISectionList_Vtbl {
    pub const fn new<Identity: ISectionList_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: ISectionList_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, requesttype: MPEG_REQUEST_TYPE, pmpeg2data: *mut core::ffi::c_void, pcontext: *const MPEG_CONTEXT, pid: u16, tid: u8, pfilter: *const MPEG2_FILTER, timeout: u32, hdoneevent: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISectionList_Impl::Initialize(this, core::mem::transmute_copy(&requesttype), core::mem::transmute_copy(&pmpeg2data), core::mem::transmute_copy(&pcontext), core::mem::transmute_copy(&pid), core::mem::transmute_copy(&tid), core::mem::transmute_copy(&pfilter), core::mem::transmute_copy(&timeout), core::mem::transmute_copy(&hdoneevent)).into()
            }
        }
        unsafe extern "system" fn InitializeWithRawSections<Identity: ISectionList_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pmplsections: *const MPEG_PACKET_LIST) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISectionList_Impl::InitializeWithRawSections(this, core::mem::transmute_copy(&pmplsections)).into()
            }
        }
        unsafe extern "system" fn CancelPendingRequest<Identity: ISectionList_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISectionList_Impl::CancelPendingRequest(this).into()
            }
        }
        unsafe extern "system" fn GetNumberOfSections<Identity: ISectionList_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pcount: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ISectionList_Impl::GetNumberOfSections(this) {
                    Ok(ok__) => {
                        pcount.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetSectionData<Identity: ISectionList_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, sectionnumber: u16, pdwrawpacketlength: *mut u32, ppsection: *mut *mut SECTION) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISectionList_Impl::GetSectionData(this, core::mem::transmute_copy(&sectionnumber), core::mem::transmute_copy(&pdwrawpacketlength), core::mem::transmute_copy(&ppsection)).into()
            }
        }
        unsafe extern "system" fn GetProgramIdentifier<Identity: ISectionList_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppid: *const u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISectionList_Impl::GetProgramIdentifier(this, core::mem::transmute_copy(&ppid)).into()
            }
        }
        unsafe extern "system" fn GetTableIdentifier<Identity: ISectionList_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ptableid: *const u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ISectionList_Impl::GetTableIdentifier(this, core::mem::transmute_copy(&ptableid)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            InitializeWithRawSections: InitializeWithRawSections::<Identity, OFFSET>,
            CancelPendingRequest: CancelPendingRequest::<Identity, OFFSET>,
            GetNumberOfSections: GetNumberOfSections::<Identity, OFFSET>,
            GetSectionData: GetSectionData::<Identity, OFFSET>,
            GetProgramIdentifier: GetProgramIdentifier::<Identity, OFFSET>,
            GetTableIdentifier: GetTableIdentifier::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ISectionList as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ISectionList {}
windows_core::imp::define_interface!(IServiceLocationDescriptor, IServiceLocationDescriptor_Vtbl, 0x58c3c827_9d91_4215_bff3_820a49f0904c);
windows_core::imp::interface_hierarchy!(IServiceLocationDescriptor, windows_core::IUnknown);
impl IServiceLocationDescriptor {
    pub unsafe fn GetPCR_PID(&self) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPCR_PID)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetNumberOfElements(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNumberOfElements)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetElementStreamType(&self, bindex: u8) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetElementStreamType)(windows_core::Interface::as_raw(self), bindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetElementPID(&self, bindex: u8) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetElementPID)(windows_core::Interface::as_raw(self), bindex, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetElementLanguageCode(&self, bindex: u8, langcode: &mut [u8; 3]) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetElementLanguageCode)(windows_core::Interface::as_raw(self), bindex, core::mem::transmute(langcode.as_ptr())).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IServiceLocationDescriptor_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetPCR_PID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u16) -> windows_core::HRESULT,
    pub GetNumberOfElements: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetElementStreamType: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
    pub GetElementPID: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u16) -> windows_core::HRESULT,
    pub GetElementLanguageCode: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u8) -> windows_core::HRESULT,
}
pub trait IServiceLocationDescriptor_Impl: windows_core::IUnknownImpl {
    fn GetPCR_PID(&self) -> windows_core::Result<u16>;
    fn GetNumberOfElements(&self) -> windows_core::Result<u8>;
    fn GetElementStreamType(&self, bindex: u8) -> windows_core::Result<u8>;
    fn GetElementPID(&self, bindex: u8) -> windows_core::Result<u16>;
    fn GetElementLanguageCode(&self, bindex: u8, langcode: *mut u8) -> windows_core::Result<()>;
}
impl IServiceLocationDescriptor_Vtbl {
    pub const fn new<Identity: IServiceLocationDescriptor_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetPCR_PID<Identity: IServiceLocationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IServiceLocationDescriptor_Impl::GetPCR_PID(this) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetNumberOfElements<Identity: IServiceLocationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IServiceLocationDescriptor_Impl::GetNumberOfElements(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetElementStreamType<Identity: IServiceLocationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IServiceLocationDescriptor_Impl::GetElementStreamType(this, core::mem::transmute_copy(&bindex)) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetElementPID<Identity: IServiceLocationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, pwval: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IServiceLocationDescriptor_Impl::GetElementPID(this, core::mem::transmute_copy(&bindex)) {
                    Ok(ok__) => {
                        pwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetElementLanguageCode<Identity: IServiceLocationDescriptor_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, bindex: u8, langcode: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IServiceLocationDescriptor_Impl::GetElementLanguageCode(this, core::mem::transmute_copy(&bindex), core::mem::transmute_copy(&langcode)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetPCR_PID: GetPCR_PID::<Identity, OFFSET>,
            GetNumberOfElements: GetNumberOfElements::<Identity, OFFSET>,
            GetElementStreamType: GetElementStreamType::<Identity, OFFSET>,
            GetElementPID: GetElementPID::<Identity, OFFSET>,
            GetElementLanguageCode: GetElementLanguageCode::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IServiceLocationDescriptor as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IServiceLocationDescriptor {}
windows_core::imp::define_interface!(IStreamBufferConfigure, IStreamBufferConfigure_Vtbl, 0xce14dfae_4098_4af7_bbf7_d6511f835414);
windows_core::imp::interface_hierarchy!(IStreamBufferConfigure, windows_core::IUnknown);
impl IStreamBufferConfigure {
    pub unsafe fn SetDirectory<P0>(&self, pszdirectoryname: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetDirectory)(windows_core::Interface::as_raw(self), pszdirectoryname.param().abi()).ok() }
    }
    pub unsafe fn GetDirectory(&self) -> windows_core::Result<windows_core::PWSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetDirectory)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetBackingFileCount(&self, dwmin: u32, dwmax: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetBackingFileCount)(windows_core::Interface::as_raw(self), dwmin, dwmax).ok() }
    }
    pub unsafe fn GetBackingFileCount(&self, pdwmin: *mut u32, pdwmax: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetBackingFileCount)(windows_core::Interface::as_raw(self), pdwmin as _, pdwmax as _).ok() }
    }
    pub unsafe fn SetBackingFileDuration(&self, dwseconds: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetBackingFileDuration)(windows_core::Interface::as_raw(self), dwseconds).ok() }
    }
    pub unsafe fn GetBackingFileDuration(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetBackingFileDuration)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferConfigure_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub SetDirectory: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::PCWSTR) -> windows_core::HRESULT,
    pub GetDirectory: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::PWSTR) -> windows_core::HRESULT,
    pub SetBackingFileCount: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32) -> windows_core::HRESULT,
    pub GetBackingFileCount: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32, *mut u32) -> windows_core::HRESULT,
    pub SetBackingFileDuration: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub GetBackingFileDuration: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
}
pub trait IStreamBufferConfigure_Impl: windows_core::IUnknownImpl {
    fn SetDirectory(&self, pszdirectoryname: &windows_core::PCWSTR) -> windows_core::Result<()>;
    fn GetDirectory(&self) -> windows_core::Result<windows_core::PWSTR>;
    fn SetBackingFileCount(&self, dwmin: u32, dwmax: u32) -> windows_core::Result<()>;
    fn GetBackingFileCount(&self, pdwmin: *mut u32, pdwmax: *mut u32) -> windows_core::Result<()>;
    fn SetBackingFileDuration(&self, dwseconds: u32) -> windows_core::Result<()>;
    fn GetBackingFileDuration(&self) -> windows_core::Result<u32>;
}
impl IStreamBufferConfigure_Vtbl {
    pub const fn new<Identity: IStreamBufferConfigure_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetDirectory<Identity: IStreamBufferConfigure_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszdirectoryname: windows_core::PCWSTR) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferConfigure_Impl::SetDirectory(this, core::mem::transmute(&pszdirectoryname)).into()
            }
        }
        unsafe extern "system" fn GetDirectory<Identity: IStreamBufferConfigure_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppszdirectoryname: *mut windows_core::PWSTR) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IStreamBufferConfigure_Impl::GetDirectory(this) {
                    Ok(ok__) => {
                        ppszdirectoryname.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetBackingFileCount<Identity: IStreamBufferConfigure_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwmin: u32, dwmax: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferConfigure_Impl::SetBackingFileCount(this, core::mem::transmute_copy(&dwmin), core::mem::transmute_copy(&dwmax)).into()
            }
        }
        unsafe extern "system" fn GetBackingFileCount<Identity: IStreamBufferConfigure_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwmin: *mut u32, pdwmax: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferConfigure_Impl::GetBackingFileCount(this, core::mem::transmute_copy(&pdwmin), core::mem::transmute_copy(&pdwmax)).into()
            }
        }
        unsafe extern "system" fn SetBackingFileDuration<Identity: IStreamBufferConfigure_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwseconds: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferConfigure_Impl::SetBackingFileDuration(this, core::mem::transmute_copy(&dwseconds)).into()
            }
        }
        unsafe extern "system" fn GetBackingFileDuration<Identity: IStreamBufferConfigure_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwseconds: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IStreamBufferConfigure_Impl::GetBackingFileDuration(this) {
                    Ok(ok__) => {
                        pdwseconds.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            SetDirectory: SetDirectory::<Identity, OFFSET>,
            GetDirectory: GetDirectory::<Identity, OFFSET>,
            SetBackingFileCount: SetBackingFileCount::<Identity, OFFSET>,
            GetBackingFileCount: GetBackingFileCount::<Identity, OFFSET>,
            SetBackingFileDuration: SetBackingFileDuration::<Identity, OFFSET>,
            GetBackingFileDuration: GetBackingFileDuration::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferConfigure as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferConfigure {}
windows_core::imp::define_interface!(IStreamBufferConfigure2, IStreamBufferConfigure2_Vtbl, 0x53e037bf_3992_4282_ae34_2487b4dae06b);
impl core::ops::Deref for IStreamBufferConfigure2 {
    type Target = IStreamBufferConfigure;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IStreamBufferConfigure2, windows_core::IUnknown, IStreamBufferConfigure);
impl IStreamBufferConfigure2 {
    pub unsafe fn SetMultiplexedPacketSize(&self, cbbytesperpacket: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMultiplexedPacketSize)(windows_core::Interface::as_raw(self), cbbytesperpacket).ok() }
    }
    pub unsafe fn GetMultiplexedPacketSize(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetMultiplexedPacketSize)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetFFTransitionRates(&self, dwmaxfullframerate: u32, dwmaxnonskippingrate: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetFFTransitionRates)(windows_core::Interface::as_raw(self), dwmaxfullframerate, dwmaxnonskippingrate).ok() }
    }
    pub unsafe fn GetFFTransitionRates(&self, pdwmaxfullframerate: *mut u32, pdwmaxnonskippingrate: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetFFTransitionRates)(windows_core::Interface::as_raw(self), pdwmaxfullframerate as _, pdwmaxnonskippingrate as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferConfigure2_Vtbl {
    pub base__: IStreamBufferConfigure_Vtbl,
    pub SetMultiplexedPacketSize: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
    pub GetMultiplexedPacketSize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub SetFFTransitionRates: unsafe extern "system" fn(*mut core::ffi::c_void, u32, u32) -> windows_core::HRESULT,
    pub GetFFTransitionRates: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32, *mut u32) -> windows_core::HRESULT,
}
pub trait IStreamBufferConfigure2_Impl: IStreamBufferConfigure_Impl {
    fn SetMultiplexedPacketSize(&self, cbbytesperpacket: u32) -> windows_core::Result<()>;
    fn GetMultiplexedPacketSize(&self) -> windows_core::Result<u32>;
    fn SetFFTransitionRates(&self, dwmaxfullframerate: u32, dwmaxnonskippingrate: u32) -> windows_core::Result<()>;
    fn GetFFTransitionRates(&self, pdwmaxfullframerate: *mut u32, pdwmaxnonskippingrate: *mut u32) -> windows_core::Result<()>;
}
impl IStreamBufferConfigure2_Vtbl {
    pub const fn new<Identity: IStreamBufferConfigure2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetMultiplexedPacketSize<Identity: IStreamBufferConfigure2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, cbbytesperpacket: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferConfigure2_Impl::SetMultiplexedPacketSize(this, core::mem::transmute_copy(&cbbytesperpacket)).into()
            }
        }
        unsafe extern "system" fn GetMultiplexedPacketSize<Identity: IStreamBufferConfigure2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pcbbytesperpacket: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IStreamBufferConfigure2_Impl::GetMultiplexedPacketSize(this) {
                    Ok(ok__) => {
                        pcbbytesperpacket.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetFFTransitionRates<Identity: IStreamBufferConfigure2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwmaxfullframerate: u32, dwmaxnonskippingrate: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferConfigure2_Impl::SetFFTransitionRates(this, core::mem::transmute_copy(&dwmaxfullframerate), core::mem::transmute_copy(&dwmaxnonskippingrate)).into()
            }
        }
        unsafe extern "system" fn GetFFTransitionRates<Identity: IStreamBufferConfigure2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwmaxfullframerate: *mut u32, pdwmaxnonskippingrate: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferConfigure2_Impl::GetFFTransitionRates(this, core::mem::transmute_copy(&pdwmaxfullframerate), core::mem::transmute_copy(&pdwmaxnonskippingrate)).into()
            }
        }
        Self {
            base__: IStreamBufferConfigure_Vtbl::new::<Identity, OFFSET>(),
            SetMultiplexedPacketSize: SetMultiplexedPacketSize::<Identity, OFFSET>,
            GetMultiplexedPacketSize: GetMultiplexedPacketSize::<Identity, OFFSET>,
            SetFFTransitionRates: SetFFTransitionRates::<Identity, OFFSET>,
            GetFFTransitionRates: GetFFTransitionRates::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferConfigure2 as windows_core::Interface>::IID || iid == &<IStreamBufferConfigure as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferConfigure2 {}
windows_core::imp::define_interface!(IStreamBufferConfigure3, IStreamBufferConfigure3_Vtbl, 0x7e2d2a1e_7192_4bd7_80c1_061fd1d10402);
impl core::ops::Deref for IStreamBufferConfigure3 {
    type Target = IStreamBufferConfigure2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IStreamBufferConfigure3, windows_core::IUnknown, IStreamBufferConfigure, IStreamBufferConfigure2);
impl IStreamBufferConfigure3 {
    pub unsafe fn SetStartRecConfig(&self, fstartstopscur: bool) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetStartRecConfig)(windows_core::Interface::as_raw(self), fstartstopscur.into()).ok() }
    }
    pub unsafe fn GetStartRecConfig(&self) -> windows_core::Result<windows_core::BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetStartRecConfig)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetNamespace<P0>(&self, psznamespace: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetNamespace)(windows_core::Interface::as_raw(self), psznamespace.param().abi()).ok() }
    }
    pub unsafe fn GetNamespace(&self) -> windows_core::Result<windows_core::PWSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNamespace)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferConfigure3_Vtbl {
    pub base__: IStreamBufferConfigure2_Vtbl,
    pub SetStartRecConfig: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::BOOL) -> windows_core::HRESULT,
    pub GetStartRecConfig: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::BOOL) -> windows_core::HRESULT,
    pub SetNamespace: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::PCWSTR) -> windows_core::HRESULT,
    pub GetNamespace: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::PWSTR) -> windows_core::HRESULT,
}
pub trait IStreamBufferConfigure3_Impl: IStreamBufferConfigure2_Impl {
    fn SetStartRecConfig(&self, fstartstopscur: windows_core::BOOL) -> windows_core::Result<()>;
    fn GetStartRecConfig(&self) -> windows_core::Result<windows_core::BOOL>;
    fn SetNamespace(&self, psznamespace: &windows_core::PCWSTR) -> windows_core::Result<()>;
    fn GetNamespace(&self) -> windows_core::Result<windows_core::PWSTR>;
}
impl IStreamBufferConfigure3_Vtbl {
    pub const fn new<Identity: IStreamBufferConfigure3_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetStartRecConfig<Identity: IStreamBufferConfigure3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, fstartstopscur: windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferConfigure3_Impl::SetStartRecConfig(this, core::mem::transmute_copy(&fstartstopscur)).into()
            }
        }
        unsafe extern "system" fn GetStartRecConfig<Identity: IStreamBufferConfigure3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pfstartstopscur: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IStreamBufferConfigure3_Impl::GetStartRecConfig(this) {
                    Ok(ok__) => {
                        pfstartstopscur.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetNamespace<Identity: IStreamBufferConfigure3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psznamespace: windows_core::PCWSTR) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferConfigure3_Impl::SetNamespace(this, core::mem::transmute(&psznamespace)).into()
            }
        }
        unsafe extern "system" fn GetNamespace<Identity: IStreamBufferConfigure3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppsznamespace: *mut windows_core::PWSTR) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IStreamBufferConfigure3_Impl::GetNamespace(this) {
                    Ok(ok__) => {
                        ppsznamespace.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: IStreamBufferConfigure2_Vtbl::new::<Identity, OFFSET>(),
            SetStartRecConfig: SetStartRecConfig::<Identity, OFFSET>,
            GetStartRecConfig: GetStartRecConfig::<Identity, OFFSET>,
            SetNamespace: SetNamespace::<Identity, OFFSET>,
            GetNamespace: GetNamespace::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferConfigure3 as windows_core::Interface>::IID || iid == &<IStreamBufferConfigure as windows_core::Interface>::IID || iid == &<IStreamBufferConfigure2 as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferConfigure3 {}
windows_core::imp::define_interface!(IStreamBufferDataCounters, IStreamBufferDataCounters_Vtbl, 0x9d2a2563_31ab_402e_9a6b_adb903489440);
windows_core::imp::interface_hierarchy!(IStreamBufferDataCounters, windows_core::IUnknown);
impl IStreamBufferDataCounters {
    pub unsafe fn GetData(&self, ppindata: *mut SBE_PIN_DATA) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetData)(windows_core::Interface::as_raw(self), ppindata as _).ok() }
    }
    pub unsafe fn ResetData(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ResetData)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferDataCounters_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetData: unsafe extern "system" fn(*mut core::ffi::c_void, *mut SBE_PIN_DATA) -> windows_core::HRESULT,
    pub ResetData: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IStreamBufferDataCounters_Impl: windows_core::IUnknownImpl {
    fn GetData(&self, ppindata: *mut SBE_PIN_DATA) -> windows_core::Result<()>;
    fn ResetData(&self) -> windows_core::Result<()>;
}
impl IStreamBufferDataCounters_Vtbl {
    pub const fn new<Identity: IStreamBufferDataCounters_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetData<Identity: IStreamBufferDataCounters_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppindata: *mut SBE_PIN_DATA) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferDataCounters_Impl::GetData(this, core::mem::transmute_copy(&ppindata)).into()
            }
        }
        unsafe extern "system" fn ResetData<Identity: IStreamBufferDataCounters_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferDataCounters_Impl::ResetData(this).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), GetData: GetData::<Identity, OFFSET>, ResetData: ResetData::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferDataCounters as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferDataCounters {}
windows_core::imp::define_interface!(IStreamBufferInitialize, IStreamBufferInitialize_Vtbl, 0x9ce50f2d_6ba7_40fb_a034_50b1a674ec78);
windows_core::imp::interface_hierarchy!(IStreamBufferInitialize, windows_core::IUnknown);
impl IStreamBufferInitialize {
    #[cfg(feature = "Win32_System_Registry")]
    pub unsafe fn SetHKEY(&self, hkeyroot: super::super::super::System::Registry::HKEY) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetHKEY)(windows_core::Interface::as_raw(self), hkeyroot).ok() }
    }
    #[cfg(feature = "Win32_Security")]
    pub unsafe fn SetSIDs(&self, csids: u32, ppsid: *mut super::super::super::Security::PSID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetSIDs)(windows_core::Interface::as_raw(self), csids, ppsid as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferInitialize_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(feature = "Win32_System_Registry")]
    pub SetHKEY: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Registry::HKEY) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Registry"))]
    SetHKEY: usize,
    #[cfg(feature = "Win32_Security")]
    pub SetSIDs: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut super::super::super::Security::PSID) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_Security"))]
    SetSIDs: usize,
}
#[cfg(all(feature = "Win32_Security", feature = "Win32_System_Registry"))]
pub trait IStreamBufferInitialize_Impl: windows_core::IUnknownImpl {
    fn SetHKEY(&self, hkeyroot: super::super::super::System::Registry::HKEY) -> windows_core::Result<()>;
    fn SetSIDs(&self, csids: u32, ppsid: *mut super::super::super::Security::PSID) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_Security", feature = "Win32_System_Registry"))]
impl IStreamBufferInitialize_Vtbl {
    pub const fn new<Identity: IStreamBufferInitialize_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetHKEY<Identity: IStreamBufferInitialize_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hkeyroot: super::super::super::System::Registry::HKEY) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferInitialize_Impl::SetHKEY(this, core::mem::transmute_copy(&hkeyroot)).into()
            }
        }
        unsafe extern "system" fn SetSIDs<Identity: IStreamBufferInitialize_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, csids: u32, ppsid: *mut super::super::super::Security::PSID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferInitialize_Impl::SetSIDs(this, core::mem::transmute_copy(&csids), core::mem::transmute_copy(&ppsid)).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), SetHKEY: SetHKEY::<Identity, OFFSET>, SetSIDs: SetSIDs::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferInitialize as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_Security", feature = "Win32_System_Registry"))]
impl windows_core::RuntimeName for IStreamBufferInitialize {}
windows_core::imp::define_interface!(IStreamBufferMediaSeeking, IStreamBufferMediaSeeking_Vtbl, 0xf61f5c26_863d_4afa_b0ba_2f81dc978596);
impl core::ops::Deref for IStreamBufferMediaSeeking {
    type Target = super::IMediaSeeking;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IStreamBufferMediaSeeking, windows_core::IUnknown, super::IMediaSeeking);
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferMediaSeeking_Vtbl {
    pub base__: super::IMediaSeeking_Vtbl,
}
pub trait IStreamBufferMediaSeeking_Impl: super::IMediaSeeking_Impl {}
impl IStreamBufferMediaSeeking_Vtbl {
    pub const fn new<Identity: IStreamBufferMediaSeeking_Impl, const OFFSET: isize>() -> Self {
        Self { base__: super::IMediaSeeking_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferMediaSeeking as windows_core::Interface>::IID || iid == &<super::IMediaSeeking as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferMediaSeeking {}
windows_core::imp::define_interface!(IStreamBufferMediaSeeking2, IStreamBufferMediaSeeking2_Vtbl, 0x3a439ab0_155f_470a_86a6_9ea54afd6eaf);
impl core::ops::Deref for IStreamBufferMediaSeeking2 {
    type Target = IStreamBufferMediaSeeking;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IStreamBufferMediaSeeking2, windows_core::IUnknown, super::IMediaSeeking, IStreamBufferMediaSeeking);
impl IStreamBufferMediaSeeking2 {
    pub unsafe fn SetRateEx(&self, drate: f64, dwframespersec: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetRateEx)(windows_core::Interface::as_raw(self), drate, dwframespersec).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferMediaSeeking2_Vtbl {
    pub base__: IStreamBufferMediaSeeking_Vtbl,
    pub SetRateEx: unsafe extern "system" fn(*mut core::ffi::c_void, f64, u32) -> windows_core::HRESULT,
}
pub trait IStreamBufferMediaSeeking2_Impl: IStreamBufferMediaSeeking_Impl {
    fn SetRateEx(&self, drate: f64, dwframespersec: u32) -> windows_core::Result<()>;
}
impl IStreamBufferMediaSeeking2_Vtbl {
    pub const fn new<Identity: IStreamBufferMediaSeeking2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetRateEx<Identity: IStreamBufferMediaSeeking2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, drate: f64, dwframespersec: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferMediaSeeking2_Impl::SetRateEx(this, core::mem::transmute_copy(&drate), core::mem::transmute_copy(&dwframespersec)).into()
            }
        }
        Self { base__: IStreamBufferMediaSeeking_Vtbl::new::<Identity, OFFSET>(), SetRateEx: SetRateEx::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferMediaSeeking2 as windows_core::Interface>::IID || iid == &<super::IMediaSeeking as windows_core::Interface>::IID || iid == &<IStreamBufferMediaSeeking as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferMediaSeeking2 {}
windows_core::imp::define_interface!(IStreamBufferRecComp, IStreamBufferRecComp_Vtbl, 0x9e259a9b_8815_42ae_b09f_221970b154fd);
windows_core::imp::interface_hierarchy!(IStreamBufferRecComp, windows_core::IUnknown);
impl IStreamBufferRecComp {
    pub unsafe fn Initialize<P0, P1>(&self, psztargetfilename: P0, pszsbrecprofileref: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::PCWSTR>,
        P1: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psztargetfilename.param().abi(), pszsbrecprofileref.param().abi()).ok() }
    }
    pub unsafe fn Append<P0>(&self, pszsbrecording: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe { (windows_core::Interface::vtable(self).Append)(windows_core::Interface::as_raw(self), pszsbrecording.param().abi()).ok() }
    }
    pub unsafe fn AppendEx<P0>(&self, pszsbrecording: P0, rtstart: i64, rtstop: i64) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe { (windows_core::Interface::vtable(self).AppendEx)(windows_core::Interface::as_raw(self), pszsbrecording.param().abi(), rtstart, rtstop).ok() }
    }
    pub unsafe fn GetCurrentLength(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCurrentLength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Close(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Close)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn Cancel(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Cancel)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferRecComp_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::PCWSTR, windows_core::PCWSTR) -> windows_core::HRESULT,
    pub Append: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::PCWSTR) -> windows_core::HRESULT,
    pub AppendEx: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::PCWSTR, i64, i64) -> windows_core::HRESULT,
    pub GetCurrentLength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub Close: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Cancel: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IStreamBufferRecComp_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psztargetfilename: &windows_core::PCWSTR, pszsbrecprofileref: &windows_core::PCWSTR) -> windows_core::Result<()>;
    fn Append(&self, pszsbrecording: &windows_core::PCWSTR) -> windows_core::Result<()>;
    fn AppendEx(&self, pszsbrecording: &windows_core::PCWSTR, rtstart: i64, rtstop: i64) -> windows_core::Result<()>;
    fn GetCurrentLength(&self) -> windows_core::Result<u32>;
    fn Close(&self) -> windows_core::Result<()>;
    fn Cancel(&self) -> windows_core::Result<()>;
}
impl IStreamBufferRecComp_Vtbl {
    pub const fn new<Identity: IStreamBufferRecComp_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: IStreamBufferRecComp_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psztargetfilename: windows_core::PCWSTR, pszsbrecprofileref: windows_core::PCWSTR) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferRecComp_Impl::Initialize(this, core::mem::transmute(&psztargetfilename), core::mem::transmute(&pszsbrecprofileref)).into()
            }
        }
        unsafe extern "system" fn Append<Identity: IStreamBufferRecComp_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszsbrecording: windows_core::PCWSTR) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferRecComp_Impl::Append(this, core::mem::transmute(&pszsbrecording)).into()
            }
        }
        unsafe extern "system" fn AppendEx<Identity: IStreamBufferRecComp_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszsbrecording: windows_core::PCWSTR, rtstart: i64, rtstop: i64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferRecComp_Impl::AppendEx(this, core::mem::transmute(&pszsbrecording), core::mem::transmute_copy(&rtstart), core::mem::transmute_copy(&rtstop)).into()
            }
        }
        unsafe extern "system" fn GetCurrentLength<Identity: IStreamBufferRecComp_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pcseconds: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IStreamBufferRecComp_Impl::GetCurrentLength(this) {
                    Ok(ok__) => {
                        pcseconds.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Close<Identity: IStreamBufferRecComp_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferRecComp_Impl::Close(this).into()
            }
        }
        unsafe extern "system" fn Cancel<Identity: IStreamBufferRecComp_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferRecComp_Impl::Cancel(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            Append: Append::<Identity, OFFSET>,
            AppendEx: AppendEx::<Identity, OFFSET>,
            GetCurrentLength: GetCurrentLength::<Identity, OFFSET>,
            Close: Close::<Identity, OFFSET>,
            Cancel: Cancel::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferRecComp as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferRecComp {}
windows_core::imp::define_interface!(IStreamBufferRecordControl, IStreamBufferRecordControl_Vtbl, 0xba9b6c99_f3c7_4ff2_92db_cfdd4851bf31);
windows_core::imp::interface_hierarchy!(IStreamBufferRecordControl, windows_core::IUnknown);
impl IStreamBufferRecordControl {
    pub unsafe fn Start(&self, prtstart: *mut i64) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Start)(windows_core::Interface::as_raw(self), prtstart as _).ok() }
    }
    pub unsafe fn Stop(&self, rtstop: i64) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Stop)(windows_core::Interface::as_raw(self), rtstop).ok() }
    }
    pub unsafe fn GetRecordingStatus(&self, phresult: *mut windows_core::HRESULT, pbstarted: *mut windows_core::BOOL, pbstopped: *mut windows_core::BOOL) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetRecordingStatus)(windows_core::Interface::as_raw(self), phresult as _, pbstarted as _, pbstopped as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferRecordControl_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Start: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i64) -> windows_core::HRESULT,
    pub Stop: unsafe extern "system" fn(*mut core::ffi::c_void, i64) -> windows_core::HRESULT,
    pub GetRecordingStatus: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::HRESULT, *mut windows_core::BOOL, *mut windows_core::BOOL) -> windows_core::HRESULT,
}
pub trait IStreamBufferRecordControl_Impl: windows_core::IUnknownImpl {
    fn Start(&self, prtstart: *mut i64) -> windows_core::Result<()>;
    fn Stop(&self, rtstop: i64) -> windows_core::Result<()>;
    fn GetRecordingStatus(&self, phresult: *mut windows_core::HRESULT, pbstarted: *mut windows_core::BOOL, pbstopped: *mut windows_core::BOOL) -> windows_core::Result<()>;
}
impl IStreamBufferRecordControl_Vtbl {
    pub const fn new<Identity: IStreamBufferRecordControl_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Start<Identity: IStreamBufferRecordControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prtstart: *mut i64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferRecordControl_Impl::Start(this, core::mem::transmute_copy(&prtstart)).into()
            }
        }
        unsafe extern "system" fn Stop<Identity: IStreamBufferRecordControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, rtstop: i64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferRecordControl_Impl::Stop(this, core::mem::transmute_copy(&rtstop)).into()
            }
        }
        unsafe extern "system" fn GetRecordingStatus<Identity: IStreamBufferRecordControl_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, phresult: *mut windows_core::HRESULT, pbstarted: *mut windows_core::BOOL, pbstopped: *mut windows_core::BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferRecordControl_Impl::GetRecordingStatus(this, core::mem::transmute_copy(&phresult), core::mem::transmute_copy(&pbstarted), core::mem::transmute_copy(&pbstopped)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Start: Start::<Identity, OFFSET>,
            Stop: Stop::<Identity, OFFSET>,
            GetRecordingStatus: GetRecordingStatus::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferRecordControl as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferRecordControl {}
windows_core::imp::define_interface!(IStreamBufferRecordingAttribute, IStreamBufferRecordingAttribute_Vtbl, 0x16ca4e03_fe69_4705_bd41_5b7dfc0c95f3);
windows_core::imp::interface_hierarchy!(IStreamBufferRecordingAttribute, windows_core::IUnknown);
impl IStreamBufferRecordingAttribute {
    pub unsafe fn SetAttribute<P1>(&self, ulreserved: u32, pszattributename: P1, streambufferattributetype: STREAMBUFFER_ATTR_DATATYPE, pbattribute: &[u8]) -> windows_core::Result<()>
    where
        P1: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetAttribute)(windows_core::Interface::as_raw(self), ulreserved, pszattributename.param().abi(), streambufferattributetype, core::mem::transmute(pbattribute.as_ptr()), pbattribute.len().try_into().unwrap()).ok() }
    }
    pub unsafe fn GetAttributeCount(&self, ulreserved: u32) -> windows_core::Result<u16> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetAttributeCount)(windows_core::Interface::as_raw(self), ulreserved, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetAttributeByName<P0>(&self, pszattributename: P0, pulreserved: *const u32, pstreambufferattributetype: *mut STREAMBUFFER_ATTR_DATATYPE, pbattribute: *mut u8, pcblength: *mut u16) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe { (windows_core::Interface::vtable(self).GetAttributeByName)(windows_core::Interface::as_raw(self), pszattributename.param().abi(), pulreserved, pstreambufferattributetype as _, pbattribute as _, pcblength as _).ok() }
    }
    pub unsafe fn GetAttributeByIndex(&self, windex: u16, pulreserved: *const u32, pszattributename: windows_core::PWSTR, pcchnamelength: *mut u16, pstreambufferattributetype: *mut STREAMBUFFER_ATTR_DATATYPE, pbattribute: *mut u8, pcblength: *mut u16) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetAttributeByIndex)(windows_core::Interface::as_raw(self), windex, pulreserved, core::mem::transmute(pszattributename), pcchnamelength as _, pstreambufferattributetype as _, pbattribute as _, pcblength as _).ok() }
    }
    pub unsafe fn EnumAttributes(&self) -> windows_core::Result<IEnumStreamBufferRecordingAttrib> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumAttributes)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferRecordingAttribute_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub SetAttribute: unsafe extern "system" fn(*mut core::ffi::c_void, u32, windows_core::PCWSTR, STREAMBUFFER_ATTR_DATATYPE, *const u8, u16) -> windows_core::HRESULT,
    pub GetAttributeCount: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u16) -> windows_core::HRESULT,
    pub GetAttributeByName: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::PCWSTR, *const u32, *mut STREAMBUFFER_ATTR_DATATYPE, *mut u8, *mut u16) -> windows_core::HRESULT,
    pub GetAttributeByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u16, *const u32, windows_core::PWSTR, *mut u16, *mut STREAMBUFFER_ATTR_DATATYPE, *mut u8, *mut u16) -> windows_core::HRESULT,
    pub EnumAttributes: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IStreamBufferRecordingAttribute_Impl: windows_core::IUnknownImpl {
    fn SetAttribute(&self, ulreserved: u32, pszattributename: &windows_core::PCWSTR, streambufferattributetype: STREAMBUFFER_ATTR_DATATYPE, pbattribute: *const u8, cbattributelength: u16) -> windows_core::Result<()>;
    fn GetAttributeCount(&self, ulreserved: u32) -> windows_core::Result<u16>;
    fn GetAttributeByName(&self, pszattributename: &windows_core::PCWSTR, pulreserved: *const u32, pstreambufferattributetype: *mut STREAMBUFFER_ATTR_DATATYPE, pbattribute: *mut u8, pcblength: *mut u16) -> windows_core::Result<()>;
    fn GetAttributeByIndex(&self, windex: u16, pulreserved: *const u32, pszattributename: windows_core::PWSTR, pcchnamelength: *mut u16, pstreambufferattributetype: *mut STREAMBUFFER_ATTR_DATATYPE, pbattribute: *mut u8, pcblength: *mut u16) -> windows_core::Result<()>;
    fn EnumAttributes(&self) -> windows_core::Result<IEnumStreamBufferRecordingAttrib>;
}
impl IStreamBufferRecordingAttribute_Vtbl {
    pub const fn new<Identity: IStreamBufferRecordingAttribute_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetAttribute<Identity: IStreamBufferRecordingAttribute_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ulreserved: u32, pszattributename: windows_core::PCWSTR, streambufferattributetype: STREAMBUFFER_ATTR_DATATYPE, pbattribute: *const u8, cbattributelength: u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferRecordingAttribute_Impl::SetAttribute(this, core::mem::transmute_copy(&ulreserved), core::mem::transmute(&pszattributename), core::mem::transmute_copy(&streambufferattributetype), core::mem::transmute_copy(&pbattribute), core::mem::transmute_copy(&cbattributelength)).into()
            }
        }
        unsafe extern "system" fn GetAttributeCount<Identity: IStreamBufferRecordingAttribute_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ulreserved: u32, pcattributes: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IStreamBufferRecordingAttribute_Impl::GetAttributeCount(this, core::mem::transmute_copy(&ulreserved)) {
                    Ok(ok__) => {
                        pcattributes.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetAttributeByName<Identity: IStreamBufferRecordingAttribute_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszattributename: windows_core::PCWSTR, pulreserved: *const u32, pstreambufferattributetype: *mut STREAMBUFFER_ATTR_DATATYPE, pbattribute: *mut u8, pcblength: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferRecordingAttribute_Impl::GetAttributeByName(this, core::mem::transmute(&pszattributename), core::mem::transmute_copy(&pulreserved), core::mem::transmute_copy(&pstreambufferattributetype), core::mem::transmute_copy(&pbattribute), core::mem::transmute_copy(&pcblength)).into()
            }
        }
        unsafe extern "system" fn GetAttributeByIndex<Identity: IStreamBufferRecordingAttribute_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, windex: u16, pulreserved: *const u32, pszattributename: windows_core::PWSTR, pcchnamelength: *mut u16, pstreambufferattributetype: *mut STREAMBUFFER_ATTR_DATATYPE, pbattribute: *mut u8, pcblength: *mut u16) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferRecordingAttribute_Impl::GetAttributeByIndex(this, core::mem::transmute_copy(&windex), core::mem::transmute_copy(&pulreserved), core::mem::transmute_copy(&pszattributename), core::mem::transmute_copy(&pcchnamelength), core::mem::transmute_copy(&pstreambufferattributetype), core::mem::transmute_copy(&pbattribute), core::mem::transmute_copy(&pcblength)).into()
            }
        }
        unsafe extern "system" fn EnumAttributes<Identity: IStreamBufferRecordingAttribute_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppienumstreambufferattrib: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IStreamBufferRecordingAttribute_Impl::EnumAttributes(this) {
                    Ok(ok__) => {
                        ppienumstreambufferattrib.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            SetAttribute: SetAttribute::<Identity, OFFSET>,
            GetAttributeCount: GetAttributeCount::<Identity, OFFSET>,
            GetAttributeByName: GetAttributeByName::<Identity, OFFSET>,
            GetAttributeByIndex: GetAttributeByIndex::<Identity, OFFSET>,
            EnumAttributes: EnumAttributes::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferRecordingAttribute as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferRecordingAttribute {}
windows_core::imp::define_interface!(IStreamBufferSink, IStreamBufferSink_Vtbl, 0xafd1f242_7efd_45ee_ba4e_407a25c9a77a);
windows_core::imp::interface_hierarchy!(IStreamBufferSink, windows_core::IUnknown);
impl IStreamBufferSink {
    pub unsafe fn LockProfile<P0>(&self, pszstreambufferfilename: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe { (windows_core::Interface::vtable(self).LockProfile)(windows_core::Interface::as_raw(self), pszstreambufferfilename.param().abi()).ok() }
    }
    pub unsafe fn CreateRecorder<P0>(&self, pszfilename: P0, dwrecordtype: u32) -> windows_core::Result<windows_core::IUnknown>
    where
        P0: windows_core::Param<windows_core::PCWSTR>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CreateRecorder)(windows_core::Interface::as_raw(self), pszfilename.param().abi(), dwrecordtype, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn IsProfileLocked(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).IsProfileLocked)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferSink_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub LockProfile: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::PCWSTR) -> windows_core::HRESULT,
    pub CreateRecorder: unsafe extern "system" fn(*mut core::ffi::c_void, windows_core::PCWSTR, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub IsProfileLocked: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IStreamBufferSink_Impl: windows_core::IUnknownImpl {
    fn LockProfile(&self, pszstreambufferfilename: &windows_core::PCWSTR) -> windows_core::Result<()>;
    fn CreateRecorder(&self, pszfilename: &windows_core::PCWSTR, dwrecordtype: u32) -> windows_core::Result<windows_core::IUnknown>;
    fn IsProfileLocked(&self) -> windows_core::Result<()>;
}
impl IStreamBufferSink_Vtbl {
    pub const fn new<Identity: IStreamBufferSink_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn LockProfile<Identity: IStreamBufferSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszstreambufferfilename: windows_core::PCWSTR) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferSink_Impl::LockProfile(this, core::mem::transmute(&pszstreambufferfilename)).into()
            }
        }
        unsafe extern "system" fn CreateRecorder<Identity: IStreamBufferSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pszfilename: windows_core::PCWSTR, dwrecordtype: u32, precordingiunknown: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IStreamBufferSink_Impl::CreateRecorder(this, core::mem::transmute(&pszfilename), core::mem::transmute_copy(&dwrecordtype)) {
                    Ok(ok__) => {
                        precordingiunknown.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn IsProfileLocked<Identity: IStreamBufferSink_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferSink_Impl::IsProfileLocked(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            LockProfile: LockProfile::<Identity, OFFSET>,
            CreateRecorder: CreateRecorder::<Identity, OFFSET>,
            IsProfileLocked: IsProfileLocked::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferSink as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferSink {}
windows_core::imp::define_interface!(IStreamBufferSink2, IStreamBufferSink2_Vtbl, 0xdb94a660_f4fb_4bfa_bcc6_fe159a4eea93);
impl core::ops::Deref for IStreamBufferSink2 {
    type Target = IStreamBufferSink;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IStreamBufferSink2, windows_core::IUnknown, IStreamBufferSink);
impl IStreamBufferSink2 {
    pub unsafe fn UnlockProfile(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).UnlockProfile)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferSink2_Vtbl {
    pub base__: IStreamBufferSink_Vtbl,
    pub UnlockProfile: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IStreamBufferSink2_Impl: IStreamBufferSink_Impl {
    fn UnlockProfile(&self) -> windows_core::Result<()>;
}
impl IStreamBufferSink2_Vtbl {
    pub const fn new<Identity: IStreamBufferSink2_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn UnlockProfile<Identity: IStreamBufferSink2_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferSink2_Impl::UnlockProfile(this).into()
            }
        }
        Self { base__: IStreamBufferSink_Vtbl::new::<Identity, OFFSET>(), UnlockProfile: UnlockProfile::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferSink2 as windows_core::Interface>::IID || iid == &<IStreamBufferSink as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferSink2 {}
windows_core::imp::define_interface!(IStreamBufferSink3, IStreamBufferSink3_Vtbl, 0x974723f2_887a_4452_9366_2cff3057bc8f);
impl core::ops::Deref for IStreamBufferSink3 {
    type Target = IStreamBufferSink2;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(IStreamBufferSink3, windows_core::IUnknown, IStreamBufferSink, IStreamBufferSink2);
impl IStreamBufferSink3 {
    pub unsafe fn SetAvailableFilter(&self, prtmin: *mut i64) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetAvailableFilter)(windows_core::Interface::as_raw(self), prtmin as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferSink3_Vtbl {
    pub base__: IStreamBufferSink2_Vtbl,
    pub SetAvailableFilter: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i64) -> windows_core::HRESULT,
}
pub trait IStreamBufferSink3_Impl: IStreamBufferSink2_Impl {
    fn SetAvailableFilter(&self, prtmin: *mut i64) -> windows_core::Result<()>;
}
impl IStreamBufferSink3_Vtbl {
    pub const fn new<Identity: IStreamBufferSink3_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetAvailableFilter<Identity: IStreamBufferSink3_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prtmin: *mut i64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferSink3_Impl::SetAvailableFilter(this, core::mem::transmute_copy(&prtmin)).into()
            }
        }
        Self { base__: IStreamBufferSink2_Vtbl::new::<Identity, OFFSET>(), SetAvailableFilter: SetAvailableFilter::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferSink3 as windows_core::Interface>::IID || iid == &<IStreamBufferSink as windows_core::Interface>::IID || iid == &<IStreamBufferSink2 as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferSink3 {}
windows_core::imp::define_interface!(IStreamBufferSource, IStreamBufferSource_Vtbl, 0x1c5bd776_6ced_4f44_8164_5eab0e98db12);
windows_core::imp::interface_hierarchy!(IStreamBufferSource, windows_core::IUnknown);
impl IStreamBufferSource {
    pub unsafe fn SetStreamSink<P0>(&self, pistreambuffersink: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IStreamBufferSink>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetStreamSink)(windows_core::Interface::as_raw(self), pistreambuffersink.param().abi()).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IStreamBufferSource_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub SetStreamSink: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IStreamBufferSource_Impl: windows_core::IUnknownImpl {
    fn SetStreamSink(&self, pistreambuffersink: windows_core::Ref<'_, IStreamBufferSink>) -> windows_core::Result<()>;
}
impl IStreamBufferSource_Vtbl {
    pub const fn new<Identity: IStreamBufferSource_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn SetStreamSink<Identity: IStreamBufferSource_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pistreambuffersink: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IStreamBufferSource_Impl::SetStreamSink(this, core::mem::transmute_copy(&pistreambuffersink)).into()
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), SetStreamSink: SetStreamSink::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IStreamBufferSource as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IStreamBufferSource {}
windows_core::imp::define_interface!(ITSDT, ITSDT_Vtbl, 0xd19bdb43_405b_4a7c_a791_c89110c33165);
windows_core::imp::interface_hierarchy!(ITSDT, windows_core::IUnknown);
impl ITSDT {
    pub unsafe fn Initialize<P0, P1>(&self, psectionlist: P0, pmpegdata: P1) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ISectionList>,
        P1: windows_core::Param<IMpeg2Data>,
    {
        unsafe { (windows_core::Interface::vtable(self).Initialize)(windows_core::Interface::as_raw(self), psectionlist.param().abi(), pmpegdata.param().abi()).ok() }
    }
    pub unsafe fn GetVersionNumber(&self) -> windows_core::Result<u8> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetVersionNumber)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCountOfTableDescriptors)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetTableDescriptorByIndex)(windows_core::Interface::as_raw(self), dwindex, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut Option<IGenericDescriptor>) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetTableDescriptorByTag)(windows_core::Interface::as_raw(self), btag, pdwcookie as _, core::mem::transmute(ppdescriptor)).ok() }
    }
    pub unsafe fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForNextTable)(windows_core::Interface::as_raw(self), hnexttableavailable).ok() }
    }
    pub unsafe fn GetNextTable(&self) -> windows_core::Result<ITSDT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNextTable)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).RegisterForWhenCurrent)(windows_core::Interface::as_raw(self), hnexttableiscurrent).ok() }
    }
    pub unsafe fn ConvertNextToCurrent(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ConvertNextToCurrent)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ITSDT_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Initialize: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetVersionNumber: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u8) -> windows_core::HRESULT,
    pub GetCountOfTableDescriptors: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32) -> windows_core::HRESULT,
    pub GetTableDescriptorByIndex: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub GetTableDescriptorByTag: unsafe extern "system" fn(*mut core::ffi::c_void, u8, *mut u32, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub GetNextTable: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub RegisterForWhenCurrent: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::Foundation::HANDLE) -> windows_core::HRESULT,
    pub ConvertNextToCurrent: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait ITSDT_Impl: windows_core::IUnknownImpl {
    fn Initialize(&self, psectionlist: windows_core::Ref<'_, ISectionList>, pmpegdata: windows_core::Ref<'_, IMpeg2Data>) -> windows_core::Result<()>;
    fn GetVersionNumber(&self) -> windows_core::Result<u8>;
    fn GetCountOfTableDescriptors(&self) -> windows_core::Result<u32>;
    fn GetTableDescriptorByIndex(&self, dwindex: u32) -> windows_core::Result<IGenericDescriptor>;
    fn GetTableDescriptorByTag(&self, btag: u8, pdwcookie: *mut u32, ppdescriptor: windows_core::OutRef<'_, IGenericDescriptor>) -> windows_core::Result<()>;
    fn RegisterForNextTable(&self, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn GetNextTable(&self) -> windows_core::Result<ITSDT>;
    fn RegisterForWhenCurrent(&self, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::Result<()>;
    fn ConvertNextToCurrent(&self) -> windows_core::Result<()>;
}
impl ITSDT_Vtbl {
    pub const fn new<Identity: ITSDT_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Initialize<Identity: ITSDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psectionlist: *mut core::ffi::c_void, pmpegdata: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITSDT_Impl::Initialize(this, core::mem::transmute_copy(&psectionlist), core::mem::transmute_copy(&pmpegdata)).into()
            }
        }
        unsafe extern "system" fn GetVersionNumber<Identity: ITSDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbval: *mut u8) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITSDT_Impl::GetVersionNumber(this) {
                    Ok(ok__) => {
                        pbval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetCountOfTableDescriptors<Identity: ITSDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pdwval: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITSDT_Impl::GetCountOfTableDescriptors(this) {
                    Ok(ok__) => {
                        pdwval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByIndex<Identity: ITSDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwindex: u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITSDT_Impl::GetTableDescriptorByIndex(this, core::mem::transmute_copy(&dwindex)) {
                    Ok(ok__) => {
                        ppdescriptor.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetTableDescriptorByTag<Identity: ITSDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, btag: u8, pdwcookie: *mut u32, ppdescriptor: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITSDT_Impl::GetTableDescriptorByTag(this, core::mem::transmute_copy(&btag), core::mem::transmute_copy(&pdwcookie), core::mem::transmute_copy(&ppdescriptor)).into()
            }
        }
        unsafe extern "system" fn RegisterForNextTable<Identity: ITSDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableavailable: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITSDT_Impl::RegisterForNextTable(this, core::mem::transmute_copy(&hnexttableavailable)).into()
            }
        }
        unsafe extern "system" fn GetNextTable<Identity: ITSDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pptsdt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITSDT_Impl::GetNextTable(this) {
                    Ok(ok__) => {
                        pptsdt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn RegisterForWhenCurrent<Identity: ITSDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, hnexttableiscurrent: super::super::super::Foundation::HANDLE) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITSDT_Impl::RegisterForWhenCurrent(this, core::mem::transmute_copy(&hnexttableiscurrent)).into()
            }
        }
        unsafe extern "system" fn ConvertNextToCurrent<Identity: ITSDT_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITSDT_Impl::ConvertNextToCurrent(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            Initialize: Initialize::<Identity, OFFSET>,
            GetVersionNumber: GetVersionNumber::<Identity, OFFSET>,
            GetCountOfTableDescriptors: GetCountOfTableDescriptors::<Identity, OFFSET>,
            GetTableDescriptorByIndex: GetTableDescriptorByIndex::<Identity, OFFSET>,
            GetTableDescriptorByTag: GetTableDescriptorByTag::<Identity, OFFSET>,
            RegisterForNextTable: RegisterForNextTable::<Identity, OFFSET>,
            GetNextTable: GetNextTable::<Identity, OFFSET>,
            RegisterForWhenCurrent: RegisterForWhenCurrent::<Identity, OFFSET>,
            ConvertNextToCurrent: ConvertNextToCurrent::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ITSDT as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ITSDT {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(ITuneRequest, ITuneRequest_Vtbl, 0x07ddc146_fc3d_11d2_9d8c_00c04f72d980);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for ITuneRequest {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(ITuneRequest, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl ITuneRequest {
    pub unsafe fn TuningSpace(&self) -> windows_core::Result<ITuningSpace> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TuningSpace)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Components(&self) -> windows_core::Result<IComponents> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Components)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<ITuneRequest> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn Locator(&self) -> windows_core::Result<ILocator> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Locator)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetLocator<P0>(&self, locator: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ILocator>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetLocator)(windows_core::Interface::as_raw(self), locator.param().abi()).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct ITuneRequest_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub TuningSpace: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Components: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Locator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetLocator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait ITuneRequest_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn TuningSpace(&self) -> windows_core::Result<ITuningSpace>;
    fn Components(&self) -> windows_core::Result<IComponents>;
    fn Clone(&self) -> windows_core::Result<ITuneRequest>;
    fn Locator(&self) -> windows_core::Result<ILocator>;
    fn SetLocator(&self, locator: windows_core::Ref<'_, ILocator>) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl ITuneRequest_Vtbl {
    pub const fn new<Identity: ITuneRequest_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn TuningSpace<Identity: ITuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tuningspace: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuneRequest_Impl::TuningSpace(this) {
                    Ok(ok__) => {
                        tuningspace.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Components<Identity: ITuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, components: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuneRequest_Impl::Components(this) {
                    Ok(ok__) => {
                        components.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Clone<Identity: ITuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newtunerequest: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuneRequest_Impl::Clone(this) {
                    Ok(ok__) => {
                        newtunerequest.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Locator<Identity: ITuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, locator: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuneRequest_Impl::Locator(this) {
                    Ok(ok__) => {
                        locator.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetLocator<Identity: ITuneRequest_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, locator: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuneRequest_Impl::SetLocator(this, core::mem::transmute_copy(&locator)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            TuningSpace: TuningSpace::<Identity, OFFSET>,
            Components: Components::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
            Locator: Locator::<Identity, OFFSET>,
            SetLocator: SetLocator::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ITuneRequest as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for ITuneRequest {}
windows_core::imp::define_interface!(ITuneRequestInfo, ITuneRequestInfo_Vtbl, 0xa3b152df_7a90_4218_ac54_9830bee8c0b6);
windows_core::imp::interface_hierarchy!(ITuneRequestInfo, windows_core::IUnknown);
impl ITuneRequestInfo {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetLocatorData<P0>(&self, request: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe { (windows_core::Interface::vtable(self).GetLocatorData)(windows_core::Interface::as_raw(self), request.param().abi()).ok() }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetComponentData<P0>(&self, currentrequest: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe { (windows_core::Interface::vtable(self).GetComponentData)(windows_core::Interface::as_raw(self), currentrequest.param().abi()).ok() }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn CreateComponentList<P0>(&self, currentrequest: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe { (windows_core::Interface::vtable(self).CreateComponentList)(windows_core::Interface::as_raw(self), currentrequest.param().abi()).ok() }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetNextProgram<P0>(&self, currentrequest: P0) -> windows_core::Result<ITuneRequest>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNextProgram)(windows_core::Interface::as_raw(self), currentrequest.param().abi(), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetPreviousProgram<P0>(&self, currentrequest: P0) -> windows_core::Result<ITuneRequest>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPreviousProgram)(windows_core::Interface::as_raw(self), currentrequest.param().abi(), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetNextLocator<P0>(&self, currentrequest: P0) -> windows_core::Result<ITuneRequest>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetNextLocator)(windows_core::Interface::as_raw(self), currentrequest.param().abi(), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn GetPreviousLocator<P0>(&self, currentrequest: P0) -> windows_core::Result<ITuneRequest>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetPreviousLocator)(windows_core::Interface::as_raw(self), currentrequest.param().abi(), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ITuneRequestInfo_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub GetLocatorData: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetLocatorData: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub GetComponentData: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetComponentData: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub CreateComponentList: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    CreateComponentList: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub GetNextProgram: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetNextProgram: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub GetPreviousProgram: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetPreviousProgram: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub GetNextLocator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetNextLocator: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub GetPreviousLocator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    GetPreviousLocator: usize,
}
#[cfg(feature = "Win32_System_Com")]
pub trait ITuneRequestInfo_Impl: windows_core::IUnknownImpl {
    fn GetLocatorData(&self, request: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<()>;
    fn GetComponentData(&self, currentrequest: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<()>;
    fn CreateComponentList(&self, currentrequest: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<()>;
    fn GetNextProgram(&self, currentrequest: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<ITuneRequest>;
    fn GetPreviousProgram(&self, currentrequest: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<ITuneRequest>;
    fn GetNextLocator(&self, currentrequest: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<ITuneRequest>;
    fn GetPreviousLocator(&self, currentrequest: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<ITuneRequest>;
}
#[cfg(feature = "Win32_System_Com")]
impl ITuneRequestInfo_Vtbl {
    pub const fn new<Identity: ITuneRequestInfo_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetLocatorData<Identity: ITuneRequestInfo_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, request: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuneRequestInfo_Impl::GetLocatorData(this, core::mem::transmute_copy(&request)).into()
            }
        }
        unsafe extern "system" fn GetComponentData<Identity: ITuneRequestInfo_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentrequest: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuneRequestInfo_Impl::GetComponentData(this, core::mem::transmute_copy(&currentrequest)).into()
            }
        }
        unsafe extern "system" fn CreateComponentList<Identity: ITuneRequestInfo_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentrequest: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuneRequestInfo_Impl::CreateComponentList(this, core::mem::transmute_copy(&currentrequest)).into()
            }
        }
        unsafe extern "system" fn GetNextProgram<Identity: ITuneRequestInfo_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentrequest: *mut core::ffi::c_void, tunerequest: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuneRequestInfo_Impl::GetNextProgram(this, core::mem::transmute_copy(&currentrequest)) {
                    Ok(ok__) => {
                        tunerequest.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPreviousProgram<Identity: ITuneRequestInfo_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentrequest: *mut core::ffi::c_void, tunerequest: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuneRequestInfo_Impl::GetPreviousProgram(this, core::mem::transmute_copy(&currentrequest)) {
                    Ok(ok__) => {
                        tunerequest.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetNextLocator<Identity: ITuneRequestInfo_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentrequest: *mut core::ffi::c_void, tunerequest: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuneRequestInfo_Impl::GetNextLocator(this, core::mem::transmute_copy(&currentrequest)) {
                    Ok(ok__) => {
                        tunerequest.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetPreviousLocator<Identity: ITuneRequestInfo_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentrequest: *mut core::ffi::c_void, tunerequest: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuneRequestInfo_Impl::GetPreviousLocator(this, core::mem::transmute_copy(&currentrequest)) {
                    Ok(ok__) => {
                        tunerequest.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetLocatorData: GetLocatorData::<Identity, OFFSET>,
            GetComponentData: GetComponentData::<Identity, OFFSET>,
            CreateComponentList: CreateComponentList::<Identity, OFFSET>,
            GetNextProgram: GetNextProgram::<Identity, OFFSET>,
            GetPreviousProgram: GetPreviousProgram::<Identity, OFFSET>,
            GetNextLocator: GetNextLocator::<Identity, OFFSET>,
            GetPreviousLocator: GetPreviousLocator::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ITuneRequestInfo as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for ITuneRequestInfo {}
windows_core::imp::define_interface!(ITuneRequestInfoEx, ITuneRequestInfoEx_Vtbl, 0xee957c52_b0d0_4e78_8dd1_b87a08bfd893);
impl core::ops::Deref for ITuneRequestInfoEx {
    type Target = ITuneRequestInfo;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
windows_core::imp::interface_hierarchy!(ITuneRequestInfoEx, windows_core::IUnknown, ITuneRequestInfo);
impl ITuneRequestInfoEx {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn CreateComponentListEx<P0>(&self, currentrequest: P0) -> windows_core::Result<windows_core::IUnknown>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CreateComponentListEx)(windows_core::Interface::as_raw(self), currentrequest.param().abi(), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ITuneRequestInfoEx_Vtbl {
    pub base__: ITuneRequestInfo_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub CreateComponentListEx: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    CreateComponentListEx: usize,
}
#[cfg(feature = "Win32_System_Com")]
pub trait ITuneRequestInfoEx_Impl: ITuneRequestInfo_Impl {
    fn CreateComponentListEx(&self, currentrequest: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<windows_core::IUnknown>;
}
#[cfg(feature = "Win32_System_Com")]
impl ITuneRequestInfoEx_Vtbl {
    pub const fn new<Identity: ITuneRequestInfoEx_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn CreateComponentListEx<Identity: ITuneRequestInfoEx_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, currentrequest: *mut core::ffi::c_void, ppcurpmt: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuneRequestInfoEx_Impl::CreateComponentListEx(this, core::mem::transmute_copy(&currentrequest)) {
                    Ok(ok__) => {
                        ppcurpmt.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: ITuneRequestInfo_Vtbl::new::<Identity, OFFSET>(), CreateComponentListEx: CreateComponentListEx::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ITuneRequestInfoEx as windows_core::Interface>::IID || iid == &<ITuneRequestInfo as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for ITuneRequestInfoEx {}
windows_core::imp::define_interface!(ITuner, ITuner_Vtbl, 0x28c52640_018a_11d3_9d8e_00c04f72d980);
windows_core::imp::interface_hierarchy!(ITuner, windows_core::IUnknown);
impl ITuner {
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn TuningSpace(&self) -> windows_core::Result<ITuningSpace> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TuningSpace)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn SetTuningSpace<P0>(&self, tuningspace: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ITuningSpace>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetTuningSpace)(windows_core::Interface::as_raw(self), tuningspace.param().abi()).ok() }
    }
    pub unsafe fn EnumTuningSpaces(&self) -> windows_core::Result<IEnumTuningSpaces> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumTuningSpaces)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn TuneRequest(&self) -> windows_core::Result<ITuneRequest> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TuneRequest)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn SetTuneRequest<P0>(&self, tunerequest: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetTuneRequest)(windows_core::Interface::as_raw(self), tunerequest.param().abi()).ok() }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn Validate<P0>(&self, tunerequest: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ITuneRequest>,
    {
        unsafe { (windows_core::Interface::vtable(self).Validate)(windows_core::Interface::as_raw(self), tunerequest.param().abi()).ok() }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn PreferredComponentTypes(&self) -> windows_core::Result<IComponentTypes> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).PreferredComponentTypes)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(feature = "Win32_System_Com")]
    pub unsafe fn SetPreferredComponentTypes<P0>(&self, componenttypes: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IComponentTypes>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetPreferredComponentTypes)(windows_core::Interface::as_raw(self), componenttypes.param().abi()).ok() }
    }
    pub unsafe fn SignalStrength(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).SignalStrength)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn TriggerSignalEvents(&self, interval: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).TriggerSignalEvents)(windows_core::Interface::as_raw(self), interval).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ITuner_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    #[cfg(feature = "Win32_System_Com")]
    pub TuningSpace: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    TuningSpace: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub SetTuningSpace: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    SetTuningSpace: usize,
    pub EnumTuningSpaces: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Com")]
    pub TuneRequest: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    TuneRequest: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub SetTuneRequest: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    SetTuneRequest: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub Validate: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    Validate: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub PreferredComponentTypes: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    PreferredComponentTypes: usize,
    #[cfg(feature = "Win32_System_Com")]
    pub SetPreferredComponentTypes: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Com"))]
    SetPreferredComponentTypes: usize,
    pub SignalStrength: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub TriggerSignalEvents: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(feature = "Win32_System_Com")]
pub trait ITuner_Impl: windows_core::IUnknownImpl {
    fn TuningSpace(&self) -> windows_core::Result<ITuningSpace>;
    fn SetTuningSpace(&self, tuningspace: windows_core::Ref<'_, ITuningSpace>) -> windows_core::Result<()>;
    fn EnumTuningSpaces(&self) -> windows_core::Result<IEnumTuningSpaces>;
    fn TuneRequest(&self) -> windows_core::Result<ITuneRequest>;
    fn SetTuneRequest(&self, tunerequest: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<()>;
    fn Validate(&self, tunerequest: windows_core::Ref<'_, ITuneRequest>) -> windows_core::Result<()>;
    fn PreferredComponentTypes(&self) -> windows_core::Result<IComponentTypes>;
    fn SetPreferredComponentTypes(&self, componenttypes: windows_core::Ref<'_, IComponentTypes>) -> windows_core::Result<()>;
    fn SignalStrength(&self) -> windows_core::Result<i32>;
    fn TriggerSignalEvents(&self, interval: i32) -> windows_core::Result<()>;
}
#[cfg(feature = "Win32_System_Com")]
impl ITuner_Vtbl {
    pub const fn new<Identity: ITuner_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn TuningSpace<Identity: ITuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tuningspace: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuner_Impl::TuningSpace(this) {
                    Ok(ok__) => {
                        tuningspace.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetTuningSpace<Identity: ITuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tuningspace: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuner_Impl::SetTuningSpace(this, core::mem::transmute_copy(&tuningspace)).into()
            }
        }
        unsafe extern "system" fn EnumTuningSpaces<Identity: ITuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuner_Impl::EnumTuningSpaces(this) {
                    Ok(ok__) => {
                        ppenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn TuneRequest<Identity: ITuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tunerequest: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuner_Impl::TuneRequest(this) {
                    Ok(ok__) => {
                        tunerequest.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetTuneRequest<Identity: ITuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tunerequest: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuner_Impl::SetTuneRequest(this, core::mem::transmute_copy(&tunerequest)).into()
            }
        }
        unsafe extern "system" fn Validate<Identity: ITuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tunerequest: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuner_Impl::Validate(this, core::mem::transmute_copy(&tunerequest)).into()
            }
        }
        unsafe extern "system" fn PreferredComponentTypes<Identity: ITuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, componenttypes: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuner_Impl::PreferredComponentTypes(this) {
                    Ok(ok__) => {
                        componenttypes.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetPreferredComponentTypes<Identity: ITuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, componenttypes: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuner_Impl::SetPreferredComponentTypes(this, core::mem::transmute_copy(&componenttypes)).into()
            }
        }
        unsafe extern "system" fn SignalStrength<Identity: ITuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, strength: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuner_Impl::SignalStrength(this) {
                    Ok(ok__) => {
                        strength.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn TriggerSignalEvents<Identity: ITuner_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, interval: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuner_Impl::TriggerSignalEvents(this, core::mem::transmute_copy(&interval)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            TuningSpace: TuningSpace::<Identity, OFFSET>,
            SetTuningSpace: SetTuningSpace::<Identity, OFFSET>,
            EnumTuningSpaces: EnumTuningSpaces::<Identity, OFFSET>,
            TuneRequest: TuneRequest::<Identity, OFFSET>,
            SetTuneRequest: SetTuneRequest::<Identity, OFFSET>,
            Validate: Validate::<Identity, OFFSET>,
            PreferredComponentTypes: PreferredComponentTypes::<Identity, OFFSET>,
            SetPreferredComponentTypes: SetPreferredComponentTypes::<Identity, OFFSET>,
            SignalStrength: SignalStrength::<Identity, OFFSET>,
            TriggerSignalEvents: TriggerSignalEvents::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ITuner as windows_core::Interface>::IID
    }
}
#[cfg(feature = "Win32_System_Com")]
impl windows_core::RuntimeName for ITuner {}
windows_core::imp::define_interface!(ITunerCap, ITunerCap_Vtbl, 0xe60dfa45_8d56_4e65_a8ab_d6be9412c249);
windows_core::imp::interface_hierarchy!(ITunerCap, windows_core::IUnknown);
impl ITunerCap {
    pub unsafe fn get_SupportedNetworkTypes(&self, ulcnetworktypesmax: u32, pulcnetworktypes: *mut u32, pguidnetworktypes: *mut windows_core::GUID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).get_SupportedNetworkTypes)(windows_core::Interface::as_raw(self), ulcnetworktypesmax, pulcnetworktypes as _, pguidnetworktypes as _).ok() }
    }
    pub unsafe fn get_SupportedVideoFormats(&self, pulamtunermodetype: *mut u32, pulanalogvideostandard: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).get_SupportedVideoFormats)(windows_core::Interface::as_raw(self), pulamtunermodetype as _, pulanalogvideostandard as _).ok() }
    }
    pub unsafe fn get_AuxInputCount(&self, pulcompositecount: *mut u32, pulsvideocount: *mut u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).get_AuxInputCount)(windows_core::Interface::as_raw(self), pulcompositecount as _, pulsvideocount as _).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ITunerCap_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub get_SupportedNetworkTypes: unsafe extern "system" fn(*mut core::ffi::c_void, u32, *mut u32, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub get_SupportedVideoFormats: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32, *mut u32) -> windows_core::HRESULT,
    pub get_AuxInputCount: unsafe extern "system" fn(*mut core::ffi::c_void, *mut u32, *mut u32) -> windows_core::HRESULT,
}
pub trait ITunerCap_Impl: windows_core::IUnknownImpl {
    fn get_SupportedNetworkTypes(&self, ulcnetworktypesmax: u32, pulcnetworktypes: *mut u32, pguidnetworktypes: *mut windows_core::GUID) -> windows_core::Result<()>;
    fn get_SupportedVideoFormats(&self, pulamtunermodetype: *mut u32, pulanalogvideostandard: *mut u32) -> windows_core::Result<()>;
    fn get_AuxInputCount(&self, pulcompositecount: *mut u32, pulsvideocount: *mut u32) -> windows_core::Result<()>;
}
impl ITunerCap_Vtbl {
    pub const fn new<Identity: ITunerCap_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn get_SupportedNetworkTypes<Identity: ITunerCap_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ulcnetworktypesmax: u32, pulcnetworktypes: *mut u32, pguidnetworktypes: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITunerCap_Impl::get_SupportedNetworkTypes(this, core::mem::transmute_copy(&ulcnetworktypesmax), core::mem::transmute_copy(&pulcnetworktypes), core::mem::transmute_copy(&pguidnetworktypes)).into()
            }
        }
        unsafe extern "system" fn get_SupportedVideoFormats<Identity: ITunerCap_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pulamtunermodetype: *mut u32, pulanalogvideostandard: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITunerCap_Impl::get_SupportedVideoFormats(this, core::mem::transmute_copy(&pulamtunermodetype), core::mem::transmute_copy(&pulanalogvideostandard)).into()
            }
        }
        unsafe extern "system" fn get_AuxInputCount<Identity: ITunerCap_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pulcompositecount: *mut u32, pulsvideocount: *mut u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITunerCap_Impl::get_AuxInputCount(this, core::mem::transmute_copy(&pulcompositecount), core::mem::transmute_copy(&pulsvideocount)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            get_SupportedNetworkTypes: get_SupportedNetworkTypes::<Identity, OFFSET>,
            get_SupportedVideoFormats: get_SupportedVideoFormats::<Identity, OFFSET>,
            get_AuxInputCount: get_AuxInputCount::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ITunerCap as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ITunerCap {}
windows_core::imp::define_interface!(ITunerCapEx, ITunerCapEx_Vtbl, 0xed3e0c66_18c8_4ea6_9300_f6841fdd35dc);
windows_core::imp::interface_hierarchy!(ITunerCapEx, windows_core::IUnknown);
impl ITunerCapEx {
    pub unsafe fn Has608_708Caption(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Has608_708Caption)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct ITunerCapEx_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub Has608_708Caption: unsafe extern "system" fn(*mut core::ffi::c_void, *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT,
}
pub trait ITunerCapEx_Impl: windows_core::IUnknownImpl {
    fn Has608_708Caption(&self) -> windows_core::Result<super::super::super::Foundation::VARIANT_BOOL>;
}
impl ITunerCapEx_Vtbl {
    pub const fn new<Identity: ITunerCapEx_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Has608_708Caption<Identity: ITunerCapEx_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pbhascaption: *mut super::super::super::Foundation::VARIANT_BOOL) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITunerCapEx_Impl::Has608_708Caption(this) {
                    Ok(ok__) => {
                        pbhascaption.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self { base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(), Has608_708Caption: Has608_708Caption::<Identity, OFFSET> }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ITunerCapEx as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for ITunerCapEx {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(ITuningSpace, ITuningSpace_Vtbl, 0x061c6e30_e622_11d2_9493_00c04f72d980);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for ITuningSpace {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(ITuningSpace, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl ITuningSpace {
    pub unsafe fn UniqueName(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).UniqueName)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetUniqueName(&self, name: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetUniqueName)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(name)).ok() }
    }
    pub unsafe fn FriendlyName(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).FriendlyName)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetFriendlyName(&self, name: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetFriendlyName)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(name)).ok() }
    }
    pub unsafe fn CLSID(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CLSID)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn NetworkType(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).NetworkType)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetNetworkType(&self, networktypeguid: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetNetworkType)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(networktypeguid)).ok() }
    }
    pub unsafe fn _NetworkType(&self) -> windows_core::Result<windows_core::GUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._NetworkType)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn Set_NetworkType(&self, networktypeguid: *const windows_core::GUID) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Set_NetworkType)(windows_core::Interface::as_raw(self), networktypeguid).ok() }
    }
    pub unsafe fn CreateTuneRequest(&self) -> windows_core::Result<ITuneRequest> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CreateTuneRequest)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn EnumCategoryGUIDs(&self) -> windows_core::Result<super::super::super::System::Com::IEnumGUID> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumCategoryGUIDs)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn EnumDeviceMonikers(&self) -> windows_core::Result<super::super::super::System::Com::IEnumMoniker> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumDeviceMonikers)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn DefaultPreferredComponentTypes(&self) -> windows_core::Result<IComponentTypes> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DefaultPreferredComponentTypes)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetDefaultPreferredComponentTypes<P0>(&self, newcomponenttypes: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<IComponentTypes>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetDefaultPreferredComponentTypes)(windows_core::Interface::as_raw(self), newcomponenttypes.param().abi()).ok() }
    }
    pub unsafe fn FrequencyMapping(&self) -> windows_core::Result<windows_core::BSTR> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).FrequencyMapping)(windows_core::Interface::as_raw(self), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn SetFrequencyMapping(&self, mapping: &windows_core::BSTR) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetFrequencyMapping)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(mapping)).ok() }
    }
    pub unsafe fn DefaultLocator(&self) -> windows_core::Result<ILocator> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).DefaultLocator)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetDefaultLocator<P0>(&self, locatorval: P0) -> windows_core::Result<()>
    where
        P0: windows_core::Param<ILocator>,
    {
        unsafe { (windows_core::Interface::vtable(self).SetDefaultLocator)(windows_core::Interface::as_raw(self), locatorval.param().abi()).ok() }
    }
    pub unsafe fn Clone(&self) -> windows_core::Result<ITuningSpace> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Clone)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct ITuningSpace_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub UniqueName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetUniqueName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub FriendlyName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetFriendlyName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub CLSID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub NetworkType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetNetworkType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub _NetworkType: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::GUID) -> windows_core::HRESULT,
    pub Set_NetworkType: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID) -> windows_core::HRESULT,
    pub CreateTuneRequest: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub EnumCategoryGUIDs: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub EnumDeviceMonikers: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DefaultPreferredComponentTypes: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetDefaultPreferredComponentTypes: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub FrequencyMapping: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetFrequencyMapping: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub DefaultLocator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetDefaultLocator: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub Clone: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait ITuningSpace_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn UniqueName(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetUniqueName(&self, name: &windows_core::BSTR) -> windows_core::Result<()>;
    fn FriendlyName(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetFriendlyName(&self, name: &windows_core::BSTR) -> windows_core::Result<()>;
    fn CLSID(&self) -> windows_core::Result<windows_core::BSTR>;
    fn NetworkType(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetNetworkType(&self, networktypeguid: &windows_core::BSTR) -> windows_core::Result<()>;
    fn _NetworkType(&self) -> windows_core::Result<windows_core::GUID>;
    fn Set_NetworkType(&self, networktypeguid: *const windows_core::GUID) -> windows_core::Result<()>;
    fn CreateTuneRequest(&self) -> windows_core::Result<ITuneRequest>;
    fn EnumCategoryGUIDs(&self) -> windows_core::Result<super::super::super::System::Com::IEnumGUID>;
    fn EnumDeviceMonikers(&self) -> windows_core::Result<super::super::super::System::Com::IEnumMoniker>;
    fn DefaultPreferredComponentTypes(&self) -> windows_core::Result<IComponentTypes>;
    fn SetDefaultPreferredComponentTypes(&self, newcomponenttypes: windows_core::Ref<'_, IComponentTypes>) -> windows_core::Result<()>;
    fn FrequencyMapping(&self) -> windows_core::Result<windows_core::BSTR>;
    fn SetFrequencyMapping(&self, mapping: &windows_core::BSTR) -> windows_core::Result<()>;
    fn DefaultLocator(&self) -> windows_core::Result<ILocator>;
    fn SetDefaultLocator(&self, locatorval: windows_core::Ref<'_, ILocator>) -> windows_core::Result<()>;
    fn Clone(&self) -> windows_core::Result<ITuningSpace>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl ITuningSpace_Vtbl {
    pub const fn new<Identity: ITuningSpace_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn UniqueName<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, name: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::UniqueName(this) {
                    Ok(ok__) => {
                        name.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetUniqueName<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, name: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuningSpace_Impl::SetUniqueName(this, core::mem::transmute(&name)).into()
            }
        }
        unsafe extern "system" fn FriendlyName<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, name: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::FriendlyName(this) {
                    Ok(ok__) => {
                        name.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetFriendlyName<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, name: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuningSpace_Impl::SetFriendlyName(this, core::mem::transmute(&name)).into()
            }
        }
        unsafe extern "system" fn CLSID<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, spaceclsid: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::CLSID(this) {
                    Ok(ok__) => {
                        spaceclsid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn NetworkType<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, networktypeguid: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::NetworkType(this) {
                    Ok(ok__) => {
                        networktypeguid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetNetworkType<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, networktypeguid: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuningSpace_Impl::SetNetworkType(this, core::mem::transmute(&networktypeguid)).into()
            }
        }
        unsafe extern "system" fn _NetworkType<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, networktypeguid: *mut windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::_NetworkType(this) {
                    Ok(ok__) => {
                        networktypeguid.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Set_NetworkType<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, networktypeguid: *const windows_core::GUID) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuningSpace_Impl::Set_NetworkType(this, core::mem::transmute_copy(&networktypeguid)).into()
            }
        }
        unsafe extern "system" fn CreateTuneRequest<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tunerequest: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::CreateTuneRequest(this) {
                    Ok(ok__) => {
                        tunerequest.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn EnumCategoryGUIDs<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::EnumCategoryGUIDs(this) {
                    Ok(ok__) => {
                        ppenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn EnumDeviceMonikers<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::EnumDeviceMonikers(this) {
                    Ok(ok__) => {
                        ppenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn DefaultPreferredComponentTypes<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, componenttypes: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::DefaultPreferredComponentTypes(this) {
                    Ok(ok__) => {
                        componenttypes.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDefaultPreferredComponentTypes<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newcomponenttypes: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuningSpace_Impl::SetDefaultPreferredComponentTypes(this, core::mem::transmute_copy(&newcomponenttypes)).into()
            }
        }
        unsafe extern "system" fn FrequencyMapping<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pmapping: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::FrequencyMapping(this) {
                    Ok(ok__) => {
                        pmapping.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetFrequencyMapping<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, mapping: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuningSpace_Impl::SetFrequencyMapping(this, core::mem::transmute(&mapping)).into()
            }
        }
        unsafe extern "system" fn DefaultLocator<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, locatorval: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::DefaultLocator(this) {
                    Ok(ok__) => {
                        locatorval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetDefaultLocator<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, locatorval: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuningSpace_Impl::SetDefaultLocator(this, core::mem::transmute_copy(&locatorval)).into()
            }
        }
        unsafe extern "system" fn Clone<Identity: ITuningSpace_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newts: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpace_Impl::Clone(this) {
                    Ok(ok__) => {
                        newts.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            UniqueName: UniqueName::<Identity, OFFSET>,
            SetUniqueName: SetUniqueName::<Identity, OFFSET>,
            FriendlyName: FriendlyName::<Identity, OFFSET>,
            SetFriendlyName: SetFriendlyName::<Identity, OFFSET>,
            CLSID: CLSID::<Identity, OFFSET>,
            NetworkType: NetworkType::<Identity, OFFSET>,
            SetNetworkType: SetNetworkType::<Identity, OFFSET>,
            _NetworkType: _NetworkType::<Identity, OFFSET>,
            Set_NetworkType: Set_NetworkType::<Identity, OFFSET>,
            CreateTuneRequest: CreateTuneRequest::<Identity, OFFSET>,
            EnumCategoryGUIDs: EnumCategoryGUIDs::<Identity, OFFSET>,
            EnumDeviceMonikers: EnumDeviceMonikers::<Identity, OFFSET>,
            DefaultPreferredComponentTypes: DefaultPreferredComponentTypes::<Identity, OFFSET>,
            SetDefaultPreferredComponentTypes: SetDefaultPreferredComponentTypes::<Identity, OFFSET>,
            FrequencyMapping: FrequencyMapping::<Identity, OFFSET>,
            SetFrequencyMapping: SetFrequencyMapping::<Identity, OFFSET>,
            DefaultLocator: DefaultLocator::<Identity, OFFSET>,
            SetDefaultLocator: SetDefaultLocator::<Identity, OFFSET>,
            Clone: Clone::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ITuningSpace as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for ITuningSpace {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(ITuningSpaceContainer, ITuningSpaceContainer_Vtbl, 0x5b692e84_e2f1_11d2_9493_00c04f72d980);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for ITuningSpaceContainer {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(ITuningSpaceContainer, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl ITuningSpaceContainer {
    pub unsafe fn Count(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Count)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._NewEnum)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn get_Item(&self, varindex: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<ITuningSpace> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varindex), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn put_Item<P1>(&self, varindex: &super::super::super::System::Variant::VARIANT, tuningspace: P1) -> windows_core::Result<()>
    where
        P1: windows_core::Param<ITuningSpace>,
    {
        unsafe { (windows_core::Interface::vtable(self).put_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varindex), tuningspace.param().abi()).ok() }
    }
    pub unsafe fn TuningSpacesForCLSID(&self, spaceclsid: &windows_core::BSTR) -> windows_core::Result<ITuningSpaces> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TuningSpacesForCLSID)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(spaceclsid), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn _TuningSpacesForCLSID2(&self, spaceclsid: *const windows_core::GUID) -> windows_core::Result<ITuningSpaces> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._TuningSpacesForCLSID2)(windows_core::Interface::as_raw(self), spaceclsid, &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn TuningSpacesForName(&self, name: &windows_core::BSTR) -> windows_core::Result<ITuningSpaces> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).TuningSpacesForName)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(name), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn FindID<P0>(&self, tuningspace: P0) -> windows_core::Result<i32>
    where
        P0: windows_core::Param<ITuningSpace>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).FindID)(windows_core::Interface::as_raw(self), tuningspace.param().abi(), &mut result__).map(|| result__)
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Add<P0>(&self, tuningspace: P0) -> windows_core::Result<super::super::super::System::Variant::VARIANT>
    where
        P0: windows_core::Param<ITuningSpace>,
    {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Add)(windows_core::Interface::as_raw(self), tuningspace.param().abi(), &mut result__).map(|| core::mem::transmute(result__))
        }
    }
    pub unsafe fn EnumTuningSpaces(&self) -> windows_core::Result<IEnumTuningSpaces> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumTuningSpaces)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn Remove(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Remove)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(index)).ok() }
    }
    pub unsafe fn MaxCount(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).MaxCount)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetMaxCount(&self, maxcount: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetMaxCount)(windows_core::Interface::as_raw(self), maxcount).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct ITuningSpaceContainer_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Count: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub _NewEnum: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    _NewEnum: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub get_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    get_Item: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub put_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    put_Item: usize,
    pub TuningSpacesForCLSID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub _TuningSpacesForCLSID2: unsafe extern "system" fn(*mut core::ffi::c_void, *const windows_core::GUID, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub TuningSpacesForName: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub FindID: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Add: unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void, *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Add: usize,
    pub EnumTuningSpaces: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub Remove: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    Remove: usize,
    pub MaxCount: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub SetMaxCount: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait ITuningSpaceContainer_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Count(&self) -> windows_core::Result<i32>;
    fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn get_Item(&self, varindex: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<ITuningSpace>;
    fn put_Item(&self, varindex: &super::super::super::System::Variant::VARIANT, tuningspace: windows_core::Ref<'_, ITuningSpace>) -> windows_core::Result<()>;
    fn TuningSpacesForCLSID(&self, spaceclsid: &windows_core::BSTR) -> windows_core::Result<ITuningSpaces>;
    fn _TuningSpacesForCLSID2(&self, spaceclsid: *const windows_core::GUID) -> windows_core::Result<ITuningSpaces>;
    fn TuningSpacesForName(&self, name: &windows_core::BSTR) -> windows_core::Result<ITuningSpaces>;
    fn FindID(&self, tuningspace: windows_core::Ref<'_, ITuningSpace>) -> windows_core::Result<i32>;
    fn Add(&self, tuningspace: windows_core::Ref<'_, ITuningSpace>) -> windows_core::Result<super::super::super::System::Variant::VARIANT>;
    fn EnumTuningSpaces(&self) -> windows_core::Result<IEnumTuningSpaces>;
    fn Remove(&self, index: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<()>;
    fn MaxCount(&self) -> windows_core::Result<i32>;
    fn SetMaxCount(&self, maxcount: i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl ITuningSpaceContainer_Vtbl {
    pub const fn new<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Count<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, count: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaceContainer_Impl::Count(this) {
                    Ok(ok__) => {
                        count.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _NewEnum<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaceContainer_Impl::_NewEnum(this) {
                    Ok(ok__) => {
                        newenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_Item<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varindex: super::super::super::System::Variant::VARIANT, tuningspace: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaceContainer_Impl::get_Item(this, core::mem::transmute(&varindex)) {
                    Ok(ok__) => {
                        tuningspace.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn put_Item<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varindex: super::super::super::System::Variant::VARIANT, tuningspace: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuningSpaceContainer_Impl::put_Item(this, core::mem::transmute(&varindex), core::mem::transmute_copy(&tuningspace)).into()
            }
        }
        unsafe extern "system" fn TuningSpacesForCLSID<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, spaceclsid: *mut core::ffi::c_void, newcoll: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaceContainer_Impl::TuningSpacesForCLSID(this, core::mem::transmute(&spaceclsid)) {
                    Ok(ok__) => {
                        newcoll.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _TuningSpacesForCLSID2<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, spaceclsid: *const windows_core::GUID, newcoll: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaceContainer_Impl::_TuningSpacesForCLSID2(this, core::mem::transmute_copy(&spaceclsid)) {
                    Ok(ok__) => {
                        newcoll.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn TuningSpacesForName<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, name: *mut core::ffi::c_void, newcoll: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaceContainer_Impl::TuningSpacesForName(this, core::mem::transmute(&name)) {
                    Ok(ok__) => {
                        newcoll.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn FindID<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tuningspace: *mut core::ffi::c_void, id: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaceContainer_Impl::FindID(this, core::mem::transmute_copy(&tuningspace)) {
                    Ok(ok__) => {
                        id.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Add<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, tuningspace: *mut core::ffi::c_void, newindex: *mut super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaceContainer_Impl::Add(this, core::mem::transmute_copy(&tuningspace)) {
                    Ok(ok__) => {
                        newindex.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn EnumTuningSpaces<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaceContainer_Impl::EnumTuningSpaces(this) {
                    Ok(ok__) => {
                        ppenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn Remove<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, index: super::super::super::System::Variant::VARIANT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuningSpaceContainer_Impl::Remove(this, core::mem::transmute(&index)).into()
            }
        }
        unsafe extern "system" fn MaxCount<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, maxcount: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaceContainer_Impl::MaxCount(this) {
                    Ok(ok__) => {
                        maxcount.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetMaxCount<Identity: ITuningSpaceContainer_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, maxcount: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                ITuningSpaceContainer_Impl::SetMaxCount(this, core::mem::transmute_copy(&maxcount)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Count: Count::<Identity, OFFSET>,
            _NewEnum: _NewEnum::<Identity, OFFSET>,
            get_Item: get_Item::<Identity, OFFSET>,
            put_Item: put_Item::<Identity, OFFSET>,
            TuningSpacesForCLSID: TuningSpacesForCLSID::<Identity, OFFSET>,
            _TuningSpacesForCLSID2: _TuningSpacesForCLSID2::<Identity, OFFSET>,
            TuningSpacesForName: TuningSpacesForName::<Identity, OFFSET>,
            FindID: FindID::<Identity, OFFSET>,
            Add: Add::<Identity, OFFSET>,
            EnumTuningSpaces: EnumTuningSpaces::<Identity, OFFSET>,
            Remove: Remove::<Identity, OFFSET>,
            MaxCount: MaxCount::<Identity, OFFSET>,
            SetMaxCount: SetMaxCount::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ITuningSpaceContainer as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for ITuningSpaceContainer {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(ITuningSpaces, ITuningSpaces_Vtbl, 0x901284e4_33fe_4b69_8d63_634a596f3756);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for ITuningSpaces {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(ITuningSpaces, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl ITuningSpaces {
    pub unsafe fn Count(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).Count)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    #[cfg(feature = "Win32_System_Ole")]
    pub unsafe fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self)._NewEnum)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub unsafe fn get_Item(&self, varindex: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<ITuningSpace> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).get_Item)(windows_core::Interface::as_raw(self), core::mem::transmute_copy(varindex), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn EnumTuningSpaces(&self) -> windows_core::Result<IEnumTuningSpaces> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).EnumTuningSpaces)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct ITuningSpaces_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Count: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    #[cfg(feature = "Win32_System_Ole")]
    pub _NewEnum: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(feature = "Win32_System_Ole"))]
    _NewEnum: usize,
    #[cfg(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
    pub get_Item: unsafe extern "system" fn(*mut core::ffi::c_void, super::super::super::System::Variant::VARIANT, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    #[cfg(not(all(feature = "Win32_System_Ole", feature = "Win32_System_Variant")))]
    get_Item: usize,
    pub EnumTuningSpaces: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait ITuningSpaces_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Count(&self) -> windows_core::Result<i32>;
    fn _NewEnum(&self) -> windows_core::Result<super::super::super::System::Ole::IEnumVARIANT>;
    fn get_Item(&self, varindex: &super::super::super::System::Variant::VARIANT) -> windows_core::Result<ITuningSpace>;
    fn EnumTuningSpaces(&self) -> windows_core::Result<IEnumTuningSpaces>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl ITuningSpaces_Vtbl {
    pub const fn new<Identity: ITuningSpaces_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Count<Identity: ITuningSpaces_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, count: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaces_Impl::Count(this) {
                    Ok(ok__) => {
                        count.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn _NewEnum<Identity: ITuningSpaces_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaces_Impl::_NewEnum(this) {
                    Ok(ok__) => {
                        newenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn get_Item<Identity: ITuningSpaces_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, varindex: super::super::super::System::Variant::VARIANT, tuningspace: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaces_Impl::get_Item(this, core::mem::transmute(&varindex)) {
                    Ok(ok__) => {
                        tuningspace.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn EnumTuningSpaces<Identity: ITuningSpaces_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, newenum: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match ITuningSpaces_Impl::EnumTuningSpaces(this) {
                    Ok(ok__) => {
                        newenum.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Count: Count::<Identity, OFFSET>,
            _NewEnum: _NewEnum::<Identity, OFFSET>,
            get_Item: get_Item::<Identity, OFFSET>,
            EnumTuningSpaces: EnumTuningSpaces::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<ITuningSpaces as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for ITuningSpaces {}
windows_core::imp::define_interface!(IXDSCodec, IXDSCodec_Vtbl, 0xc4c4c4b3_0049_4e2b_98fb_9537f6ce516d);
windows_core::imp::interface_hierarchy!(IXDSCodec, windows_core::IUnknown);
impl IXDSCodec {
    pub unsafe fn XDSToRatObjOK(&self) -> windows_core::Result<windows_core::HRESULT> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).XDSToRatObjOK)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn SetCCSubstreamService(&self, substreammask: i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetCCSubstreamService)(windows_core::Interface::as_raw(self), substreammask).ok() }
    }
    pub unsafe fn CCSubstreamService(&self) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).CCSubstreamService)(windows_core::Interface::as_raw(self), &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetContentAdvisoryRating(&self, prat: *mut i32, ppktseqid: *mut i32, pcallseqid: *mut i32, ptimestart: *mut i64, ptimeend: *mut i64) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetContentAdvisoryRating)(windows_core::Interface::as_raw(self), prat as _, ppktseqid as _, pcallseqid as _, ptimestart as _, ptimeend as _).ok() }
    }
    pub unsafe fn GetXDSPacket(&self, pxdsclasspkt: *mut i32, pxdstypepkt: *mut i32, pbstrxdspkt: *mut windows_core::BSTR, ppktseqid: *mut i32, pcallseqid: *mut i32, ptimestart: *mut i64, ptimeend: *mut i64) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetXDSPacket)(windows_core::Interface::as_raw(self), pxdsclasspkt as _, pxdstypepkt as _, core::mem::transmute(pbstrxdspkt), ppktseqid as _, pcallseqid as _, ptimestart as _, ptimeend as _).ok() }
    }
    pub unsafe fn GetCurrLicenseExpDate(&self, prottype: *const ProtType) -> windows_core::Result<i32> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetCurrLicenseExpDate)(windows_core::Interface::as_raw(self), prottype, &mut result__).map(|| result__)
        }
    }
    pub unsafe fn GetLastErrorCode(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).GetLastErrorCode)(windows_core::Interface::as_raw(self)).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IXDSCodec_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub XDSToRatObjOK: unsafe extern "system" fn(*mut core::ffi::c_void, *mut windows_core::HRESULT) -> windows_core::HRESULT,
    pub SetCCSubstreamService: unsafe extern "system" fn(*mut core::ffi::c_void, i32) -> windows_core::HRESULT,
    pub CCSubstreamService: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32) -> windows_core::HRESULT,
    pub GetContentAdvisoryRating: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32, *mut i32, *mut i32, *mut i64, *mut i64) -> windows_core::HRESULT,
    pub GetXDSPacket: unsafe extern "system" fn(*mut core::ffi::c_void, *mut i32, *mut i32, *mut *mut core::ffi::c_void, *mut i32, *mut i32, *mut i64, *mut i64) -> windows_core::HRESULT,
    pub GetCurrLicenseExpDate: unsafe extern "system" fn(*mut core::ffi::c_void, *const ProtType, *mut i32) -> windows_core::HRESULT,
    pub GetLastErrorCode: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
}
pub trait IXDSCodec_Impl: windows_core::IUnknownImpl {
    fn XDSToRatObjOK(&self) -> windows_core::Result<windows_core::HRESULT>;
    fn SetCCSubstreamService(&self, substreammask: i32) -> windows_core::Result<()>;
    fn CCSubstreamService(&self) -> windows_core::Result<i32>;
    fn GetContentAdvisoryRating(&self, prat: *mut i32, ppktseqid: *mut i32, pcallseqid: *mut i32, ptimestart: *mut i64, ptimeend: *mut i64) -> windows_core::Result<()>;
    fn GetXDSPacket(&self, pxdsclasspkt: *mut i32, pxdstypepkt: *mut i32, pbstrxdspkt: *mut windows_core::BSTR, ppktseqid: *mut i32, pcallseqid: *mut i32, ptimestart: *mut i64, ptimeend: *mut i64) -> windows_core::Result<()>;
    fn GetCurrLicenseExpDate(&self, prottype: *const ProtType) -> windows_core::Result<i32>;
    fn GetLastErrorCode(&self) -> windows_core::Result<()>;
}
impl IXDSCodec_Vtbl {
    pub const fn new<Identity: IXDSCodec_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn XDSToRatObjOK<Identity: IXDSCodec_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, phrcocreateretval: *mut windows_core::HRESULT) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IXDSCodec_Impl::XDSToRatObjOK(this) {
                    Ok(ok__) => {
                        phrcocreateretval.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetCCSubstreamService<Identity: IXDSCodec_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, substreammask: i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IXDSCodec_Impl::SetCCSubstreamService(this, core::mem::transmute_copy(&substreammask)).into()
            }
        }
        unsafe extern "system" fn CCSubstreamService<Identity: IXDSCodec_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, psubstreammask: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IXDSCodec_Impl::CCSubstreamService(this) {
                    Ok(ok__) => {
                        psubstreammask.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetContentAdvisoryRating<Identity: IXDSCodec_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prat: *mut i32, ppktseqid: *mut i32, pcallseqid: *mut i32, ptimestart: *mut i64, ptimeend: *mut i64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IXDSCodec_Impl::GetContentAdvisoryRating(this, core::mem::transmute_copy(&prat), core::mem::transmute_copy(&ppktseqid), core::mem::transmute_copy(&pcallseqid), core::mem::transmute_copy(&ptimestart), core::mem::transmute_copy(&ptimeend)).into()
            }
        }
        unsafe extern "system" fn GetXDSPacket<Identity: IXDSCodec_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, pxdsclasspkt: *mut i32, pxdstypepkt: *mut i32, pbstrxdspkt: *mut *mut core::ffi::c_void, ppktseqid: *mut i32, pcallseqid: *mut i32, ptimestart: *mut i64, ptimeend: *mut i64) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IXDSCodec_Impl::GetXDSPacket(this, core::mem::transmute_copy(&pxdsclasspkt), core::mem::transmute_copy(&pxdstypepkt), core::mem::transmute_copy(&pbstrxdspkt), core::mem::transmute_copy(&ppktseqid), core::mem::transmute_copy(&pcallseqid), core::mem::transmute_copy(&ptimestart), core::mem::transmute_copy(&ptimeend)).into()
            }
        }
        unsafe extern "system" fn GetCurrLicenseExpDate<Identity: IXDSCodec_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, prottype: *const ProtType, lpdatetime: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IXDSCodec_Impl::GetCurrLicenseExpDate(this, core::mem::transmute_copy(&prottype)) {
                    Ok(ok__) => {
                        lpdatetime.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn GetLastErrorCode<Identity: IXDSCodec_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IXDSCodec_Impl::GetLastErrorCode(this).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            XDSToRatObjOK: XDSToRatObjOK::<Identity, OFFSET>,
            SetCCSubstreamService: SetCCSubstreamService::<Identity, OFFSET>,
            CCSubstreamService: CCSubstreamService::<Identity, OFFSET>,
            GetContentAdvisoryRating: GetContentAdvisoryRating::<Identity, OFFSET>,
            GetXDSPacket: GetXDSPacket::<Identity, OFFSET>,
            GetCurrLicenseExpDate: GetCurrLicenseExpDate::<Identity, OFFSET>,
            GetLastErrorCode: GetLastErrorCode::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IXDSCodec as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IXDSCodec {}
windows_core::imp::define_interface!(IXDSCodecConfig, IXDSCodecConfig_Vtbl, 0xc4c4c4d3_0049_4e2b_98fb_9537f6ce516d);
windows_core::imp::interface_hierarchy!(IXDSCodecConfig, windows_core::IUnknown);
impl IXDSCodecConfig {
    pub unsafe fn GetSecureChannelObject(&self) -> windows_core::Result<windows_core::IUnknown> {
        unsafe {
            let mut result__ = core::mem::zeroed();
            (windows_core::Interface::vtable(self).GetSecureChannelObject)(windows_core::Interface::as_raw(self), &mut result__).and_then(|| windows_core::Type::from_abi(result__))
        }
    }
    pub unsafe fn SetPauseBufferTime(&self, dwpausebuffertime: u32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).SetPauseBufferTime)(windows_core::Interface::as_raw(self), dwpausebuffertime).ok() }
    }
}
#[repr(C)]
#[doc(hidden)]
pub struct IXDSCodecConfig_Vtbl {
    pub base__: windows_core::IUnknown_Vtbl,
    pub GetSecureChannelObject: unsafe extern "system" fn(*mut core::ffi::c_void, *mut *mut core::ffi::c_void) -> windows_core::HRESULT,
    pub SetPauseBufferTime: unsafe extern "system" fn(*mut core::ffi::c_void, u32) -> windows_core::HRESULT,
}
pub trait IXDSCodecConfig_Impl: windows_core::IUnknownImpl {
    fn GetSecureChannelObject(&self) -> windows_core::Result<windows_core::IUnknown>;
    fn SetPauseBufferTime(&self, dwpausebuffertime: u32) -> windows_core::Result<()>;
}
impl IXDSCodecConfig_Vtbl {
    pub const fn new<Identity: IXDSCodecConfig_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn GetSecureChannelObject<Identity: IXDSCodecConfig_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, ppunkdrmsecurechannel: *mut *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                match IXDSCodecConfig_Impl::GetSecureChannelObject(this) {
                    Ok(ok__) => {
                        ppunkdrmsecurechannel.write(core::mem::transmute(ok__));
                        windows_core::HRESULT(0)
                    }
                    Err(err) => err.into(),
                }
            }
        }
        unsafe extern "system" fn SetPauseBufferTime<Identity: IXDSCodecConfig_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, dwpausebuffertime: u32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IXDSCodecConfig_Impl::SetPauseBufferTime(this, core::mem::transmute_copy(&dwpausebuffertime)).into()
            }
        }
        Self {
            base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
            GetSecureChannelObject: GetSecureChannelObject::<Identity, OFFSET>,
            SetPauseBufferTime: SetPauseBufferTime::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IXDSCodecConfig as windows_core::Interface>::IID
    }
}
impl windows_core::RuntimeName for IXDSCodecConfig {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IXDSCodecEvents, IXDSCodecEvents_Vtbl, 0xc4c4c4c3_0049_4e2b_98fb_9537f6ce516d);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IXDSCodecEvents {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IXDSCodecEvents, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IXDSCodecEvents_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IXDSCodecEvents_Impl: super::super::super::System::Com::IDispatch_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IXDSCodecEvents_Vtbl {
    pub const fn new<Identity: IXDSCodecEvents_Impl, const OFFSET: isize>() -> Self {
        Self { base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IXDSCodecEvents as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IXDSCodecEvents {}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(IXDSToRat, IXDSToRat_Vtbl, 0xc5c5c5b0_3abc_11d6_b25b_00c04fa0c026);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for IXDSToRat {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(IXDSToRat, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
impl IXDSToRat {
    pub unsafe fn Init(&self) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).Init)(windows_core::Interface::as_raw(self)).ok() }
    }
    pub unsafe fn ParseXDSBytePair(&self, byte1: u8, byte2: u8, pensystem: *mut EnTvRat_System, penlevel: *mut EnTvRat_GenericLevel, plbfenattributes: *mut i32) -> windows_core::Result<()> {
        unsafe { (windows_core::Interface::vtable(self).ParseXDSBytePair)(windows_core::Interface::as_raw(self), byte1, byte2, pensystem as _, penlevel as _, plbfenattributes as _).ok() }
    }
}
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct IXDSToRat_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
    pub Init: unsafe extern "system" fn(*mut core::ffi::c_void) -> windows_core::HRESULT,
    pub ParseXDSBytePair: unsafe extern "system" fn(*mut core::ffi::c_void, u8, u8, *mut EnTvRat_System, *mut EnTvRat_GenericLevel, *mut i32) -> windows_core::HRESULT,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait IXDSToRat_Impl: super::super::super::System::Com::IDispatch_Impl {
    fn Init(&self) -> windows_core::Result<()>;
    fn ParseXDSBytePair(&self, byte1: u8, byte2: u8, pensystem: *mut EnTvRat_System, penlevel: *mut EnTvRat_GenericLevel, plbfenattributes: *mut i32) -> windows_core::Result<()>;
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl IXDSToRat_Vtbl {
    pub const fn new<Identity: IXDSToRat_Impl, const OFFSET: isize>() -> Self {
        unsafe extern "system" fn Init<Identity: IXDSToRat_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IXDSToRat_Impl::Init(this).into()
            }
        }
        unsafe extern "system" fn ParseXDSBytePair<Identity: IXDSToRat_Impl, const OFFSET: isize>(this: *mut core::ffi::c_void, byte1: u8, byte2: u8, pensystem: *mut EnTvRat_System, penlevel: *mut EnTvRat_GenericLevel, plbfenattributes: *mut i32) -> windows_core::HRESULT {
            unsafe {
                let this: &Identity = &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                IXDSToRat_Impl::ParseXDSBytePair(this, core::mem::transmute_copy(&byte1), core::mem::transmute_copy(&byte2), core::mem::transmute_copy(&pensystem), core::mem::transmute_copy(&penlevel), core::mem::transmute_copy(&plbfenattributes)).into()
            }
        }
        Self {
            base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>(),
            Init: Init::<Identity, OFFSET>,
            ParseXDSBytePair: ParseXDSBytePair::<Identity, OFFSET>,
        }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<IXDSToRat as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for IXDSToRat {}
pub const KSCATEGORY_BDA_IP_SINK: windows_core::GUID = windows_core::GUID::from_u128(0x71985f4a_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSCATEGORY_BDA_NETWORK_EPG: windows_core::GUID = windows_core::GUID::from_u128(0x71985f49_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSCATEGORY_BDA_NETWORK_PROVIDER: windows_core::GUID = windows_core::GUID::from_u128(0x71985f4b_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSCATEGORY_BDA_NETWORK_TUNER: windows_core::GUID = windows_core::GUID::from_u128(0x71985f48_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSCATEGORY_BDA_RECEIVER_COMPONENT: windows_core::GUID = windows_core::GUID::from_u128(0xfd0a5af4_b41d_11d2_9c95_00c04f7971e0);
pub const KSCATEGORY_BDA_TRANSPORT_INFORMATION: windows_core::GUID = windows_core::GUID::from_u128(0xa2e3074f_6c3d_11d3_b653_00c04f79498e);
pub const KSDATAFORMAT_SPECIFIER_BDA_IP: windows_core::GUID = windows_core::GUID::from_u128(0x6b891420_db09_11d2_8f32_00c04f7971e2);
pub const KSDATAFORMAT_SPECIFIER_BDA_TRANSPORT: windows_core::GUID = windows_core::GUID::from_u128(0x8deda6fd_ac5f_4334_8ecf_a4ba8fa7d0f0);
pub const KSDATAFORMAT_SUBTYPE_ATSC_SI: windows_core::GUID = windows_core::GUID::from_u128(0xb3c7397c_d303_414d_b33c_4ed2c9d29733);
pub const KSDATAFORMAT_SUBTYPE_BDA_IP: windows_core::GUID = windows_core::GUID::from_u128(0x5a9a213c_db08_11d2_8f32_00c04f7971e2);
pub const KSDATAFORMAT_SUBTYPE_BDA_IP_CONTROL: windows_core::GUID = windows_core::GUID::from_u128(0x499856e8_e85b_48ed_9bea_410d0dd4ef81);
pub const KSDATAFORMAT_SUBTYPE_BDA_MPEG2_TRANSPORT: windows_core::GUID = windows_core::GUID::from_u128(0xf4aeb342_0329_4fdd_a8fd_4aff4926c978);
pub const KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_OOB_PSIP: windows_core::GUID = windows_core::GUID::from_u128(0x951727db_d2ce_4528_96f6_3301fabb2de0);
pub const KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_PSIP: windows_core::GUID = windows_core::GUID::from_u128(0x762e3f66_336f_48d1_bf83_2b00352c11f0);
pub const KSDATAFORMAT_SUBTYPE_DVB_SI: windows_core::GUID = windows_core::GUID::from_u128(0xe9dd31a3_221d_4adb_8532_9af309c1a408);
pub const KSDATAFORMAT_SUBTYPE_ISDB_SI: windows_core::GUID = windows_core::GUID::from_u128(0x4a2eeb99_6458_4538_b187_04017c41413f);
pub const KSDATAFORMAT_SUBTYPE_PBDA_TRANSPORT_RAW: windows_core::GUID = windows_core::GUID::from_u128(0x0d7aed42_cb9a_11db_9705_005056c00008);
pub const KSDATAFORMAT_TYPE_BDA_ANTENNA: windows_core::GUID = windows_core::GUID::from_u128(0x71985f41_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSDATAFORMAT_TYPE_BDA_IF_SIGNAL: windows_core::GUID = windows_core::GUID::from_u128(0x61be0b47_a5eb_499b_9a85_5b16c07f1258);
pub const KSDATAFORMAT_TYPE_BDA_IP: windows_core::GUID = windows_core::GUID::from_u128(0xe25f7b8e_cccc_11d2_8f25_00c04f7971e2);
pub const KSDATAFORMAT_TYPE_BDA_IP_CONTROL: windows_core::GUID = windows_core::GUID::from_u128(0xdadd5799_7d5b_4b63_80fb_d1442f26b621);
pub const KSDATAFORMAT_TYPE_MPE: windows_core::GUID = windows_core::GUID::from_u128(0x455f176c_4b06_47ce_9aef_8caef73df7b5);
pub const KSDATAFORMAT_TYPE_MPEG2_SECTIONS: windows_core::GUID = windows_core::GUID::from_u128(0x455f176c_4b06_47ce_9aef_8caef73df7b5);
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSEVENTDATA_BDA_RF_TUNER_SCAN_S {
    pub EventData: super::super::KernelStreaming::KSEVENTDATA,
    pub StartFrequency: u32,
    pub EndFrequency: u32,
    pub LockRequested: BDA_LockType,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSEVENTDATA_BDA_RF_TUNER_SCAN_S {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const KSEVENTSETID_BdaCAEvent: windows_core::GUID = windows_core::GUID::from_u128(0x488c4ccc_b768_4129_8eb1_b00a071f9068);
pub const KSEVENTSETID_BdaDiseqCEvent: windows_core::GUID = windows_core::GUID::from_u128(0x8b19bbf0_4184_43ac_ad3c_0c889be4c212);
pub const KSEVENTSETID_BdaEvent: windows_core::GUID = windows_core::GUID::from_u128(0xae7e55b2_96d7_4e29_908f_62f95b2a1679);
pub const KSEVENTSETID_BdaPinEvent: windows_core::GUID = windows_core::GUID::from_u128(0x104781cd_50bd_40d5_95fb_087e0e86a591);
pub const KSEVENTSETID_BdaTunerEvent: windows_core::GUID = windows_core::GUID::from_u128(0xaab59e17_01c9_4ebf_93f2_fc3b79b46f91);
pub const KSEVENT_BDA_CA_MODULE_STATUS_CHANGED: KSPROPERTY_BDA_CA_EVENT = KSPROPERTY_BDA_CA_EVENT(1i32);
pub const KSEVENT_BDA_CA_MODULE_UI_REQUESTED: KSPROPERTY_BDA_CA_EVENT = KSPROPERTY_BDA_CA_EVENT(3i32);
pub const KSEVENT_BDA_CA_SMART_CARD_STATUS_CHANGED: KSPROPERTY_BDA_CA_EVENT = KSPROPERTY_BDA_CA_EVENT(2i32);
pub const KSEVENT_BDA_DISEQC_DATA_RECEIVED: KSPROPERTY_BDA_DISEQC_EVENT = KSPROPERTY_BDA_DISEQC_EVENT(0i32);
pub const KSEVENT_BDA_EVENT_PENDINGEVENT: KSEVENT_BDA_EVENT_TYPE = KSEVENT_BDA_EVENT_TYPE(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSEVENT_BDA_EVENT_TYPE(pub i32);
pub const KSEVENT_BDA_PIN_CONNECTED: KSPROPERTY_BDA_PIN_EVENT = KSPROPERTY_BDA_PIN_EVENT(0i32);
pub const KSEVENT_BDA_PIN_DISCONNECTED: KSPROPERTY_BDA_PIN_EVENT = KSPROPERTY_BDA_PIN_EVENT(1i32);
pub const KSEVENT_BDA_PROGRAM_FLOW_STATUS_CHANGED: KSPROPERTY_BDA_CA_EVENT = KSPROPERTY_BDA_CA_EVENT(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSEVENT_BDA_TUNER(pub i32);
pub const KSEVENT_BDA_TUNER_SCAN: KSEVENT_BDA_TUNER = KSEVENT_BDA_TUNER(0i32);
pub const KSMETHODSETID_BdaChangeSync: windows_core::GUID = windows_core::GUID::from_u128(0xfd0a5af3_b41d_11d2_9c95_00c04f7971e0);
pub const KSMETHODSETID_BdaConditionalAccessService: windows_core::GUID = windows_core::GUID::from_u128(0x10ced3b4_320b_41bf_9824_1b2e68e71eb9);
pub const KSMETHODSETID_BdaDebug: windows_core::GUID = windows_core::GUID::from_u128(0x0d4a90ec_c69d_4ee2_8c5a_fb1f63a50da1);
pub const KSMETHODSETID_BdaDeviceConfiguration: windows_core::GUID = windows_core::GUID::from_u128(0x71985f45_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSMETHODSETID_BdaDrmService: windows_core::GUID = windows_core::GUID::from_u128(0xbff6b5bb_b0ae_484c_9dca_73528fb0b46e);
pub const KSMETHODSETID_BdaEventing: windows_core::GUID = windows_core::GUID::from_u128(0xf99492da_6193_4eb0_8690_6686cbff713e);
pub const KSMETHODSETID_BdaGuideDataDeliveryService: windows_core::GUID = windows_core::GUID::from_u128(0x8d9d5562_1589_417d_99ce_ac531dda19f9);
pub const KSMETHODSETID_BdaIsdbConditionalAccess: windows_core::GUID = windows_core::GUID::from_u128(0x5e68c627_16c2_4e6c_b1e2_d00170cdaa0f);
pub const KSMETHODSETID_BdaMux: windows_core::GUID = windows_core::GUID::from_u128(0x942aafec_4c05_4c74_b8eb_8706c2a4943f);
pub const KSMETHODSETID_BdaNameValue: windows_core::GUID = windows_core::GUID::from_u128(0x36e07304_9f0d_4e88_9118_ac0ba317b7f2);
pub const KSMETHODSETID_BdaNameValueA: windows_core::GUID = windows_core::GUID::from_u128(0x0c24096d_5ff5_47de_a856_062e587e3727);
pub const KSMETHODSETID_BdaScanning: windows_core::GUID = windows_core::GUID::from_u128(0x12eb49df_6249_47f3_b190_e21e6e2f8a9c);
pub const KSMETHODSETID_BdaTSSelector: windows_core::GUID = windows_core::GUID::from_u128(0x1dcfafe9_b45e_41b3_bb2a_561eb129ae98);
pub const KSMETHODSETID_BdaTuner: windows_core::GUID = windows_core::GUID::from_u128(0xb774102f_ac07_478a_8228_2742d961fa7e);
pub const KSMETHODSETID_BdaUserActivity: windows_core::GUID = windows_core::GUID::from_u128(0xeda5c834_4531_483c_be0a_94e6c96ff396);
pub const KSMETHODSETID_BdaWmdrmSession: windows_core::GUID = windows_core::GUID::from_u128(0x4be6fa3d_07cd_4139_8b80_8c18ba3aec88);
pub const KSMETHODSETID_BdaWmdrmTuner: windows_core::GUID = windows_core::GUID::from_u128(0x86d979cf_a8a7_4f94_b5fb_14c0aca68fe6);
pub const KSMETHOD_BDA_CAS_CHECKENTITLEMENTTOKEN: KSMETHOD_BDA_CAS_SERVICE = KSMETHOD_BDA_CAS_SERVICE(0i32);
pub const KSMETHOD_BDA_CAS_CLOSEMMIDIALOG: KSMETHOD_BDA_CAS_SERVICE = KSMETHOD_BDA_CAS_SERVICE(3i32);
pub const KSMETHOD_BDA_CAS_OPENBROADCASTMMI: KSMETHOD_BDA_CAS_SERVICE = KSMETHOD_BDA_CAS_SERVICE(2i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_CAS_SERVICE(pub i32);
pub const KSMETHOD_BDA_CAS_SETCAPTURETOKEN: KSMETHOD_BDA_CAS_SERVICE = KSMETHOD_BDA_CAS_SERVICE(1i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_CHANGE_SYNC(pub i32);
pub const KSMETHOD_BDA_CHECK_CHANGES: KSMETHOD_BDA_CHANGE_SYNC = KSMETHOD_BDA_CHANGE_SYNC(1i32);
pub const KSMETHOD_BDA_COMMIT_CHANGES: KSMETHOD_BDA_CHANGE_SYNC = KSMETHOD_BDA_CHANGE_SYNC(2i32);
pub const KSMETHOD_BDA_CREATE_PIN_FACTORY: KSMETHOD_BDA_DEVICE_CONFIGURATION = KSMETHOD_BDA_DEVICE_CONFIGURATION(0i32);
pub const KSMETHOD_BDA_CREATE_TOPOLOGY: KSMETHOD_BDA_DEVICE_CONFIGURATION = KSMETHOD_BDA_DEVICE_CONFIGURATION(2i32);
pub const KSMETHOD_BDA_DEBUG_DATA: KSMETHOD_BDA_DEBUG_SERVICE = KSMETHOD_BDA_DEBUG_SERVICE(1i32);
pub const KSMETHOD_BDA_DEBUG_LEVEL: KSMETHOD_BDA_DEBUG_SERVICE = KSMETHOD_BDA_DEBUG_SERVICE(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_DEBUG_SERVICE(pub i32);
pub const KSMETHOD_BDA_DELETE_PIN_FACTORY: KSMETHOD_BDA_DEVICE_CONFIGURATION = KSMETHOD_BDA_DEVICE_CONFIGURATION(1i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_DEVICE_CONFIGURATION(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_DRM(pub i32);
pub const KSMETHOD_BDA_DRM_CURRENT: KSMETHOD_BDA_DRM = KSMETHOD_BDA_DRM(0i32);
pub const KSMETHOD_BDA_DRM_DRMSTATUS: KSMETHOD_BDA_DRM = KSMETHOD_BDA_DRM(1i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_EVENTING_SERVICE(pub i32);
pub const KSMETHOD_BDA_EVENT_COMPLETE: KSMETHOD_BDA_EVENTING_SERVICE = KSMETHOD_BDA_EVENTING_SERVICE(1i32);
pub const KSMETHOD_BDA_EVENT_DATA: KSMETHOD_BDA_EVENTING_SERVICE = KSMETHOD_BDA_EVENTING_SERVICE(0i32);
pub const KSMETHOD_BDA_GDDS_DATA: KSMETHOD_BDA_GDDS_SERVICE = KSMETHOD_BDA_GDDS_SERVICE(1i32);
pub const KSMETHOD_BDA_GDDS_DATATYPE: KSMETHOD_BDA_GDDS_SERVICE = KSMETHOD_BDA_GDDS_SERVICE(0i32);
pub const KSMETHOD_BDA_GDDS_DATAUPDATE: KSMETHOD_BDA_GDDS_SERVICE = KSMETHOD_BDA_GDDS_SERVICE(5i32);
pub const KSMETHOD_BDA_GDDS_GETSERVICES: KSMETHOD_BDA_GDDS_SERVICE = KSMETHOD_BDA_GDDS_SERVICE(3i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_GDDS_SERVICE(pub i32);
pub const KSMETHOD_BDA_GDDS_SERVICEFROMTUNEXML: KSMETHOD_BDA_GDDS_SERVICE = KSMETHOD_BDA_GDDS_SERVICE(4i32);
pub const KSMETHOD_BDA_GDDS_TUNEXMLFROMIDX: KSMETHOD_BDA_GDDS_SERVICE = KSMETHOD_BDA_GDDS_SERVICE(2i32);
pub const KSMETHOD_BDA_GET_CHANGE_STATE: KSMETHOD_BDA_CHANGE_SYNC = KSMETHOD_BDA_CHANGE_SYNC(3i32);
pub const KSMETHOD_BDA_GPNV_GETVALUE: KSMETHOD_BDA_GPNV_SERVICE = KSMETHOD_BDA_GPNV_SERVICE(0i32);
pub const KSMETHOD_BDA_GPNV_GETVALUEUPDATENAME: KSMETHOD_BDA_GPNV_SERVICE = KSMETHOD_BDA_GPNV_SERVICE(3i32);
pub const KSMETHOD_BDA_GPNV_NAMEFROMINDEX: KSMETHOD_BDA_GPNV_SERVICE = KSMETHOD_BDA_GPNV_SERVICE(2i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_GPNV_SERVICE(pub i32);
pub const KSMETHOD_BDA_GPNV_SETVALUE: KSMETHOD_BDA_GPNV_SERVICE = KSMETHOD_BDA_GPNV_SERVICE(1i32);
pub const KSMETHOD_BDA_ISDBCAS_RESPONSEDATA: KSMETHOD_BDA_ISDB_CAS = KSMETHOD_BDA_ISDB_CAS(1i32);
pub const KSMETHOD_BDA_ISDBCAS_SETREQUEST: KSMETHOD_BDA_ISDB_CAS = KSMETHOD_BDA_ISDB_CAS(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_ISDB_CAS(pub i32);
pub const KSMETHOD_BDA_MUX_GETPIDLIST: KSMETHOD_BDA_MUX_SERVICE = KSMETHOD_BDA_MUX_SERVICE(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_MUX_SERVICE(pub i32);
pub const KSMETHOD_BDA_MUX_SETPIDLIST: KSMETHOD_BDA_MUX_SERVICE = KSMETHOD_BDA_MUX_SERVICE(1i32);
pub const KSMETHOD_BDA_SCANNING_STATE: KSMETHOD_BDA_SCAN_SERVICE = KSMETHOD_BDA_SCAN_SERVICE(1i32);
pub const KSMETHOD_BDA_SCAN_CAPABILTIES: KSMETHOD_BDA_SCAN_SERVICE = KSMETHOD_BDA_SCAN_SERVICE(0i32);
pub const KSMETHOD_BDA_SCAN_FILTER: KSMETHOD_BDA_SCAN_SERVICE = KSMETHOD_BDA_SCAN_SERVICE(2i32);
pub const KSMETHOD_BDA_SCAN_RESUME: KSMETHOD_BDA_SCAN_SERVICE = KSMETHOD_BDA_SCAN_SERVICE(4i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_SCAN_SERVICE(pub i32);
pub const KSMETHOD_BDA_SCAN_START: KSMETHOD_BDA_SCAN_SERVICE = KSMETHOD_BDA_SCAN_SERVICE(3i32);
pub const KSMETHOD_BDA_SCAN_STOP: KSMETHOD_BDA_SCAN_SERVICE = KSMETHOD_BDA_SCAN_SERVICE(5i32);
pub const KSMETHOD_BDA_START_CHANGES: KSMETHOD_BDA_CHANGE_SYNC = KSMETHOD_BDA_CHANGE_SYNC(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_TS_SELECTOR(pub i32);
pub const KSMETHOD_BDA_TS_SELECTOR_GETTSINFORMATION: KSMETHOD_BDA_TS_SELECTOR = KSMETHOD_BDA_TS_SELECTOR(1i32);
pub const KSMETHOD_BDA_TS_SELECTOR_SETTSID: KSMETHOD_BDA_TS_SELECTOR = KSMETHOD_BDA_TS_SELECTOR(0i32);
pub const KSMETHOD_BDA_TUNER_GETTUNERSTATE: KSMETHOD_BDA_TUNER_SERVICE = KSMETHOD_BDA_TUNER_SERVICE(1i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_TUNER_SERVICE(pub i32);
pub const KSMETHOD_BDA_TUNER_SETTUNER: KSMETHOD_BDA_TUNER_SERVICE = KSMETHOD_BDA_TUNER_SERVICE(0i32);
pub const KSMETHOD_BDA_TUNER_SIGNALNOISERATIO: KSMETHOD_BDA_TUNER_SERVICE = KSMETHOD_BDA_TUNER_SERVICE(2i32);
pub const KSMETHOD_BDA_USERACTIVITY_DETECTED: KSMETHOD_BDA_USERACTIVITY_SERVICE = KSMETHOD_BDA_USERACTIVITY_SERVICE(2i32);
pub const KSMETHOD_BDA_USERACTIVITY_INTERVAL: KSMETHOD_BDA_USERACTIVITY_SERVICE = KSMETHOD_BDA_USERACTIVITY_SERVICE(1i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_USERACTIVITY_SERVICE(pub i32);
pub const KSMETHOD_BDA_USERACTIVITY_USEREASON: KSMETHOD_BDA_USERACTIVITY_SERVICE = KSMETHOD_BDA_USERACTIVITY_SERVICE(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_WMDRM(pub i32);
pub const KSMETHOD_BDA_WMDRMTUNER_CANCELCAPTURETOKEN: KSMETHOD_BDA_WMDRM_TUNER = KSMETHOD_BDA_WMDRM_TUNER(0i32);
pub const KSMETHOD_BDA_WMDRMTUNER_GETPIDPROTECTION: KSMETHOD_BDA_WMDRM_TUNER = KSMETHOD_BDA_WMDRM_TUNER(2i32);
pub const KSMETHOD_BDA_WMDRMTUNER_PURCHASE_ENTITLEMENT: KSMETHOD_BDA_WMDRM_TUNER = KSMETHOD_BDA_WMDRM_TUNER(5i32);
pub const KSMETHOD_BDA_WMDRMTUNER_SETPIDPROTECTION: KSMETHOD_BDA_WMDRM_TUNER = KSMETHOD_BDA_WMDRM_TUNER(1i32);
pub const KSMETHOD_BDA_WMDRMTUNER_SETSYNCVALUE: KSMETHOD_BDA_WMDRM_TUNER = KSMETHOD_BDA_WMDRM_TUNER(3i32);
pub const KSMETHOD_BDA_WMDRMTUNER_STARTCODEPROFILE: KSMETHOD_BDA_WMDRM_TUNER = KSMETHOD_BDA_WMDRM_TUNER(4i32);
pub const KSMETHOD_BDA_WMDRM_CRL: KSMETHOD_BDA_WMDRM = KSMETHOD_BDA_WMDRM(2i32);
pub const KSMETHOD_BDA_WMDRM_KEYINFO: KSMETHOD_BDA_WMDRM = KSMETHOD_BDA_WMDRM(7i32);
pub const KSMETHOD_BDA_WMDRM_LICENSE: KSMETHOD_BDA_WMDRM = KSMETHOD_BDA_WMDRM(6i32);
pub const KSMETHOD_BDA_WMDRM_MESSAGE: KSMETHOD_BDA_WMDRM = KSMETHOD_BDA_WMDRM(3i32);
pub const KSMETHOD_BDA_WMDRM_REISSUELICENSE: KSMETHOD_BDA_WMDRM = KSMETHOD_BDA_WMDRM(4i32);
pub const KSMETHOD_BDA_WMDRM_RENEWLICENSE: KSMETHOD_BDA_WMDRM = KSMETHOD_BDA_WMDRM(5i32);
pub const KSMETHOD_BDA_WMDRM_REVINFO: KSMETHOD_BDA_WMDRM = KSMETHOD_BDA_WMDRM(1i32);
pub const KSMETHOD_BDA_WMDRM_STATUS: KSMETHOD_BDA_WMDRM = KSMETHOD_BDA_WMDRM(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSMETHOD_BDA_WMDRM_TUNER(pub i32);
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_BUFFER {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub ulBufferSize: u32,
    pub argbBuffer: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_BUFFER {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_CAS_CAPTURETOKEN {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub ulTokenLength: u32,
    pub argbToken: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_CAS_CAPTURETOKEN {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_CAS_CLOSEMMIDIALOG {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub ulDialogRequest: u32,
    pub cLanguage: [i8; 12],
    pub ulDialogNumber: u32,
    pub ulReason: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_CAS_CLOSEMMIDIALOG {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_CAS_ENTITLEMENTTOKEN {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub ulDialogRequest: u32,
    pub cLanguage: [i8; 12],
    pub ulRequestType: u32,
    pub ulEntitlementTokenLen: u32,
    pub argbEntitlementToken: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_CAS_ENTITLEMENTTOKEN {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_CAS_OPENBROADCASTMMI {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub ulDialogRequest: u32,
    pub cLanguage: [i8; 12],
    pub ulEventId: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_CAS_OPENBROADCASTMMI {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_DEBUG_LEVEL {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub ucDebugLevel: u8,
    pub ulDebugStringSize: u32,
    pub argbDebugString: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_DEBUG_LEVEL {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_DRM_SETDRM {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub NewDRMuuid: windows_core::GUID,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_DRM_SETDRM {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_EVENT_COMPLETE {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub ulEventID: u32,
    pub ulEventResult: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_EVENT_COMPLETE {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_GDDS_SERVICEFROMTUNEXML {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub ulTuneXmlLength: u32,
    pub argbTuneXml: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_GDDS_SERVICEFROMTUNEXML {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_GDDS_TUNEXMLFROMIDX {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub ulIdx: u64,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_GDDS_TUNEXMLFROMIDX {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_GPNV_GETVALUE {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub ulNameLength: u32,
    pub cLanguage: [i8; 12],
    pub argbData: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_GPNV_GETVALUE {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_GPNV_NAMEINDEX {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub ulValueNameIndex: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_GPNV_NAMEINDEX {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_GPNV_SETVALUE {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub ulDialogRequest: u32,
    pub cLanguage: [i8; 12],
    pub ulNameLength: u32,
    pub ulValueLength: u32,
    pub argbName: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_GPNV_SETVALUE {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_ISDBCAS_REQUEST {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub ulRequestID: u32,
    pub ulIsdbCommandSize: u32,
    pub argbIsdbCommandData: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_ISDBCAS_REQUEST {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_PIN {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub Anonymous: KSM_BDA_PIN_0,
    pub Reserved: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_PIN {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub union KSM_BDA_PIN_0 {
    pub PinId: u32,
    pub PinType: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_PIN_0 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_PIN_PAIR {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub Anonymous1: KSM_BDA_PIN_PAIR_0,
    pub Anonymous2: KSM_BDA_PIN_PAIR_1,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_PIN_PAIR {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub union KSM_BDA_PIN_PAIR_0 {
    pub InputPinId: u32,
    pub InputPinType: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_PIN_PAIR_0 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub union KSM_BDA_PIN_PAIR_1 {
    pub OutputPinId: u32,
    pub OutputPinType: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_PIN_PAIR_1 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_SCAN_CAPABILTIES {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub uuidBroadcastStandard: windows_core::GUID,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_SCAN_CAPABILTIES {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_SCAN_FILTER {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub ulScanModulationTypeSize: u32,
    pub AnalogVideoStandards: u64,
    pub argbScanModulationTypes: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_SCAN_FILTER {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_SCAN_START {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub LowerFrequency: u32,
    pub HigherFrequency: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_SCAN_START {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_TS_SELECTOR_SETTSID {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub usTSID: u16,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_TS_SELECTOR_SETTSID {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_TUNER_TUNEREQUEST {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub ulTuneLength: u32,
    pub argbTuneData: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_TUNER_TUNEREQUEST {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_USERACTIVITY_USEREASON {
    pub Method: super::super::KernelStreaming::KSIDENTIFIER,
    pub ulUseReason: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_USERACTIVITY_USEREASON {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_WMDRMTUNER_GETPIDPROTECTION {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub ulPID: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_WMDRMTUNER_GETPIDPROTECTION {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_WMDRMTUNER_PURCHASEENTITLEMENT {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub ulDialogRequest: u32,
    pub cLanguage: [i8; 12],
    pub ulPurchaseTokenLength: u32,
    pub argbDataBuffer: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_WMDRMTUNER_PURCHASEENTITLEMENT {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_WMDRMTUNER_SETPIDPROTECTION {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub ulPID: u32,
    pub uuidKeyID: windows_core::GUID,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_WMDRMTUNER_SETPIDPROTECTION {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_WMDRMTUNER_SYNCVALUE {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub ulSyncValue: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_WMDRMTUNER_SYNCVALUE {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_WMDRM_LICENSE {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub uuidKeyID: windows_core::GUID,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_WMDRM_LICENSE {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSM_BDA_WMDRM_RENEWLICENSE {
    pub NodeMethod: super::super::KernelStreaming::KSM_NODE,
    pub ulXMRLicenseLength: u32,
    pub ulEntitlementTokenLength: u32,
    pub argbDataBuffer: [u8; 1],
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSM_BDA_WMDRM_RENEWLICENSE {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const KSNODE_BDA_8PSK_DEMODULATOR: windows_core::GUID = windows_core::GUID::from_u128(0xe957a0e7_dd98_4a3c_810b_3525157ab62e);
pub const KSNODE_BDA_8VSB_DEMODULATOR: windows_core::GUID = windows_core::GUID::from_u128(0x71985f4f_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSNODE_BDA_ANALOG_DEMODULATOR: windows_core::GUID = windows_core::GUID::from_u128(0x634db199_27dd_46b8_acfb_ecc98e61a2ad);
pub const KSNODE_BDA_COFDM_DEMODULATOR: windows_core::GUID = windows_core::GUID::from_u128(0x2dac6e05_edbe_4b9c_b387_1b6fad7d6495);
pub const KSNODE_BDA_COMMON_CA_POD: windows_core::GUID = windows_core::GUID::from_u128(0xd83ef8fc_f3b8_45ab_8b71_ecf7c339deb4);
pub const KSNODE_BDA_DRI_DRM: windows_core::GUID = windows_core::GUID::from_u128(0x4f95ad74_cefb_42d2_94a9_68c5b2c1aabe);
pub const KSNODE_BDA_IP_SINK: windows_core::GUID = windows_core::GUID::from_u128(0x71985f4e_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSNODE_BDA_ISDB_S_DEMODULATOR: windows_core::GUID = windows_core::GUID::from_u128(0xedde230a_9086_432d_b8a5_6670263807e9);
pub const KSNODE_BDA_ISDB_T_DEMODULATOR: windows_core::GUID = windows_core::GUID::from_u128(0xfcea3ae3_2cb2_464d_8f5d_305c0bb778a2);
pub const KSNODE_BDA_OPENCABLE_POD: windows_core::GUID = windows_core::GUID::from_u128(0x345812a0_fb7c_4790_aa7e_b1db88ac19c9);
pub const KSNODE_BDA_PBDA_CAS: windows_core::GUID = windows_core::GUID::from_u128(0xc026869f_7129_4e71_8696_ec8f75299b77);
pub const KSNODE_BDA_PBDA_DRM: windows_core::GUID = windows_core::GUID::from_u128(0x9eeebd03_eea1_450f_96ae_633e6de63cce);
pub const KSNODE_BDA_PBDA_ISDBCAS: windows_core::GUID = windows_core::GUID::from_u128(0xf2cf2ab3_5b9d_40ae_ab7c_4e7ad0bd1c52);
pub const KSNODE_BDA_PBDA_MUX: windows_core::GUID = windows_core::GUID::from_u128(0xf88c7787_6678_4f4b_a13e_da09861d682b);
pub const KSNODE_BDA_PBDA_TUNER: windows_core::GUID = windows_core::GUID::from_u128(0xaa5e8286_593c_4979_9494_46a2a9dfe076);
pub const KSNODE_BDA_PID_FILTER: windows_core::GUID = windows_core::GUID::from_u128(0xf5412789_b0a0_44e1_ae4f_ee999b1b7fbe);
pub const KSNODE_BDA_QAM_DEMODULATOR: windows_core::GUID = windows_core::GUID::from_u128(0x71985f4d_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSNODE_BDA_QPSK_DEMODULATOR: windows_core::GUID = windows_core::GUID::from_u128(0x6390c905_27c1_4d67_bdb7_77c50d079300);
pub const KSNODE_BDA_RF_TUNER: windows_core::GUID = windows_core::GUID::from_u128(0x71985f4c_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSNODE_BDA_TS_SELECTOR: windows_core::GUID = windows_core::GUID::from_u128(0x5eddf185_fed1_4f45_9685_bbb73c323cfc);
pub const KSNODE_BDA_VIDEO_ENCODER: windows_core::GUID = windows_core::GUID::from_u128(0xd98429e3_65c9_4ac4_93aa_766782833b7a);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_AUTODEMODULATE(pub i32);
pub const KSPROPERTY_BDA_AUTODEMODULATE_START: KSPROPERTY_BDA_AUTODEMODULATE = KSPROPERTY_BDA_AUTODEMODULATE(0i32);
pub const KSPROPERTY_BDA_AUTODEMODULATE_STOP: KSPROPERTY_BDA_AUTODEMODULATE = KSPROPERTY_BDA_AUTODEMODULATE(1i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_CA(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_CA_EVENT(pub i32);
pub const KSPROPERTY_BDA_CA_MODULE_STATUS: KSPROPERTY_BDA_CA = KSPROPERTY_BDA_CA(1i32);
pub const KSPROPERTY_BDA_CA_MODULE_UI: KSPROPERTY_BDA_CA = KSPROPERTY_BDA_CA(3i32);
pub const KSPROPERTY_BDA_CA_REMOVE_PROGRAM: KSPROPERTY_BDA_CA = KSPROPERTY_BDA_CA(5i32);
pub const KSPROPERTY_BDA_CA_SET_PROGRAM_PIDS: KSPROPERTY_BDA_CA = KSPROPERTY_BDA_CA(4i32);
pub const KSPROPERTY_BDA_CA_SMART_CARD_STATUS: KSPROPERTY_BDA_CA = KSPROPERTY_BDA_CA(2i32);
pub const KSPROPERTY_BDA_CONTROLLING_PIN_ID: KSPROPERTY_BDA_TOPOLOGY = KSPROPERTY_BDA_TOPOLOGY(6i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_DIGITAL_DEMODULATOR(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_DISEQC_COMMAND(pub i32);
pub const KSPROPERTY_BDA_DISEQC_ENABLE: KSPROPERTY_BDA_DISEQC_COMMAND = KSPROPERTY_BDA_DISEQC_COMMAND(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_DISEQC_EVENT(pub i32);
pub const KSPROPERTY_BDA_DISEQC_LNB_SOURCE: KSPROPERTY_BDA_DISEQC_COMMAND = KSPROPERTY_BDA_DISEQC_COMMAND(1i32);
pub const KSPROPERTY_BDA_DISEQC_REPEATS: KSPROPERTY_BDA_DISEQC_COMMAND = KSPROPERTY_BDA_DISEQC_COMMAND(3i32);
pub const KSPROPERTY_BDA_DISEQC_RESPONSE: KSPROPERTY_BDA_DISEQC_COMMAND = KSPROPERTY_BDA_DISEQC_COMMAND(5i32);
pub const KSPROPERTY_BDA_DISEQC_SEND: KSPROPERTY_BDA_DISEQC_COMMAND = KSPROPERTY_BDA_DISEQC_COMMAND(4i32);
pub const KSPROPERTY_BDA_DISEQC_USETONEBURST: KSPROPERTY_BDA_DISEQC_COMMAND = KSPROPERTY_BDA_DISEQC_COMMAND(2i32);
pub const KSPROPERTY_BDA_ECM_MAP_STATUS: KSPROPERTY_BDA_CA = KSPROPERTY_BDA_CA(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_ETHERNET_FILTER(pub i32);
pub const KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_LIST: KSPROPERTY_BDA_ETHERNET_FILTER = KSPROPERTY_BDA_ETHERNET_FILTER(1i32);
pub const KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_LIST_SIZE: KSPROPERTY_BDA_ETHERNET_FILTER = KSPROPERTY_BDA_ETHERNET_FILTER(0i32);
pub const KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_MODE: KSPROPERTY_BDA_ETHERNET_FILTER = KSPROPERTY_BDA_ETHERNET_FILTER(2i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_FREQUENCY_FILTER(pub i32);
pub const KSPROPERTY_BDA_GUARD_INTERVAL: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(7i32);
pub const KSPROPERTY_BDA_INNER_FEC_RATE: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(2i32);
pub const KSPROPERTY_BDA_INNER_FEC_TYPE: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(1i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_IPv4_FILTER(pub i32);
pub const KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_LIST: KSPROPERTY_BDA_IPv4_FILTER = KSPROPERTY_BDA_IPv4_FILTER(1i32);
pub const KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_LIST_SIZE: KSPROPERTY_BDA_IPv4_FILTER = KSPROPERTY_BDA_IPv4_FILTER(0i32);
pub const KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_MODE: KSPROPERTY_BDA_IPv4_FILTER = KSPROPERTY_BDA_IPv4_FILTER(2i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_IPv6_FILTER(pub i32);
pub const KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_LIST: KSPROPERTY_BDA_IPv6_FILTER = KSPROPERTY_BDA_IPv6_FILTER(1i32);
pub const KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_LIST_SIZE: KSPROPERTY_BDA_IPv6_FILTER = KSPROPERTY_BDA_IPv6_FILTER(0i32);
pub const KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_MODE: KSPROPERTY_BDA_IPv6_FILTER = KSPROPERTY_BDA_IPv6_FILTER(2i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_LNB_INFO(pub i32);
pub const KSPROPERTY_BDA_LNB_LOF_HIGH_BAND: KSPROPERTY_BDA_LNB_INFO = KSPROPERTY_BDA_LNB_INFO(1i32);
pub const KSPROPERTY_BDA_LNB_LOF_LOW_BAND: KSPROPERTY_BDA_LNB_INFO = KSPROPERTY_BDA_LNB_INFO(0i32);
pub const KSPROPERTY_BDA_LNB_SWITCH_FREQUENCY: KSPROPERTY_BDA_LNB_INFO = KSPROPERTY_BDA_LNB_INFO(2i32);
pub const KSPROPERTY_BDA_MODULATION_TYPE: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(0i32);
pub const KSPROPERTY_BDA_NODE_DESCRIPTORS: KSPROPERTY_BDA_TOPOLOGY = KSPROPERTY_BDA_TOPOLOGY(7i32);
pub const KSPROPERTY_BDA_NODE_EVENTS: KSPROPERTY_BDA_TOPOLOGY = KSPROPERTY_BDA_TOPOLOGY(5i32);
pub const KSPROPERTY_BDA_NODE_METHODS: KSPROPERTY_BDA_TOPOLOGY = KSPROPERTY_BDA_TOPOLOGY(3i32);
pub const KSPROPERTY_BDA_NODE_PROPERTIES: KSPROPERTY_BDA_TOPOLOGY = KSPROPERTY_BDA_TOPOLOGY(4i32);
pub const KSPROPERTY_BDA_NODE_TYPES: KSPROPERTY_BDA_TOPOLOGY = KSPROPERTY_BDA_TOPOLOGY(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_NULL_TRANSFORM(pub i32);
pub const KSPROPERTY_BDA_NULL_TRANSFORM_START: KSPROPERTY_BDA_NULL_TRANSFORM = KSPROPERTY_BDA_NULL_TRANSFORM(0i32);
pub const KSPROPERTY_BDA_NULL_TRANSFORM_STOP: KSPROPERTY_BDA_NULL_TRANSFORM = KSPROPERTY_BDA_NULL_TRANSFORM(1i32);
pub const KSPROPERTY_BDA_OUTER_FEC_RATE: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(4i32);
pub const KSPROPERTY_BDA_OUTER_FEC_TYPE: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(3i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_PIDFILTER(pub i32);
pub const KSPROPERTY_BDA_PIDFILTER_LIST_PIDS: KSPROPERTY_BDA_PIDFILTER = KSPROPERTY_BDA_PIDFILTER(2i32);
pub const KSPROPERTY_BDA_PIDFILTER_MAP_PIDS: KSPROPERTY_BDA_PIDFILTER = KSPROPERTY_BDA_PIDFILTER(0i32);
pub const KSPROPERTY_BDA_PIDFILTER_UNMAP_PIDS: KSPROPERTY_BDA_PIDFILTER = KSPROPERTY_BDA_PIDFILTER(1i32);
pub const KSPROPERTY_BDA_PILOT: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(10i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_PIN_CONTROL(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_PIN_EVENT(pub i32);
pub const KSPROPERTY_BDA_PIN_ID: KSPROPERTY_BDA_PIN_CONTROL = KSPROPERTY_BDA_PIN_CONTROL(0i32);
pub const KSPROPERTY_BDA_PIN_TYPE: KSPROPERTY_BDA_PIN_CONTROL = KSPROPERTY_BDA_PIN_CONTROL(1i32);
pub const KSPROPERTY_BDA_PIN_TYPES: KSPROPERTY_BDA_TOPOLOGY = KSPROPERTY_BDA_TOPOLOGY(1i32);
pub const KSPROPERTY_BDA_PLP_NUMBER: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(12i32);
pub const KSPROPERTY_BDA_RF_TUNER_BANDWIDTH: KSPROPERTY_BDA_FREQUENCY_FILTER = KSPROPERTY_BDA_FREQUENCY_FILTER(4i32);
pub const KSPROPERTY_BDA_RF_TUNER_CAPS: KSPROPERTY_BDA_FREQUENCY_FILTER = KSPROPERTY_BDA_FREQUENCY_FILTER(6i32);
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSPROPERTY_BDA_RF_TUNER_CAPS_S {
    pub Property: super::super::KernelStreaming::KSP_NODE,
    pub Mode: u32,
    pub AnalogStandardsSupported: u32,
    pub DigitalStandardsSupported: u32,
    pub MinFrequency: u32,
    pub MaxFrequency: u32,
    pub SettlingTime: u32,
    pub AnalogSensingRange: u32,
    pub DigitalSensingRange: u32,
    pub MilliSecondsPerMHz: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSPROPERTY_BDA_RF_TUNER_CAPS_S {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const KSPROPERTY_BDA_RF_TUNER_FREQUENCY: KSPROPERTY_BDA_FREQUENCY_FILTER = KSPROPERTY_BDA_FREQUENCY_FILTER(0i32);
pub const KSPROPERTY_BDA_RF_TUNER_FREQUENCY_MULTIPLIER: KSPROPERTY_BDA_FREQUENCY_FILTER = KSPROPERTY_BDA_FREQUENCY_FILTER(5i32);
pub const KSPROPERTY_BDA_RF_TUNER_POLARITY: KSPROPERTY_BDA_FREQUENCY_FILTER = KSPROPERTY_BDA_FREQUENCY_FILTER(1i32);
pub const KSPROPERTY_BDA_RF_TUNER_RANGE: KSPROPERTY_BDA_FREQUENCY_FILTER = KSPROPERTY_BDA_FREQUENCY_FILTER(2i32);
pub const KSPROPERTY_BDA_RF_TUNER_SCAN_STATUS: KSPROPERTY_BDA_FREQUENCY_FILTER = KSPROPERTY_BDA_FREQUENCY_FILTER(7i32);
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSPROPERTY_BDA_RF_TUNER_SCAN_STATUS_S {
    pub Property: super::super::KernelStreaming::KSP_NODE,
    pub CurrentFrequency: u32,
    pub FrequencyRangeMin: u32,
    pub FrequencyRangeMax: u32,
    pub MilliSecondsLeft: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSPROPERTY_BDA_RF_TUNER_SCAN_STATUS_S {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const KSPROPERTY_BDA_RF_TUNER_STANDARD: KSPROPERTY_BDA_FREQUENCY_FILTER = KSPROPERTY_BDA_FREQUENCY_FILTER(8i32);
pub const KSPROPERTY_BDA_RF_TUNER_STANDARD_MODE: KSPROPERTY_BDA_FREQUENCY_FILTER = KSPROPERTY_BDA_FREQUENCY_FILTER(9i32);
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSPROPERTY_BDA_RF_TUNER_STANDARD_MODE_S {
    pub Property: super::super::KernelStreaming::KSP_NODE,
    pub AutoDetect: windows_core::BOOL,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSPROPERTY_BDA_RF_TUNER_STANDARD_MODE_S {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSPROPERTY_BDA_RF_TUNER_STANDARD_S {
    pub Property: super::super::KernelStreaming::KSP_NODE,
    pub SignalType: BDA_SignalType,
    pub SignalStandard: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSPROPERTY_BDA_RF_TUNER_STANDARD_S {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const KSPROPERTY_BDA_RF_TUNER_TRANSPONDER: KSPROPERTY_BDA_FREQUENCY_FILTER = KSPROPERTY_BDA_FREQUENCY_FILTER(3i32);
pub const KSPROPERTY_BDA_ROLL_OFF: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(9i32);
pub const KSPROPERTY_BDA_SAMPLE_TIME: KSPROPERTY_BDA_SIGNAL_STATS = KSPROPERTY_BDA_SIGNAL_STATS(4i32);
pub const KSPROPERTY_BDA_SIGNALTIMEOUTS: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(11i32);
pub const KSPROPERTY_BDA_SIGNAL_LOCKED: KSPROPERTY_BDA_SIGNAL_STATS = KSPROPERTY_BDA_SIGNAL_STATS(3i32);
pub const KSPROPERTY_BDA_SIGNAL_LOCK_CAPS: KSPROPERTY_BDA_SIGNAL_STATS = KSPROPERTY_BDA_SIGNAL_STATS(5i32);
pub const KSPROPERTY_BDA_SIGNAL_LOCK_TYPE: KSPROPERTY_BDA_SIGNAL_STATS = KSPROPERTY_BDA_SIGNAL_STATS(6i32);
pub const KSPROPERTY_BDA_SIGNAL_PRESENT: KSPROPERTY_BDA_SIGNAL_STATS = KSPROPERTY_BDA_SIGNAL_STATS(2i32);
pub const KSPROPERTY_BDA_SIGNAL_QUALITY: KSPROPERTY_BDA_SIGNAL_STATS = KSPROPERTY_BDA_SIGNAL_STATS(1i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_SIGNAL_STATS(pub i32);
pub const KSPROPERTY_BDA_SIGNAL_STRENGTH: KSPROPERTY_BDA_SIGNAL_STATS = KSPROPERTY_BDA_SIGNAL_STATS(0i32);
pub const KSPROPERTY_BDA_SPECTRAL_INVERSION: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(6i32);
pub const KSPROPERTY_BDA_SYMBOL_RATE: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(5i32);
pub const KSPROPERTY_BDA_TABLE_SECTION: KSPROPERTY_IDS_BDA_TABLE = KSPROPERTY_IDS_BDA_TABLE(0i32);
pub const KSPROPERTY_BDA_TEMPLATE_CONNECTIONS: KSPROPERTY_BDA_TOPOLOGY = KSPROPERTY_BDA_TOPOLOGY(2i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_TOPOLOGY(pub i32);
pub const KSPROPERTY_BDA_TRANSMISSION_MODE: KSPROPERTY_BDA_DIGITAL_DEMODULATOR = KSPROPERTY_BDA_DIGITAL_DEMODULATOR(8i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_BDA_VOID_TRANSFORM(pub i32);
pub const KSPROPERTY_BDA_VOID_TRANSFORM_START: KSPROPERTY_BDA_VOID_TRANSFORM = KSPROPERTY_BDA_VOID_TRANSFORM(0i32);
pub const KSPROPERTY_BDA_VOID_TRANSFORM_STOP: KSPROPERTY_BDA_VOID_TRANSFORM = KSPROPERTY_BDA_VOID_TRANSFORM(1i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct KSPROPERTY_IDS_BDA_TABLE(pub i32);
pub const KSPROPSETID_BdaAutodemodulate: windows_core::GUID = windows_core::GUID::from_u128(0xddf15b12_bd25_11d2_9ca0_00c04f7971e0);
pub const KSPROPSETID_BdaCA: windows_core::GUID = windows_core::GUID::from_u128(0xb0693766_5278_4ec6_b9e1_3ce40560ef5a);
pub const KSPROPSETID_BdaDigitalDemodulator: windows_core::GUID = windows_core::GUID::from_u128(0xef30f379_985b_4d10_b640_a79d5e04e1e0);
pub const KSPROPSETID_BdaDiseqCommand: windows_core::GUID = windows_core::GUID::from_u128(0xf84e2ab0_3c6b_45e3_a0fc_8669d4b81f11);
pub const KSPROPSETID_BdaEthernetFilter: windows_core::GUID = windows_core::GUID::from_u128(0x71985f43_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSPROPSETID_BdaFrequencyFilter: windows_core::GUID = windows_core::GUID::from_u128(0x71985f47_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSPROPSETID_BdaIPv4Filter: windows_core::GUID = windows_core::GUID::from_u128(0x71985f44_1ca1_11d3_9cc8_00c04f7971e0);
pub const KSPROPSETID_BdaIPv6Filter: windows_core::GUID = windows_core::GUID::from_u128(0xe1785a74_2a23_4fb3_9245_a8f88017ef33);
pub const KSPROPSETID_BdaLNBInfo: windows_core::GUID = windows_core::GUID::from_u128(0x992cf102_49f9_4719_a664_c4f23e2408f4);
pub const KSPROPSETID_BdaNullTransform: windows_core::GUID = windows_core::GUID::from_u128(0xddf15b0d_bd25_11d2_9ca0_00c04f7971e0);
pub const KSPROPSETID_BdaPIDFilter: windows_core::GUID = windows_core::GUID::from_u128(0xd0a67d65_08df_4fec_8533_e5b550410b85);
pub const KSPROPSETID_BdaPinControl: windows_core::GUID = windows_core::GUID::from_u128(0x0ded49d5_a8b7_4d5d_97a1_12b0c195874d);
pub const KSPROPSETID_BdaSignalStats: windows_core::GUID = windows_core::GUID::from_u128(0x1347d106_cf3a_428a_a5cb_ac0d9a2a4338);
pub const KSPROPSETID_BdaTableSection: windows_core::GUID = windows_core::GUID::from_u128(0x516b99c5_971c_4aaf_b3f3_d9fda8a15e16);
pub const KSPROPSETID_BdaTopology: windows_core::GUID = windows_core::GUID::from_u128(0xa14ee835_0a23_11d3_9cc7_00c04f7971e0);
pub const KSPROPSETID_BdaVoidTransform: windows_core::GUID = windows_core::GUID::from_u128(0x71985f46_1ca1_11d3_9cc8_00c04f7971e0);
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSP_BDA_NODE_PIN {
    pub Property: super::super::KernelStreaming::KSIDENTIFIER,
    pub ulNodeType: u32,
    pub ulInputPinId: u32,
    pub ulOutputPinId: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSP_BDA_NODE_PIN {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KSP_NODE_ESPID {
    pub Property: super::super::KernelStreaming::KSP_NODE,
    pub EsPid: u32,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KSP_NODE_ESPID {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KS_DATARANGE_BDA_ANTENNA {
    pub DataRange: super::super::KernelStreaming::KSDATAFORMAT,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KS_DATARANGE_BDA_ANTENNA {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[cfg(feature = "Win32_Media_KernelStreaming")]
#[derive(Clone, Copy)]
pub struct KS_DATARANGE_BDA_TRANSPORT {
    pub DataRange: super::super::KernelStreaming::KSDATAFORMAT,
    pub BdaTransportInfo: BDA_TRANSPORT_INFO,
}
#[cfg(feature = "Win32_Media_KernelStreaming")]
impl Default for KS_DATARANGE_BDA_TRANSPORT {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const LIC_BadLicense: LicenseEventBlockReason = LicenseEventBlockReason(0i32);
pub const LIC_Expired: LicenseEventBlockReason = LicenseEventBlockReason(2i32);
pub const LIC_ExtenderBlocked: LicenseEventBlockReason = LicenseEventBlockReason(4i32);
pub const LIC_NeedActivation: LicenseEventBlockReason = LicenseEventBlockReason(3i32);
pub const LIC_NeedIndiv: LicenseEventBlockReason = LicenseEventBlockReason(1i32);
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct LONG_SECTION {
    pub TableId: u8,
    pub Header: LONG_SECTION_0,
    pub TableIdExtension: u16,
    pub Version: LONG_SECTION_1,
    pub SectionNumber: u8,
    pub LastSectionNumber: u8,
    pub RemainingData: [u8; 1],
}
impl Default for LONG_SECTION {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub union LONG_SECTION_0 {
    pub S: MPEG_HEADER_BITS_MIDL,
    pub W: u16,
}
impl Default for LONG_SECTION_0 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[derive(Clone, Copy)]
pub union LONG_SECTION_1 {
    pub S: MPEG_HEADER_VERSION_BITS_MIDL,
    pub B: u8,
}
impl Default for LONG_SECTION_1 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const LanguageComponentType: windows_core::GUID = windows_core::GUID::from_u128(0x1be49f30_0e1b_11d3_9d8e_00c04f72d980);
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct LanguageInfo {
    pub LangID: u16,
    pub lISOLangCode: i32,
}
pub const LastReservedDeviceDispid: SegDispidList = SegDispidList(16383i32);
pub const LastReservedDeviceEvent: SegEventidList = SegEventidList(16383i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct LicenseEventBlockReason(pub i32);
pub const Locator: windows_core::GUID = windows_core::GUID::from_u128(0x0888c883_ac4f_4943_b516_2c38d9b34562);
pub const MAX_COUNTRY_CODE_STRING: u32 = 3u32;
pub const MEDIASUBTYPE_CPFilters_Processed: windows_core::GUID = windows_core::GUID::from_u128(0x46adbd28_6fd0_4796_93b2_155c51dc048d);
pub const MEDIASUBTYPE_ETDTFilter_Tagged: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4d0_0049_4e2b_98fb_9537f6ce516d);
pub const MPAA: EnTvRat_System = EnTvRat_System(0i32);
pub const MPAA_G: EnTvRat_MPAA = EnTvRat_MPAA(1i32);
pub const MPAA_IsBlocked: BfEnTvRat_Attributes_MPAA = BfEnTvRat_Attributes_MPAA(1i32);
pub const MPAA_NC17: EnTvRat_MPAA = EnTvRat_MPAA(5i32);
pub const MPAA_NotApplicable: EnTvRat_MPAA = EnTvRat_MPAA(0i32);
pub const MPAA_NotRated: EnTvRat_MPAA = EnTvRat_MPAA(7i32);
pub const MPAA_PG: EnTvRat_MPAA = EnTvRat_MPAA(2i32);
pub const MPAA_PG13: EnTvRat_MPAA = EnTvRat_MPAA(3i32);
pub const MPAA_R: EnTvRat_MPAA = EnTvRat_MPAA(4i32);
pub const MPAA_ValidAttrSubmask: BfEnTvRat_Attributes_MPAA = BfEnTvRat_Attributes_MPAA(1i32);
pub const MPAA_X: EnTvRat_MPAA = EnTvRat_MPAA(6i32);
pub const MPEG2Component: windows_core::GUID = windows_core::GUID::from_u128(0x055cb2d7_2969_45cd_914b_76890722f112);
pub const MPEG2ComponentType: windows_core::GUID = windows_core::GUID::from_u128(0x418008f3_cf67_4668_9628_10dc52be1d08);
pub const MPEG2TuneRequest: windows_core::GUID = windows_core::GUID::from_u128(0x0955ac62_bf2e_4cba_a2b9_a63f772d46cf);
pub const MPEG2TuneRequestFactory: windows_core::GUID = windows_core::GUID::from_u128(0x2c63e4eb_4cea_41b8_919c_e947ea19a77c);
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct MPEG2_FILTER {
    pub bVersionNumber: u8,
    pub wFilterSize: u16,
    pub fUseRawFilteringBits: windows_core::BOOL,
    pub Filter: [u8; 16],
    pub Mask: [u8; 16],
    pub fSpecifyTableIdExtension: windows_core::BOOL,
    pub TableIdExtension: u16,
    pub fSpecifyVersion: windows_core::BOOL,
    pub Version: u8,
    pub fSpecifySectionNumber: windows_core::BOOL,
    pub SectionNumber: u8,
    pub fSpecifyCurrentNext: windows_core::BOOL,
    pub fNext: windows_core::BOOL,
    pub fSpecifyDsmccOptions: windows_core::BOOL,
    pub Dsmcc: DSMCC_FILTER_OPTIONS,
    pub fSpecifyAtscOptions: windows_core::BOOL,
    pub Atsc: ATSC_FILTER_OPTIONS,
}
impl Default for MPEG2_FILTER {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct MPEG2_FILTER2 {
    pub Anonymous: MPEG2_FILTER2_0,
    pub fSpecifyDvbEitOptions: windows_core::BOOL,
    pub DvbEit: DVB_EIT_FILTER_OPTIONS,
}
impl Default for MPEG2_FILTER2 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[derive(Clone, Copy)]
pub union MPEG2_FILTER2_0 {
    pub Anonymous: MPEG2_FILTER2_0_0,
    pub bVersion1Bytes: [u8; 124],
}
impl Default for MPEG2_FILTER2_0 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct MPEG2_FILTER2_0_0 {
    pub bVersionNumber: u8,
    pub wFilterSize: u16,
    pub fUseRawFilteringBits: windows_core::BOOL,
    pub Filter: [u8; 16],
    pub Mask: [u8; 16],
    pub fSpecifyTableIdExtension: windows_core::BOOL,
    pub TableIdExtension: u16,
    pub fSpecifyVersion: windows_core::BOOL,
    pub Version: u8,
    pub fSpecifySectionNumber: windows_core::BOOL,
    pub SectionNumber: u8,
    pub fSpecifyCurrentNext: windows_core::BOOL,
    pub fNext: windows_core::BOOL,
    pub fSpecifyDsmccOptions: windows_core::BOOL,
    pub Dsmcc: DSMCC_FILTER_OPTIONS,
    pub fSpecifyAtscOptions: windows_core::BOOL,
    pub Atsc: ATSC_FILTER_OPTIONS,
}
impl Default for MPEG2_FILTER2_0_0 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const MPEG2_FILTER_VERSION_1_SIZE: u32 = 124u32;
pub const MPEG2_FILTER_VERSION_2_SIZE: u32 = 133u32;
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct MPEG_BCS_DEMUX {
    pub AVMGraphId: u32,
}
pub const MPEG_CAT_PID: u32 = 1u32;
pub const MPEG_CAT_TID: u32 = 1u32;
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct MPEG_CONTEXT {
    pub Type: MPEG_CONTEXT_TYPE,
    pub U: MPEG_CONTEXT_0,
}
impl Default for MPEG_CONTEXT {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[derive(Clone, Copy)]
pub union MPEG_CONTEXT_0 {
    pub Demux: MPEG_BCS_DEMUX,
    pub Winsock: MPEG_WINSOCK,
}
impl Default for MPEG_CONTEXT_0 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const MPEG_CONTEXT_BCS_DEMUX: MPEG_CONTEXT_TYPE = MPEG_CONTEXT_TYPE(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct MPEG_CONTEXT_TYPE(pub i32);
pub const MPEG_CONTEXT_WINSOCK: MPEG_CONTEXT_TYPE = MPEG_CONTEXT_TYPE(1i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct MPEG_CURRENT_NEXT_BIT(pub i32);
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct MPEG_DATE {
    pub Date: u8,
    pub Month: u8,
    pub Year: u16,
}
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct MPEG_DATE_AND_TIME {
    pub D: MPEG_DATE,
    pub T: MPEG_TIME,
}
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct MPEG_HEADER_BITS {
    pub _bitfield: u16,
}
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct MPEG_HEADER_BITS_MIDL {
    pub Bits: u16,
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct MPEG_HEADER_VERSION_BITS {
    pub _bitfield: u8,
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct MPEG_HEADER_VERSION_BITS_MIDL {
    pub Bits: u8,
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct MPEG_PACKET_LIST {
    pub wPacketCount: u16,
    pub PacketList: [*mut MPEG_RQST_PACKET; 1],
}
impl Default for MPEG_PACKET_LIST {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const MPEG_PAT_PID: u32 = 0u32;
pub const MPEG_PAT_TID: u32 = 0u32;
pub const MPEG_PMT_TID: u32 = 2u32;
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct MPEG_REQUEST_TYPE(pub i32);
pub const MPEG_RQST_GET_PES_STREAM: MPEG_REQUEST_TYPE = MPEG_REQUEST_TYPE(6i32);
pub const MPEG_RQST_GET_SECTION: MPEG_REQUEST_TYPE = MPEG_REQUEST_TYPE(1i32);
pub const MPEG_RQST_GET_SECTIONS_STREAM: MPEG_REQUEST_TYPE = MPEG_REQUEST_TYPE(5i32);
pub const MPEG_RQST_GET_SECTION_ASYNC: MPEG_REQUEST_TYPE = MPEG_REQUEST_TYPE(2i32);
pub const MPEG_RQST_GET_TABLE: MPEG_REQUEST_TYPE = MPEG_REQUEST_TYPE(3i32);
pub const MPEG_RQST_GET_TABLE_ASYNC: MPEG_REQUEST_TYPE = MPEG_REQUEST_TYPE(4i32);
pub const MPEG_RQST_GET_TS_STREAM: MPEG_REQUEST_TYPE = MPEG_REQUEST_TYPE(7i32);
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct MPEG_RQST_PACKET {
    pub dwLength: u32,
    pub pSection: *mut SECTION,
}
impl Default for MPEG_RQST_PACKET {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const MPEG_RQST_START_MPE_STREAM: MPEG_REQUEST_TYPE = MPEG_REQUEST_TYPE(8i32);
pub const MPEG_RQST_UNKNOWN: MPEG_REQUEST_TYPE = MPEG_REQUEST_TYPE(0i32);
pub const MPEG_SECTION_IS_CURRENT: MPEG_CURRENT_NEXT_BIT = MPEG_CURRENT_NEXT_BIT(1i32);
pub const MPEG_SECTION_IS_NEXT: MPEG_CURRENT_NEXT_BIT = MPEG_CURRENT_NEXT_BIT(0i32);
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct MPEG_SERVICE_REQUEST {
    pub Type: MPEG_REQUEST_TYPE,
    pub Context: MPEG_CONTEXT,
    pub Pid: u16,
    pub TableId: u8,
    pub Filter: MPEG2_FILTER,
    pub Flags: u32,
}
impl Default for MPEG_SERVICE_REQUEST {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct MPEG_SERVICE_RESPONSE {
    pub IPAddress: u32,
    pub Port: u16,
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct MPEG_STREAM_BUFFER {
    pub hr: windows_core::HRESULT,
    pub dwDataBufferSize: u32,
    pub dwSizeOfDataRead: u32,
    pub pDataBuffer: *mut u8,
}
impl Default for MPEG_STREAM_BUFFER {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct MPEG_STREAM_FILTER {
    pub wPidValue: u16,
    pub dwFilterSize: u32,
    pub fCrcEnabled: windows_core::BOOL,
    pub rgchFilter: [u8; 16],
    pub rgchMask: [u8; 16],
}
impl Default for MPEG_STREAM_FILTER {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct MPEG_TIME {
    pub Hours: u8,
    pub Minutes: u8,
    pub Seconds: u8,
}
pub const MPEG_TSDT_PID: u32 = 2u32;
pub const MPEG_TSDT_TID: u32 = 3u32;
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct MPEG_WINSOCK {
    pub AVMGraphId: u32,
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct MPE_ELEMENT {
    pub pid: u16,
    pub bComponentTag: u8,
    pub pNext: *mut MPE_ELEMENT,
}
impl Default for MPE_ELEMENT {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const MSEventBinder: windows_core::GUID = windows_core::GUID::from_u128(0x577faa18_4518_445e_8f70_1473f8cf4ba4);
pub const MSVIDCTL_ALT: MSVidCtlButtonstate = MSVidCtlButtonstate(4i32);
pub const MSVIDCTL_CTRL: MSVidCtlButtonstate = MSVidCtlButtonstate(2i32);
pub const MSVIDCTL_LEFT_BUTTON: MSVidCtlButtonstate = MSVidCtlButtonstate(1i32);
pub const MSVIDCTL_MIDDLE_BUTTON: MSVidCtlButtonstate = MSVidCtlButtonstate(4i32);
pub const MSVIDCTL_RIGHT_BUTTON: MSVidCtlButtonstate = MSVidCtlButtonstate(2i32);
pub const MSVIDCTL_SHIFT: MSVidCtlButtonstate = MSVidCtlButtonstate(1i32);
pub const MSVIDCTL_X_BUTTON1: MSVidCtlButtonstate = MSVidCtlButtonstate(8i32);
pub const MSVIDCTL_X_BUTTON2: MSVidCtlButtonstate = MSVidCtlButtonstate(16i32);
pub const MSVidAnalogCaptureToCCA: windows_core::GUID = windows_core::GUID::from_u128(0x942b7909_a28e_49a1_a207_34ebcbcb4b3b);
pub const MSVidAnalogCaptureToDataServices: windows_core::GUID = windows_core::GUID::from_u128(0xc5702cd6_9b79_11d3_b654_00c04f79498e);
pub const MSVidAnalogCaptureToOverlayMixer: windows_core::GUID = windows_core::GUID::from_u128(0xe18af75a_08af_11d3_b64a_00c04f79498e);
pub const MSVidAnalogCaptureToStreamBufferSink: windows_core::GUID = windows_core::GUID::from_u128(0x9f50e8b1_9530_4ddc_825e_1af81d47aed6);
pub const MSVidAnalogCaptureToXDS: windows_core::GUID = windows_core::GUID::from_u128(0x3540d440_5b1d_49cb_821a_e84b8cf065a7);
pub const MSVidAnalogTVToEncoder: windows_core::GUID = windows_core::GUID::from_u128(0x28953661_0231_41db_8986_21ff4388ee9b);
pub const MSVidAnalogTunerDevice: windows_core::GUID = windows_core::GUID::from_u128(0x1c15d484_911d_11d2_b632_00c04f79498e);
pub const MSVidAudioRenderer: windows_core::GUID = windows_core::GUID::from_u128(0x37b03544_a4c8_11d2_b634_00c04f79498e);
pub const MSVidAudioRendererDevices: windows_core::GUID = windows_core::GUID::from_u128(0xc5702ccf_9b79_11d3_b654_00c04f79498e);
pub const MSVidBDATunerDevice: windows_core::GUID = windows_core::GUID::from_u128(0xa2e3074e_6c3d_11d3_b653_00c04f79498e);
pub const MSVidCCA: windows_core::GUID = windows_core::GUID::from_u128(0x86151827_e47b_45ee_8421_d10e6e690979);
pub const MSVidCCAToStreamBufferSink: windows_core::GUID = windows_core::GUID::from_u128(0x3ef76d68_8661_4843_8b8f_c37163d8c9ce);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct MSVidCCService(pub i32);
impl MSVidCCService {
    pub const None: Self = Self(0i32);
    pub const Caption1: Self = Self(1i32);
    pub const Caption2: Self = Self(2i32);
    pub const Text1: Self = Self(3i32);
    pub const Text2: Self = Self(4i32);
    pub const XDS: Self = Self(5i32);
}
pub const MSVidCCToAR: windows_core::GUID = windows_core::GUID::from_u128(0xd76334ca_d89e_4baf_86ab_ddb59372afc2);
pub const MSVidCCToVMR: windows_core::GUID = windows_core::GUID::from_u128(0xc4bf2784_ae00_41ba_9828_9c953bd3c54a);
pub const MSVidClosedCaptioning: windows_core::GUID = windows_core::GUID::from_u128(0x7f9cb14d_48e4_43b6_9346_1aebc39c64d3);
pub const MSVidClosedCaptioningSI: windows_core::GUID = windows_core::GUID::from_u128(0x92ed88bf_879e_448f_b6b6_a385bceb846d);
pub const MSVidCtl: windows_core::GUID = windows_core::GUID::from_u128(0xb0edf163_910a_11d2_b632_00c04f79498e);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct MSVidCtlButtonstate(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct MSVidCtlStateList(pub i32);
pub const MSVidDataServices: windows_core::GUID = windows_core::GUID::from_u128(0x334125c0_77e5_11d3_b653_00c04f79498e);
pub const MSVidDataServicesToStreamBufferSink: windows_core::GUID = windows_core::GUID::from_u128(0x38f03426_e83b_4e68_b65b_dcae73304838);
pub const MSVidDataServicesToXDS: windows_core::GUID = windows_core::GUID::from_u128(0x0429ec6e_1144_4bed_b88b_2fb9899a4a3d);
pub const MSVidDevice: windows_core::GUID = windows_core::GUID::from_u128(0x6e40476f_9c49_4c3e_8bb9_8587958eff74);
pub const MSVidDevice2: windows_core::GUID = windows_core::GUID::from_u128(0x30997f7d_b3b5_4a1c_983a_1fe8098cb77d);
pub const MSVidDigitalCaptureToCCA: windows_core::GUID = windows_core::GUID::from_u128(0x73d14237_b9db_4efa_a6dd_84350421fb2f);
pub const MSVidDigitalCaptureToITV: windows_core::GUID = windows_core::GUID::from_u128(0x5d8e73f7_4989_4ac8_8a98_39ba0d325302);
pub const MSVidDigitalCaptureToStreamBufferSink: windows_core::GUID = windows_core::GUID::from_u128(0xabe40035_27c3_4a2f_8153_6624471608af);
pub const MSVidEVR: windows_core::GUID = windows_core::GUID::from_u128(0xc45268a2_fa81_4e19_b1e3_72edbd60aeda);
pub const MSVidEncoder: windows_core::GUID = windows_core::GUID::from_u128(0xbb530c63_d9df_4b49_9439_63453962e598);
pub const MSVidEncoderToStreamBufferSink: windows_core::GUID = windows_core::GUID::from_u128(0xa0b9b497_afbc_45ad_a8a6_9b077c40d4f2);
pub const MSVidFeature: windows_core::GUID = windows_core::GUID::from_u128(0x7748530b_c08a_47ea_b24c_be8695ff405f);
pub const MSVidFeatures: windows_core::GUID = windows_core::GUID::from_u128(0xc5702cd0_9b79_11d3_b654_00c04f79498e);
pub const MSVidFilePlaybackDevice: windows_core::GUID = windows_core::GUID::from_u128(0x37b0353c_a4c8_11d2_b634_00c04f79498e);
pub const MSVidFilePlaybackToAudioRenderer: windows_core::GUID = windows_core::GUID::from_u128(0xcc23f537_18d4_4ece_93bd_207a84726979);
pub const MSVidFilePlaybackToVideoRenderer: windows_core::GUID = windows_core::GUID::from_u128(0xb401c5eb_8457_427f_84ea_a4d2363364b0);
pub const MSVidGenericComposite: windows_core::GUID = windows_core::GUID::from_u128(0x2764bce5_cc39_11d2_b639_00c04f79498e);
pub const MSVidGenericSink: windows_core::GUID = windows_core::GUID::from_u128(0x4a5869cf_929d_4040_ae03_fcafc5b9cd42);
pub const MSVidITVCapture: windows_core::GUID = windows_core::GUID::from_u128(0x5740a302_ef0b_45ce_bf3b_4470a14a8980);
pub const MSVidITVPlayback: windows_core::GUID = windows_core::GUID::from_u128(0x9e797ed0_5253_4243_a9b7_bd06c58f8ef3);
pub const MSVidITVToStreamBufferSink: windows_core::GUID = windows_core::GUID::from_u128(0x92b94828_1af7_4e6e_9ebf_770657f77af5);
pub const MSVidInputDevice: windows_core::GUID = windows_core::GUID::from_u128(0xac1972f2_138a_4ca3_90da_ae51112eda28);
pub const MSVidInputDevices: windows_core::GUID = windows_core::GUID::from_u128(0xc5702ccc_9b79_11d3_b654_00c04f79498e);
pub const MSVidMPEG2DecoderToClosedCaptioning: windows_core::GUID = windows_core::GUID::from_u128(0x6ad28ee1_5002_4e71_aaf7_bd077907b1a4);
pub const MSVidOutput: windows_core::GUID = windows_core::GUID::from_u128(0x87eb890d_03ad_4e9d_9866_376e5ec572ed);
pub const MSVidOutputDevices: windows_core::GUID = windows_core::GUID::from_u128(0xc5702ccd_9b79_11d3_b654_00c04f79498e);
pub const MSVidRect: windows_core::GUID = windows_core::GUID::from_u128(0xcb4276e6_7d5f_4cf1_9727_629c5e6db6ae);
pub const MSVidSBESourceToCC: windows_core::GUID = windows_core::GUID::from_u128(0x9193a8f9_0cba_400e_aa97_eb4709164576);
pub const MSVidSBESourceToGenericSink: windows_core::GUID = windows_core::GUID::from_u128(0x991da7e5_953f_435b_be5e_b92a05edfc42);
pub const MSVidSBESourceToITV: windows_core::GUID = windows_core::GUID::from_u128(0x2291478c_5ee3_4bef_ab5d_b5ff2cf58352);
pub const MSVidSEG_DEST: MSVidSegmentType = MSVidSegmentType(2i32);
pub const MSVidSEG_SOURCE: MSVidSegmentType = MSVidSegmentType(0i32);
pub const MSVidSEG_XFORM: MSVidSegmentType = MSVidSegmentType(1i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct MSVidSegmentType(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct MSVidSinkStreams(pub i32);
pub const MSVidSink_Audio: MSVidSinkStreams = MSVidSinkStreams(2i32);
pub const MSVidSink_Other: MSVidSinkStreams = MSVidSinkStreams(4i32);
pub const MSVidSink_Video: MSVidSinkStreams = MSVidSinkStreams(1i32);
pub const MSVidStreamBufferRecordingControl: windows_core::GUID = windows_core::GUID::from_u128(0xcaafdd83_cefc_4e3d_ba03_175f17a24f91);
pub const MSVidStreamBufferSink: windows_core::GUID = windows_core::GUID::from_u128(0x9e77aac4_35e5_42a1_bdc2_8f3ff399847c);
pub const MSVidStreamBufferSource: windows_core::GUID = windows_core::GUID::from_u128(0xad8e510d_217f_409b_8076_29c5e73b98e8);
pub const MSVidStreamBufferSourceToVideoRenderer: windows_core::GUID = windows_core::GUID::from_u128(0x3c4708dc_b181_46a8_8da8_4ab0371758cd);
pub const MSVidStreamBufferV2Source: windows_core::GUID = windows_core::GUID::from_u128(0xfd351ea1_4173_4af4_821d_80d4ae979048);
pub const MSVidVMR9: windows_core::GUID = windows_core::GUID::from_u128(0x24dc3975_09bf_4231_8655_3ee71f43837d);
pub const MSVidVideoInputDevice: windows_core::GUID = windows_core::GUID::from_u128(0x95f4820b_bb3a_4e2d_bc64_5b817bc2c30e);
pub const MSVidVideoPlaybackDevice: windows_core::GUID = windows_core::GUID::from_u128(0x1990d634_1a5e_4071_a34a_53aaffce9f36);
pub const MSVidVideoRenderer: windows_core::GUID = windows_core::GUID::from_u128(0x37b03543_a4c8_11d2_b634_00c04f79498e);
pub const MSVidVideoRendererDevices: windows_core::GUID = windows_core::GUID::from_u128(0xc5702cce_9b79_11d3_b654_00c04f79498e);
pub const MSVidWebDVD: windows_core::GUID = windows_core::GUID::from_u128(0x011b3619_fe63_4814_8a84_15a194ce9ce3);
pub const MSVidWebDVDAdm: windows_core::GUID = windows_core::GUID::from_u128(0xfa7c375b_66a7_4280_879d_fd459c84bb02);
pub const MSVidWebDVDToAudioRenderer: windows_core::GUID = windows_core::GUID::from_u128(0x8d04238e_9fd1_41c6_8de3_9e1ee309e935);
pub const MSVidWebDVDToVideoRenderer: windows_core::GUID = windows_core::GUID::from_u128(0x267db0b3_55e3_4902_949b_df8f5cec0191);
pub const MSVidXDS: windows_core::GUID = windows_core::GUID::from_u128(0x0149eedf_d08f_4142_8d73_d23903d21e90);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct MSViddispidList(pub i32);
pub const Mpeg2Data: windows_core::GUID = windows_core::GUID::from_u128(0xc666e115_bb62_4027_a113_82d643fe2d99);
pub const Mpeg2DataLib: windows_core::GUID = windows_core::GUID::from_u128(0xdbaf6c1b_b6a4_4898_ae65_204f0d9509a1);
pub const Mpeg2Stream: windows_core::GUID = windows_core::GUID::from_u128(0xf91d96c7_8509_4d0b_ab26_a0dd10904bb7);
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct Mpeg2TableSampleHdr {
    pub SectionCount: u8,
    pub Reserved: [u8; 3],
    pub SectionOffsets: [i32; 1],
}
impl Default for Mpeg2TableSampleHdr {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const OCUR_PAIRING_PROTOCOL_VERSION: u32 = 2u32;
pub const PARENTAL_CONTROL_ATTRIB_DIALOGUE: u32 = 515u32;
pub const PARENTAL_CONTROL_ATTRIB_FANTASY: u32 = 516u32;
pub const PARENTAL_CONTROL_ATTRIB_LANGUAGE: u32 = 513u32;
pub const PARENTAL_CONTROL_ATTRIB_SEXUAL: u32 = 514u32;
pub const PARENTAL_CONTROL_ATTRIB_VIOLENCE: u32 = 512u32;
pub const PARENTAL_CONTROL_CONTENT_RATING: u32 = 256u32;
pub const PARENTAL_CONTROL_TIME_RANGE: u32 = 1u32;
pub const PARENTAL_CONTROL_VALUE_UNDEFINED: u32 = 0u32;
pub const PBDA: EnTvRat_System = EnTvRat_System(8i32);
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct PBDAParentalControl {
    pub rating_system_count: u32,
    pub rating_systems: *mut RATING_SYSTEM,
}
impl Default for PBDAParentalControl {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const PBDA_ALWAYS_TUNE_IN_MUX: windows_core::GUID = windows_core::GUID::from_u128(0x1e1d7141_583f_4ac2_b019_1f430eda0f4c);
pub const PBDA_PAIRING_PROTOCOL_VERSION: u32 = 3u32;
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct PBDA_TAG_ATTRIBUTE {
    pub TableUUId: windows_core::GUID,
    pub TableId: u8,
    pub VersionNo: u16,
    pub TableDataSize: u32,
    pub TableData: [u8; 1],
}
impl Default for PBDA_TAG_ATTRIBUTE {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct PIC_SEQ_SAMPLE {
    pub _bitfield: u32,
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct PIDListSpanningEvent {
    pub wPIDCount: u16,
    pub pulPIDs: [u32; 1],
}
impl Default for PIDListSpanningEvent {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct PID_BITS {
    pub _bitfield: u16,
}
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct PID_BITS_MIDL {
    pub Bits: u16,
}
pub const PINNAME_BDA_ANALOG_AUDIO: windows_core::GUID = windows_core::GUID::from_u128(0xd28a580a_9b1f_4b0c_9c33_9bf0a8ea636b);
pub const PINNAME_BDA_ANALOG_VIDEO: windows_core::GUID = windows_core::GUID::from_u128(0x5c0c8281_5667_486c_8482_63e31f01a6e9);
pub const PINNAME_BDA_FM_RADIO: windows_core::GUID = windows_core::GUID::from_u128(0xd2855fed_b2d3_4eeb_9bd0_193436a2f890);
pub const PINNAME_BDA_IF_PIN: windows_core::GUID = windows_core::GUID::from_u128(0x1a9d4a42_f3cd_48a1_9aea_71de133cbe14);
pub const PINNAME_BDA_OPENCABLE_PSIP_PIN: windows_core::GUID = windows_core::GUID::from_u128(0x297bb104_e5c9_4ace_b123_95c3cbb24d4f);
pub const PINNAME_BDA_TRANSPORT: windows_core::GUID = windows_core::GUID::from_u128(0x78216a81_cfa8_493e_9711_36a61c08bd9d);
pub const PINNAME_IPSINK_INPUT: windows_core::GUID = windows_core::GUID::from_u128(0x3fdffa70_ac9a_11d2_8f17_00c04f7971e2);
pub const PINNAME_MPE: windows_core::GUID = windows_core::GUID::from_u128(0xc1b06d73_1dbb_11d3_8f46_00c04f7971e2);
pub const PROT_COPY_BF: ProtType = ProtType(7i32);
pub const PROT_COPY_CN_RECORDING_STOP: ProtType = ProtType(8i32);
pub const PROT_COPY_FREE: ProtType = ProtType(1i32);
pub const PROT_COPY_FREE_CIT: ProtType = ProtType(6i32);
pub const PROT_COPY_FREE_SECURE: ProtType = ProtType(9i32);
pub const PROT_COPY_INVALID: ProtType = ProtType(50i32);
pub const PROT_COPY_NEVER: ProtType = ProtType(3i32);
pub const PROT_COPY_NEVER_REALLY: ProtType = ProtType(4i32);
pub const PROT_COPY_NO_MORE: ProtType = ProtType(5i32);
pub const PROT_COPY_ONCE: ProtType = ProtType(2i32);
pub const PersistTuneXmlUtility: windows_core::GUID = windows_core::GUID::from_u128(0xe77026b0_b97f_4cbb_b7fb_f4f03ad69f11);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct PositionModeList(pub i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct ProgramElement {
    pub wProgramNumber: u16,
    pub wProgramMapPID: u16,
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct ProtType(pub i32);
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct RATING_ATTRIBUTE {
    pub rating_attribute_id: u32,
    pub rating_attribute_value: u32,
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct RATING_INFO {
    pub rating_system_count: u32,
    pub lpratingsystem: *mut RATING_SYSTEM,
}
impl Default for RATING_INFO {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct RATING_SYSTEM {
    pub rating_system_id: windows_core::GUID,
    pub _bitfield: u8,
    pub country_code: [u8; 3],
    pub rating_attribute_count: u32,
    pub lpratingattrib: *mut RATING_ATTRIBUTE,
}
impl Default for RATING_SYSTEM {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const RECORDING_STARTED: CPRecordingStatus = CPRecordingStatus(1i32);
pub const RECORDING_STOPPED: CPRecordingStatus = CPRecordingStatus(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct RECORDING_TYPE(pub i32);
pub const RECORDING_TYPE_CONTENT: RECORDING_TYPE = RECORDING_TYPE(0i32);
pub const RECORDING_TYPE_REFERENCE: RECORDING_TYPE = RECORDING_TYPE(1i32);
pub const REFERENCE: RecordingType = RecordingType(1i32);
pub const REQUIRED_PARENTAL_CONTROL_TIME_RANGE: u32 = 2u32;
pub const REVOKED_APP_STUB: RevokedComponent = RevokedComponent(2i32);
pub const REVOKED_COPP: RevokedComponent = RevokedComponent(0i32);
pub const REVOKED_MAX_TYPES: RevokedComponent = RevokedComponent(4i32);
pub const REVOKED_SAC: RevokedComponent = RevokedComponent(1i32);
pub const REVOKED_SECURE_PIPELINE: RevokedComponent = RevokedComponent(3i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct RecordingType(pub i32);
pub const Reserved4: EnTvRat_System = EnTvRat_System(4i32);
pub const Reserved7: EnTvRat_System = EnTvRat_System(7i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct RevokedComponent(pub i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct SAMPLE_LIVE_STREAM_TIME {
    pub qwStreamTime: u64,
    pub qwLiveTime: u64,
}
pub const SAMPLE_SEQ_CONTENT_B_FRAME: u32 = 3u32;
pub const SAMPLE_SEQ_CONTENT_I_FRAME: u32 = 1u32;
pub const SAMPLE_SEQ_CONTENT_NONREF_FRAME: u32 = 3u32;
pub const SAMPLE_SEQ_CONTENT_P_FRAME: u32 = 2u32;
pub const SAMPLE_SEQ_CONTENT_REF_FRAME: u32 = 2u32;
pub const SAMPLE_SEQ_CONTENT_STANDALONE_FRAME: u32 = 1u32;
pub const SAMPLE_SEQ_CONTENT_UNKNOWN: u32 = 0u32;
pub const SAMPLE_SEQ_FRAME_START: u32 = 3u32;
pub const SAMPLE_SEQ_GOP_HEADER: u32 = 2u32;
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct SAMPLE_SEQ_OFFSET {
    pub _bitfield: u32,
}
pub const SAMPLE_SEQ_PICTURE_HEADER: u32 = 3u32;
pub const SAMPLE_SEQ_SEEK_POINT: u32 = 2u32;
pub const SAMPLE_SEQ_SEQUENCE_HEADER: u32 = 1u32;
pub const SAMPLE_SEQ_SEQUENCE_START: u32 = 1u32;
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct SBE2_STREAM_DESC {
    pub Version: u32,
    pub StreamId: u32,
    pub Default: u32,
    pub Reserved: u32,
}
pub const SBE2_STREAM_DESC_EVENT: windows_core::GUID = windows_core::GUID::from_u128(0x2313a4ed_bf2d_454f_ad8a_d95ba7f91fee);
pub const SBE2_STREAM_DESC_VERSION: u32 = 1u32;
pub const SBE2_V1_STREAMS_CREATION_EVENT: windows_core::GUID = windows_core::GUID::from_u128(0x000fcf09_97f5_46ac_9769_7a83b35384fb);
pub const SBE2_V2_STREAMS_CREATION_EVENT: windows_core::GUID = windows_core::GUID::from_u128(0xa72530a3_0344_4cab_a2d0_fe937dbdcab3);
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct SBE_PIN_DATA {
    pub cDataBytes: u64,
    pub cSamplesProcessed: u64,
    pub cDiscontinuities: u64,
    pub cSyncPoints: u64,
    pub cTimestamps: u64,
}
pub const SCTE_EAS_IB_PID: u32 = 8187u32;
pub const SCTE_EAS_OOB_PID: u32 = 8188u32;
pub const SCTE_EAS_TID: u32 = 216u32;
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct SECTION {
    pub TableId: u8,
    pub Header: SECTION_0,
    pub SectionData: [u8; 1],
}
impl Default for SECTION {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub union SECTION_0 {
    pub S: MPEG_HEADER_BITS_MIDL,
    pub W: u16,
}
impl Default for SECTION_0 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const SID_DRMSecureServiceChannel: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4c4_0049_4e2b_98fb_9537f6ce516d);
pub const SID_MSVidCtl_CurrentAudioEndpoint: windows_core::GUID = windows_core::GUID::from_u128(0xcf9a88f4_abcf_4ed8_9b74_7db33445459e);
pub const STATE_PAUSE: MSVidCtlStateList = MSVidCtlStateList(1i32);
pub const STATE_PLAY: MSVidCtlStateList = MSVidCtlStateList(2i32);
pub const STATE_STOP: MSVidCtlStateList = MSVidCtlStateList(0i32);
pub const STATE_UNBUILT: MSVidCtlStateList = MSVidCtlStateList(-1i32);
pub const STRCONV_MODE_DVB: DVB_STRCONV_MODE = DVB_STRCONV_MODE(0i32);
pub const STRCONV_MODE_DVB_EMPHASIS: DVB_STRCONV_MODE = DVB_STRCONV_MODE(1i32);
pub const STRCONV_MODE_DVB_WITHOUT_EMPHASIS: DVB_STRCONV_MODE = DVB_STRCONV_MODE(2i32);
pub const STRCONV_MODE_ISDB: DVB_STRCONV_MODE = DVB_STRCONV_MODE(3i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct STREAMBUFFER_ATTRIBUTE {
    pub pszName: windows_core::PWSTR,
    pub StreamBufferAttributeType: STREAMBUFFER_ATTR_DATATYPE,
    pub pbAttribute: *mut u8,
    pub cbLength: u16,
}
impl Default for STREAMBUFFER_ATTRIBUTE {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct STREAMBUFFER_ATTR_DATATYPE(pub i32);
pub const STREAMBUFFER_EC_BASE: u32 = 806u32;
pub const STREAMBUFFER_EC_CONTENT_BECOMING_STALE: i32 = 809i32;
pub const STREAMBUFFER_EC_PRIMARY_AUDIO: i32 = 814i32;
pub const STREAMBUFFER_EC_RATE_CHANGED: i32 = 813i32;
pub const STREAMBUFFER_EC_RATE_CHANGING_FOR_SETPOSITIONS: i32 = 815i32;
pub const STREAMBUFFER_EC_READ_FAILURE: i32 = 812i32;
pub const STREAMBUFFER_EC_SETPOSITIONS_EVENTS_DONE: i32 = 816i32;
pub const STREAMBUFFER_EC_STALE_DATA_READ: i32 = 807i32;
pub const STREAMBUFFER_EC_STALE_FILE_DELETED: i32 = 808i32;
pub const STREAMBUFFER_EC_TIMEHOLE: i32 = 806i32;
pub const STREAMBUFFER_EC_WRITE_FAILURE: i32 = 810i32;
pub const STREAMBUFFER_EC_WRITE_FAILURE_CLEAR: i32 = 811i32;
pub const STREAMBUFFER_TYPE_BINARY: STREAMBUFFER_ATTR_DATATYPE = STREAMBUFFER_ATTR_DATATYPE(2i32);
pub const STREAMBUFFER_TYPE_BOOL: STREAMBUFFER_ATTR_DATATYPE = STREAMBUFFER_ATTR_DATATYPE(3i32);
pub const STREAMBUFFER_TYPE_DWORD: STREAMBUFFER_ATTR_DATATYPE = STREAMBUFFER_ATTR_DATATYPE(0i32);
pub const STREAMBUFFER_TYPE_GUID: STREAMBUFFER_ATTR_DATATYPE = STREAMBUFFER_ATTR_DATATYPE(6i32);
pub const STREAMBUFFER_TYPE_QWORD: STREAMBUFFER_ATTR_DATATYPE = STREAMBUFFER_ATTR_DATATYPE(4i32);
pub const STREAMBUFFER_TYPE_STRING: STREAMBUFFER_ATTR_DATATYPE = STREAMBUFFER_ATTR_DATATYPE(1i32);
pub const STREAMBUFFER_TYPE_WORD: STREAMBUFFER_ATTR_DATATYPE = STREAMBUFFER_ATTR_DATATYPE(5i32);
pub const SectionList: windows_core::GUID = windows_core::GUID::from_u128(0x73da5d04_4347_45d3_a9dc_fae9ddbe558d);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct SegDispidList(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct SegEventidList(pub i32);
pub const SignalAndServiceStatusSpanningEvent_AllAVScrambled: SignalAndServiceStatusSpanningEvent_State = SignalAndServiceStatusSpanningEvent_State(5i32);
pub const SignalAndServiceStatusSpanningEvent_Clear: SignalAndServiceStatusSpanningEvent_State = SignalAndServiceStatusSpanningEvent_State(0i32);
pub const SignalAndServiceStatusSpanningEvent_NoSubscription: SignalAndServiceStatusSpanningEvent_State = SignalAndServiceStatusSpanningEvent_State(4i32);
pub const SignalAndServiceStatusSpanningEvent_NoTVSignal: SignalAndServiceStatusSpanningEvent_State = SignalAndServiceStatusSpanningEvent_State(1i32);
pub const SignalAndServiceStatusSpanningEvent_None: SignalAndServiceStatusSpanningEvent_State = SignalAndServiceStatusSpanningEvent_State(-1i32);
pub const SignalAndServiceStatusSpanningEvent_ServiceOffAir: SignalAndServiceStatusSpanningEvent_State = SignalAndServiceStatusSpanningEvent_State(2i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct SignalAndServiceStatusSpanningEvent_State(pub i32);
pub const SignalAndServiceStatusSpanningEvent_WeakTVSignal: SignalAndServiceStatusSpanningEvent_State = SignalAndServiceStatusSpanningEvent_State(3i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct SourceSizeList(pub i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct SpanningEventDescriptor {
    pub wDataLen: u16,
    pub wProgNumber: u16,
    pub wSID: u16,
    pub bDescriptor: [u8; 1],
}
impl Default for SpanningEventDescriptor {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct SpanningEventEmmMessage {
    pub bCAbroadcasterGroupId: u8,
    pub bMessageControl: u8,
    pub wServiceId: u16,
    pub wTableIdExtension: u16,
    pub bDeletionStatus: u8,
    pub bDisplayingDuration1: u8,
    pub bDisplayingDuration2: u8,
    pub bDisplayingDuration3: u8,
    pub bDisplayingCycle: u8,
    pub bFormatVersion: u8,
    pub bDisplayPosition: u8,
    pub wMessageLength: u16,
    pub szMessageArea: [u16; 1],
}
impl Default for SpanningEventEmmMessage {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const System5: EnTvRat_System = EnTvRat_System(5i32);
pub const System6: EnTvRat_System = EnTvRat_System(6i32);
pub const SystemTuningSpaces: windows_core::GUID = windows_core::GUID::from_u128(0xd02aac50_027e_11d3_9d8e_00c04f72d980);
#[repr(C, packed(1))]
#[derive(Clone, Copy, Default)]
pub struct TID_EXTENSION {
    pub wTidExt: u16,
    pub wCount: u16,
}
pub const TIFLoad: windows_core::GUID = windows_core::GUID::from_u128(0x14eb8748_1753_4393_95ae_4f7e7a87aad6);
#[repr(C)]
#[derive(Clone, Copy)]
pub struct TRANSPORT_PROPERTIES {
    pub PID: u32,
    pub PCR: i64,
    pub Fields: TRANSPORT_PROPERTIES_0,
}
impl Default for TRANSPORT_PROPERTIES {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[derive(Clone, Copy)]
pub union TRANSPORT_PROPERTIES_0 {
    pub Others: TRANSPORT_PROPERTIES_0_0,
    pub Value: i64,
}
impl Default for TRANSPORT_PROPERTIES_0 {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct TRANSPORT_PROPERTIES_0_0 {
    pub _bitfield: i64,
}
pub const TenthsSecondsMode: PositionModeList = PositionModeList(1i32);
pub const TuneRequest: windows_core::GUID = windows_core::GUID::from_u128(0xb46e0d38_ab35_4a06_a137_70576b01b39f);
pub const TunerMarshaler: windows_core::GUID = windows_core::GUID::from_u128(0x6438570b_0c08_4a25_9504_8012bb4d50cf);
pub const TuningSpace: windows_core::GUID = windows_core::GUID::from_u128(0x5ffdc5e6_b83a_4b55_b6e8_c69e765fe9db);
pub const TvRat_0: EnTvRat_GenericLevel = EnTvRat_GenericLevel(0i32);
pub const TvRat_1: EnTvRat_GenericLevel = EnTvRat_GenericLevel(1i32);
pub const TvRat_10: EnTvRat_GenericLevel = EnTvRat_GenericLevel(10i32);
pub const TvRat_11: EnTvRat_GenericLevel = EnTvRat_GenericLevel(11i32);
pub const TvRat_12: EnTvRat_GenericLevel = EnTvRat_GenericLevel(12i32);
pub const TvRat_13: EnTvRat_GenericLevel = EnTvRat_GenericLevel(13i32);
pub const TvRat_14: EnTvRat_GenericLevel = EnTvRat_GenericLevel(14i32);
pub const TvRat_15: EnTvRat_GenericLevel = EnTvRat_GenericLevel(15i32);
pub const TvRat_16: EnTvRat_GenericLevel = EnTvRat_GenericLevel(16i32);
pub const TvRat_17: EnTvRat_GenericLevel = EnTvRat_GenericLevel(17i32);
pub const TvRat_18: EnTvRat_GenericLevel = EnTvRat_GenericLevel(18i32);
pub const TvRat_19: EnTvRat_GenericLevel = EnTvRat_GenericLevel(19i32);
pub const TvRat_2: EnTvRat_GenericLevel = EnTvRat_GenericLevel(2i32);
pub const TvRat_20: EnTvRat_GenericLevel = EnTvRat_GenericLevel(20i32);
pub const TvRat_21: EnTvRat_GenericLevel = EnTvRat_GenericLevel(21i32);
pub const TvRat_3: EnTvRat_GenericLevel = EnTvRat_GenericLevel(3i32);
pub const TvRat_4: EnTvRat_GenericLevel = EnTvRat_GenericLevel(4i32);
pub const TvRat_5: EnTvRat_GenericLevel = EnTvRat_GenericLevel(5i32);
pub const TvRat_6: EnTvRat_GenericLevel = EnTvRat_GenericLevel(6i32);
pub const TvRat_7: EnTvRat_GenericLevel = EnTvRat_GenericLevel(7i32);
pub const TvRat_8: EnTvRat_GenericLevel = EnTvRat_GenericLevel(8i32);
pub const TvRat_9: EnTvRat_GenericLevel = EnTvRat_GenericLevel(9i32);
pub const TvRat_LevelDontKnow: EnTvRat_GenericLevel = EnTvRat_GenericLevel(255i32);
pub const TvRat_SystemDontKnow: EnTvRat_System = EnTvRat_System(255i32);
pub const TvRat_Unblock: EnTvRat_GenericLevel = EnTvRat_GenericLevel(-1i32);
pub const TvRat_kLevels: EnTvRat_GenericLevel = EnTvRat_GenericLevel(22i32);
pub const TvRat_kSystems: EnTvRat_System = EnTvRat_System(10i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct UDCR_TAG {
    pub bVersion: u8,
    pub KID: [u8; 25],
    pub ullBaseCounter: u64,
    pub ullBaseCounterRange: u64,
    pub fScrambled: windows_core::BOOL,
    pub bStreamMark: u8,
    pub dwReserved1: u32,
    pub dwReserved2: u32,
}
impl Default for UDCR_TAG {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const US_TV: EnTvRat_System = EnTvRat_System(1i32);
pub const US_TV_14: EnTvRat_US_TV = EnTvRat_US_TV(5i32);
pub const US_TV_G: EnTvRat_US_TV = EnTvRat_US_TV(3i32);
pub const US_TV_IsAdultLanguage: BfEnTvRat_Attributes_US_TV = BfEnTvRat_Attributes_US_TV(8i32);
pub const US_TV_IsBlocked: BfEnTvRat_Attributes_US_TV = BfEnTvRat_Attributes_US_TV(1i32);
pub const US_TV_IsSexualSituation: BfEnTvRat_Attributes_US_TV = BfEnTvRat_Attributes_US_TV(4i32);
pub const US_TV_IsSexuallySuggestiveDialog: BfEnTvRat_Attributes_US_TV = BfEnTvRat_Attributes_US_TV(16i32);
pub const US_TV_IsViolent: BfEnTvRat_Attributes_US_TV = BfEnTvRat_Attributes_US_TV(2i32);
pub const US_TV_MA: EnTvRat_US_TV = EnTvRat_US_TV(6i32);
pub const US_TV_None: EnTvRat_US_TV = EnTvRat_US_TV(0i32);
pub const US_TV_None7: EnTvRat_US_TV = EnTvRat_US_TV(7i32);
pub const US_TV_PG: EnTvRat_US_TV = EnTvRat_US_TV(4i32);
pub const US_TV_ValidAttrSubmask: BfEnTvRat_Attributes_US_TV = BfEnTvRat_Attributes_US_TV(31i32);
pub const US_TV_Y: EnTvRat_US_TV = EnTvRat_US_TV(1i32);
pub const US_TV_Y7: EnTvRat_US_TV = EnTvRat_US_TV(2i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct VA_COLOR_PRIMARIES(pub i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct VA_MATRIX_COEFFICIENTS(pub i32);
pub const VA_MATRIX_COEFF_FCC: VA_MATRIX_COEFFICIENTS = VA_MATRIX_COEFFICIENTS(4i32);
pub const VA_MATRIX_COEFF_H264_RGB: VA_MATRIX_COEFFICIENTS = VA_MATRIX_COEFFICIENTS(0i32);
pub const VA_MATRIX_COEFF_H264_YCgCo: VA_MATRIX_COEFFICIENTS = VA_MATRIX_COEFFICIENTS(8i32);
pub const VA_MATRIX_COEFF_ITU_R_BT_470_SYSTEM_B_G: VA_MATRIX_COEFFICIENTS = VA_MATRIX_COEFFICIENTS(5i32);
pub const VA_MATRIX_COEFF_ITU_R_BT_709: VA_MATRIX_COEFFICIENTS = VA_MATRIX_COEFFICIENTS(1i32);
pub const VA_MATRIX_COEFF_SMPTE_170M: VA_MATRIX_COEFFICIENTS = VA_MATRIX_COEFFICIENTS(6i32);
pub const VA_MATRIX_COEFF_SMPTE_240M: VA_MATRIX_COEFFICIENTS = VA_MATRIX_COEFFICIENTS(7i32);
pub const VA_MATRIX_COEFF_UNSPECIFIED: VA_MATRIX_COEFFICIENTS = VA_MATRIX_COEFFICIENTS(2i32);
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct VA_OPTIONAL_VIDEO_PROPERTIES {
    pub dwPictureHeight: u16,
    pub dwPictureWidth: u16,
    pub dwAspectRatioX: u16,
    pub dwAspectRatioY: u16,
    pub VAVideoFormat: VA_VIDEO_FORMAT,
    pub VAColorPrimaries: VA_COLOR_PRIMARIES,
    pub VATransferCharacteristics: VA_TRANSFER_CHARACTERISTICS,
    pub VAMatrixCoefficients: VA_MATRIX_COEFFICIENTS,
}
pub const VA_PRIMARIES_H264_GENERIC_FILM: VA_COLOR_PRIMARIES = VA_COLOR_PRIMARIES(8i32);
pub const VA_PRIMARIES_ITU_R_BT_470_SYSTEM_B_G: VA_COLOR_PRIMARIES = VA_COLOR_PRIMARIES(5i32);
pub const VA_PRIMARIES_ITU_R_BT_470_SYSTEM_M: VA_COLOR_PRIMARIES = VA_COLOR_PRIMARIES(4i32);
pub const VA_PRIMARIES_ITU_R_BT_709: VA_COLOR_PRIMARIES = VA_COLOR_PRIMARIES(1i32);
pub const VA_PRIMARIES_SMPTE_170M: VA_COLOR_PRIMARIES = VA_COLOR_PRIMARIES(6i32);
pub const VA_PRIMARIES_SMPTE_240M: VA_COLOR_PRIMARIES = VA_COLOR_PRIMARIES(7i32);
pub const VA_PRIMARIES_UNSPECIFIED: VA_COLOR_PRIMARIES = VA_COLOR_PRIMARIES(2i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct VA_TRANSFER_CHARACTERISTICS(pub i32);
pub const VA_TRANSFER_CHARACTERISTICS_H264_LOG_100_TO_1: VA_TRANSFER_CHARACTERISTICS = VA_TRANSFER_CHARACTERISTICS(9i32);
pub const VA_TRANSFER_CHARACTERISTICS_H264_LOG_316_TO_1: VA_TRANSFER_CHARACTERISTICS = VA_TRANSFER_CHARACTERISTICS(10i32);
pub const VA_TRANSFER_CHARACTERISTICS_ITU_R_BT_470_SYSTEM_B_G: VA_TRANSFER_CHARACTERISTICS = VA_TRANSFER_CHARACTERISTICS(5i32);
pub const VA_TRANSFER_CHARACTERISTICS_ITU_R_BT_470_SYSTEM_M: VA_TRANSFER_CHARACTERISTICS = VA_TRANSFER_CHARACTERISTICS(4i32);
pub const VA_TRANSFER_CHARACTERISTICS_ITU_R_BT_709: VA_TRANSFER_CHARACTERISTICS = VA_TRANSFER_CHARACTERISTICS(1i32);
pub const VA_TRANSFER_CHARACTERISTICS_LINEAR: VA_TRANSFER_CHARACTERISTICS = VA_TRANSFER_CHARACTERISTICS(8i32);
pub const VA_TRANSFER_CHARACTERISTICS_SMPTE_170M: VA_TRANSFER_CHARACTERISTICS = VA_TRANSFER_CHARACTERISTICS(6i32);
pub const VA_TRANSFER_CHARACTERISTICS_SMPTE_240M: VA_TRANSFER_CHARACTERISTICS = VA_TRANSFER_CHARACTERISTICS(7i32);
pub const VA_TRANSFER_CHARACTERISTICS_UNSPECIFIED: VA_TRANSFER_CHARACTERISTICS = VA_TRANSFER_CHARACTERISTICS(2i32);
pub const VA_VIDEO_COMPONENT: VA_VIDEO_FORMAT = VA_VIDEO_FORMAT(0i32);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct VA_VIDEO_FORMAT(pub i32);
pub const VA_VIDEO_MAC: VA_VIDEO_FORMAT = VA_VIDEO_FORMAT(4i32);
pub const VA_VIDEO_NTSC: VA_VIDEO_FORMAT = VA_VIDEO_FORMAT(2i32);
pub const VA_VIDEO_PAL: VA_VIDEO_FORMAT = VA_VIDEO_FORMAT(1i32);
pub const VA_VIDEO_SECAM: VA_VIDEO_FORMAT = VA_VIDEO_FORMAT(3i32);
pub const VA_VIDEO_UNSPECIFIED: VA_VIDEO_FORMAT = VA_VIDEO_FORMAT(5i32);
#[repr(C, packed(1))]
#[derive(Clone, Copy)]
pub struct WMDRMProtectionInfo {
    pub wszKID: [u16; 25],
    pub qwCounter: u64,
    pub qwIndex: u64,
    pub bOffset: u8,
}
impl Default for WMDRMProtectionInfo {
    fn default() -> Self {
        unsafe { core::mem::zeroed() }
    }
}
pub const XDSCodec: windows_core::GUID = windows_core::GUID::from_u128(0xc4c4c4f3_0049_4e2b_98fb_9537f6ce516d);
pub const XDSToRat: windows_core::GUID = windows_core::GUID::from_u128(0xc5c5c5f0_3abc_11d6_b25b_00c04fa0c026);
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::define_interface!(_IMSVidCtlEvents, _IMSVidCtlEvents_Vtbl, 0xb0edf164_910a_11d2_b632_00c04f79498e);
#[cfg(feature = "Win32_System_Com")]
impl core::ops::Deref for _IMSVidCtlEvents {
    type Target = super::super::super::System::Com::IDispatch;
    fn deref(&self) -> &Self::Target {
        unsafe { core::mem::transmute(self) }
    }
}
#[cfg(feature = "Win32_System_Com")]
windows_core::imp::interface_hierarchy!(_IMSVidCtlEvents, windows_core::IUnknown, super::super::super::System::Com::IDispatch);
#[cfg(feature = "Win32_System_Com")]
#[repr(C)]
#[doc(hidden)]
pub struct _IMSVidCtlEvents_Vtbl {
    pub base__: super::super::super::System::Com::IDispatch_Vtbl,
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
pub trait _IMSVidCtlEvents_Impl: super::super::super::System::Com::IDispatch_Impl {}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl _IMSVidCtlEvents_Vtbl {
    pub const fn new<Identity: _IMSVidCtlEvents_Impl, const OFFSET: isize>() -> Self {
        Self { base__: super::super::super::System::Com::IDispatch_Vtbl::new::<Identity, OFFSET>() }
    }
    pub fn matches(iid: &windows_core::GUID) -> bool {
        iid == &<_IMSVidCtlEvents as windows_core::Interface>::IID || iid == &<super::super::super::System::Com::IDispatch as windows_core::Interface>::IID
    }
}
#[cfg(all(feature = "Win32_System_Com", feature = "Win32_System_Ole", feature = "Win32_System_Variant"))]
impl windows_core::RuntimeName for _IMSVidCtlEvents {}
pub const dispidAVAudioChannelConfigEvent: SegEventidList = SegEventidList(51i32);
pub const dispidAVAudioChannelCountEvent: SegEventidList = SegEventidList(52i32);
pub const dispidAVAudioSampleRateEvent: SegEventidList = SegEventidList(50i32);
pub const dispidAVDDSurroundModeEvent: SegEventidList = SegEventidList(54i32);
pub const dispidAVDecAudioDualMonoEvent: SegEventidList = SegEventidList(49i32);
pub const dispidAVDecCommonInputFormatEvent: SegEventidList = SegEventidList(55i32);
pub const dispidAVDecCommonMeanBitRateEvent: SegEventidList = SegEventidList(53i32);
pub const dispidAVDecCommonOutputFormatEvent: SegEventidList = SegEventidList(56i32);
pub const dispidAllocPresentID: SegDispidList = SegDispidList(165i32);
pub const dispidAlloctor: SegDispidList = SegDispidList(163i32);
pub const dispidAudioRenderer: MSViddispidList = MSViddispidList(10i32);
pub const dispidAudioRenderers: MSViddispidList = MSViddispidList(5i32);
pub const dispidAuxInputs: SegDispidList = SegDispidList(195i32);
pub const dispidAvailableSourceRect: SegDispidList = SegDispidList(33i32);
pub const dispidBookmarkOnStop: SegDispidList = SegDispidList(158i32);
pub const dispidBuild: MSViddispidList = MSViddispidList(13i32);
pub const dispidCCEnable: SegDispidList = SegDispidList(38i32);
pub const dispidCLSID: SegDispidList = SegDispidList(24i32);
pub const dispidCapture: SegDispidList = SegDispidList(161i32);
pub const dispidChangePassword: SegDispidList = SegDispidList(149i32);
pub const dispidChannelAvailable: SegDispidList = SegDispidList(13i32);
pub const dispidClip: SegDispidList = SegDispidList(30i32);
pub const dispidClippedSourceRect: SegDispidList = SegDispidList(32i32);
pub const dispidColorKey: MSViddispidList = MSViddispidList(20i32);
pub const dispidConfirmPassword: SegDispidList = SegDispidList(152i32);
pub const dispidCount: SegDispidList = SegDispidList(16i32);
pub const dispidCustomCompositorClass: SegDispidList = SegDispidList(134i32);
pub const dispidDecompose: MSViddispidList = MSViddispidList(17i32);
pub const dispidDefaultAudioLCID: SegDispidList = SegDispidList(155i32);
pub const dispidDefaultMenuLCID: SegDispidList = SegDispidList(157i32);
pub const dispidDefaultSubpictureLCID: SegDispidList = SegDispidList(156i32);
pub const dispidDevAudioFrequency: SegDispidList = SegDispidList(15i32);
pub const dispidDevAudioSubchannel: SegDispidList = SegDispidList(12i32);
pub const dispidDevBalance: SegDispidList = SegDispidList(8i32);
pub const dispidDevCanStep: SegDispidList = SegDispidList(40i32);
pub const dispidDevCountryCode: SegDispidList = SegDispidList(4i32);
pub const dispidDevFileName: SegDispidList = SegDispidList(17i32);
pub const dispidDevImageSourceHeight: SegDispidList = SegDispidList(3i32);
pub const dispidDevImageSourceWidth: SegDispidList = SegDispidList(2i32);
pub const dispidDevOverScan: SegDispidList = SegDispidList(5i32);
pub const dispidDevPause: SegDispidList = SegDispidList(36i32);
pub const dispidDevPower: SegDispidList = SegDispidList(9i32);
pub const dispidDevRun: SegDispidList = SegDispidList(35i32);
pub const dispidDevSAP: SegDispidList = SegDispidList(29i32);
pub const dispidDevStep: SegDispidList = SegDispidList(39i32);
pub const dispidDevStop: SegDispidList = SegDispidList(37i32);
pub const dispidDevVideoFrequency: SegDispidList = SegDispidList(14i32);
pub const dispidDevVideoSubchannel: SegDispidList = SegDispidList(11i32);
pub const dispidDevView: SegDispidList = SegDispidList(22i32);
pub const dispidDevVolume: SegDispidList = SegDispidList(7i32);
pub const dispidDevicePath: SegDispidList = SegDispidList(217i32);
pub const dispidDisableAudio: MSViddispidList = MSViddispidList(26i32);
pub const dispidDisableVideo: MSViddispidList = MSViddispidList(25i32);
pub const dispidDisplayChange: SegDispidList = SegDispidList(142i32);
pub const dispidDisplaySize: MSViddispidList = MSViddispidList(18i32);
pub const dispidFeatures: MSViddispidList = MSViddispidList(6i32);
pub const dispidGetParentalCountry: SegDispidList = SegDispidList(154i32);
pub const dispidGetParentalLevel: SegDispidList = SegDispidList(153i32);
pub const dispidInput: MSViddispidList = MSViddispidList(7i32);
pub const dispidInputs: MSViddispidList = MSViddispidList(0i32);
pub const dispidKSCat: SegDispidList = SegDispidList(23i32);
pub const dispidMaintainAspectRatio: MSViddispidList = MSViddispidList(19i32);
pub const dispidMaxVidRect: SegDispidList = SegDispidList(159i32);
pub const dispidMediaPosition: SegDispidList = SegDispidList(34i32);
pub const dispidMessageDrain: SegDispidList = SegDispidList(20i32);
pub const dispidMinVidRect: SegDispidList = SegDispidList(160i32);
pub const dispidMixerBitmap: SegDispidList = SegDispidList(136i32);
pub const dispidMixerBitmapOpacity: SegDispidList = SegDispidList(138i32);
pub const dispidMixerBitmapRect: SegDispidList = SegDispidList(139i32);
pub const dispidModes: SegDispidList = SegDispidList(194i32);
pub const dispidName: SegDispidList = SegDispidList(0i32);
pub const dispidNameSetLock: SegDispidList = SegDispidList(176i32);
pub const dispidOutput: MSViddispidList = MSViddispidList(8i32);
pub const dispidOutputs: MSViddispidList = MSViddispidList(1i32);
pub const dispidOwner: SegDispidList = SegDispidList(19i32);
pub const dispidPause: MSViddispidList = MSViddispidList(14i32);
pub const dispidRateEx: SegDispidList = SegDispidList(201i32);
pub const dispidRePaint: SegDispidList = SegDispidList(143i32);
pub const dispidRecordingAttribute: SegDispidList = SegDispidList(179i32);
pub const dispidRequestedClipRect: SegDispidList = SegDispidList(31i32);
pub const dispidRun: MSViddispidList = MSViddispidList(15i32);
pub const dispidSBEConfigure: SegDispidList = SegDispidList(181i32);
pub const dispidSaveParentalCountry: SegDispidList = SegDispidList(151i32);
pub const dispidSaveParentalLevel: SegDispidList = SegDispidList(150i32);
pub const dispidSegment: SegDispidList = SegDispidList(6i32);
pub const dispidSelectedFeatures: MSViddispidList = MSViddispidList(11i32);
pub const dispidService: SegDispidList = SegDispidList(186i32);
pub const dispidServiceP: MSViddispidList = MSViddispidList(28i32);
pub const dispidSetAllocator: SegDispidList = SegDispidList(166i32);
pub const dispidSetMinSeek: SegDispidList = SegDispidList(200i32);
pub const dispidSetSinkFilter: SegDispidList = SegDispidList(191i32);
pub const dispidSetupMixerBitmap: SegDispidList = SegDispidList(140i32);
pub const dispidSourceSize: SegDispidList = SegDispidList(41i32);
pub const dispidStateChange: MSViddispidList = MSViddispidList(21i32);
pub const dispidStatus: SegDispidList = SegDispidList(1i32);
pub const dispidStop: MSViddispidList = MSViddispidList(16i32);
pub const dispidStreamBufferContentRecording: SegDispidList = SegDispidList(170i32);
pub const dispidStreamBufferReferenceRecording: SegDispidList = SegDispidList(171i32);
pub const dispidStreamBufferSinkName: SegDispidList = SegDispidList(168i32);
pub const dispidStreamBufferSourceName: SegDispidList = SegDispidList(169i32);
pub const dispidTS: SegDispidList = SegDispidList(28i32);
pub const dispidTVFormats: SegDispidList = SegDispidList(193i32);
pub const dispidTeleTextFilter: SegDispidList = SegDispidList(196i32);
pub const dispidTune: SegDispidList = SegDispidList(27i32);
pub const dispidTuneChan: SegDispidList = SegDispidList(10i32);
pub const dispidUnlockProfile: SegDispidList = SegDispidList(198i32);
pub const dispidUserEvent: SegDispidList = SegDispidList(220i32);
pub const dispidUsingOverlay: SegDispidList = SegDispidList(141i32);
pub const dispidVideoRenderer: MSViddispidList = MSViddispidList(9i32);
pub const dispidVideoRenderers: MSViddispidList = MSViddispidList(4i32);
pub const dispidView: MSViddispidList = MSViddispidList(12i32);
pub const dispidViewNext: MSViddispidList = MSViddispidList(27i32);
pub const dispidViewable: SegDispidList = SegDispidList(21i32);
pub const dispidVisible: SegDispidList = SegDispidList(18i32);
pub const dispid_AcceptParentalLevelChange: SegDispidList = SegDispidList(97i32);
pub const dispid_ActivateAtPosition: SegDispidList = SegDispidList(67i32);
pub const dispid_ActivateButton: SegDispidList = SegDispidList(62i32);
pub const dispid_AddFilter: SegDispidList = SegDispidList(199i32);
pub const dispid_Allocator: SegDispidList = SegDispidList(164i32);
pub const dispid_AnglesAvailable: SegDispidList = SegDispidList(89i32);
pub const dispid_AudioStreamsAvailable: SegDispidList = SegDispidList(88i32);
pub const dispid_BlockUnrated: SegDispidList = SegDispidList(187i32);
pub const dispid_Bookmark: SegDispidList = SegDispidList(221i32);
pub const dispid_ButtonAtPosition: SegDispidList = SegDispidList(69i32);
pub const dispid_ButtonRect: SegDispidList = SegDispidList(131i32);
pub const dispid_CCActive: SegDispidList = SegDispidList(91i32);
pub const dispid_CLSID: SegDispidList = SegDispidList(26i32);
pub const dispid_CurrentAngle: SegDispidList = SegDispidList(90i32);
pub const dispid_CurrentAudioStream: SegDispidList = SegDispidList(87i32);
pub const dispid_CurrentCCService: SegDispidList = SegDispidList(92i32);
pub const dispid_CurrentChapter: SegDispidList = SegDispidList(77i32);
pub const dispid_CurrentDiscSide: SegDispidList = SegDispidList(75i32);
pub const dispid_CurrentDomain: SegDispidList = SegDispidList(76i32);
pub const dispid_CurrentRatings: SegDispidList = SegDispidList(182i32);
pub const dispid_CurrentSubpictureStream: SegDispidList = SegDispidList(85i32);
pub const dispid_CurrentTime: SegDispidList = SegDispidList(79i32);
pub const dispid_CurrentTitle: SegDispidList = SegDispidList(78i32);
pub const dispid_CurrentVolume: SegDispidList = SegDispidList(74i32);
pub const dispid_CustomCompositor: SegDispidList = SegDispidList(135i32);
pub const dispid_CustomCompositorClass: SegDispidList = SegDispidList(133i32);
pub const dispid_DVDAdm: SegDispidList = SegDispidList(114i32);
pub const dispid_DVDDirectory: SegDispidList = SegDispidList(82i32);
pub const dispid_DVDScreenInMouseCoordinates: SegDispidList = SegDispidList(132i32);
pub const dispid_DVDTextLanguageLCID: SegDispidList = SegDispidList(112i32);
pub const dispid_DVDTextNumberOfLanguages: SegDispidList = SegDispidList(111i32);
pub const dispid_DVDTextNumberOfStrings: SegDispidList = SegDispidList(110i32);
pub const dispid_DVDTextString: SegDispidList = SegDispidList(109i32);
pub const dispid_DVDTextStringType: SegDispidList = SegDispidList(108i32);
pub const dispid_DVDTimeCode2bstr: SegDispidList = SegDispidList(81i32);
pub const dispid_DVDUniqueID: SegDispidList = SegDispidList(95i32);
pub const dispid_DecimateInput: SegDispidList = SegDispidList(162i32);
pub const dispid_DefaultAudioLanguage: SegDispidList = SegDispidList(123i32);
pub const dispid_DefaultAudioLanguageExt: SegDispidList = SegDispidList(125i32);
pub const dispid_DefaultMenuLanguage: SegDispidList = SegDispidList(121i32);
pub const dispid_DefaultSubpictureLanguage: SegDispidList = SegDispidList(122i32);
pub const dispid_DefaultSubpictureLanguageExt: SegDispidList = SegDispidList(124i32);
pub const dispid_DeleteBookmark: SegDispidList = SegDispidList(115i32);
pub const dispid_Eject: SegDispidList = SegDispidList(104i32);
pub const dispid_EnableResetOnStop: SegDispidList = SegDispidList(96i32);
pub const dispid_FramesPerSecond: SegDispidList = SegDispidList(80i32);
pub const dispid_GPRM: SegDispidList = SegDispidList(107i32);
pub const dispid_Inputs: MSViddispidList = MSViddispidList(2i32);
pub const dispid_IsAudioStreamEnabled: SegDispidList = SegDispidList(84i32);
pub const dispid_IsEqualDevice: SegDispidList = SegDispidList(144i32);
pub const dispid_IsSubpictureStreamEnabled: SegDispidList = SegDispidList(83i32);
pub const dispid_KSCat: SegDispidList = SegDispidList(25i32);
pub const dispid_KaraokeAudioPresentationMode: SegDispidList = SegDispidList(127i32);
pub const dispid_KaraokeChannelAssignment: SegDispidList = SegDispidList(129i32);
pub const dispid_KaraokeChannelContent: SegDispidList = SegDispidList(128i32);
pub const dispid_LanguageFromLCID: SegDispidList = SegDispidList(126i32);
pub const dispid_MaxRatingsLevel: SegDispidList = SegDispidList(183i32);
pub const dispid_MixerBitmap: SegDispidList = SegDispidList(137i32);
pub const dispid_NotifyParentalLevelChange: SegDispidList = SegDispidList(98i32);
pub const dispid_NumberOfChapters: SegDispidList = SegDispidList(70i32);
pub const dispid_Outputs: MSViddispidList = MSViddispidList(3i32);
pub const dispid_PlayerParentalCountry: SegDispidList = SegDispidList(102i32);
pub const dispid_PlayerParentalLevel: SegDispidList = SegDispidList(103i32);
pub const dispid_PreferredSubpictureStream: SegDispidList = SegDispidList(120i32);
pub const dispid_RecordingAttribute: SegDispidList = SegDispidList(180i32);
pub const dispid_RegionChange: SegDispidList = SegDispidList(113i32);
pub const dispid_RestoreBookmark: SegDispidList = SegDispidList(116i32);
pub const dispid_RestorePreferredSettings: SegDispidList = SegDispidList(130i32);
pub const dispid_SPRM: SegDispidList = SegDispidList(106i32);
pub const dispid_SaveBookmark: SegDispidList = SegDispidList(117i32);
pub const dispid_SelectAndActivateButton: SegDispidList = SegDispidList(61i32);
pub const dispid_SelectAtPosition: SegDispidList = SegDispidList(68i32);
pub const dispid_SelectDefaultAudioLanguage: SegDispidList = SegDispidList(118i32);
pub const dispid_SelectDefaultSubpictureLanguage: SegDispidList = SegDispidList(119i32);
pub const dispid_SelectLeftButton: SegDispidList = SegDispidList(64i32);
pub const dispid_SelectLowerButton: SegDispidList = SegDispidList(65i32);
pub const dispid_SelectParentalCountry: SegDispidList = SegDispidList(99i32);
pub const dispid_SelectParentalLevel: SegDispidList = SegDispidList(100i32);
pub const dispid_SelectRightButton: SegDispidList = SegDispidList(63i32);
pub const dispid_SelectUpperButton: SegDispidList = SegDispidList(66i32);
pub const dispid_SetAllocator: SegDispidList = SegDispidList(167i32);
pub const dispid_SinkStreams: SegDispidList = SegDispidList(192i32);
pub const dispid_SourceFilter: SegDispidList = SegDispidList(218i32);
pub const dispid_SubpictureLanguage: SegDispidList = SegDispidList(86i32);
pub const dispid_SubpictureOn: SegDispidList = SegDispidList(94i32);
pub const dispid_SubpictureStreamsAvailable: SegDispidList = SegDispidList(93i32);
pub const dispid_SuppressEffects: SegDispidList = SegDispidList(189i32);
pub const dispid_TitleParentalLevels: SegDispidList = SegDispidList(101i32);
pub const dispid_TitlesAvailable: SegDispidList = SegDispidList(72i32);
pub const dispid_TotalTitleTime: SegDispidList = SegDispidList(71i32);
pub const dispid_UOPValid: SegDispidList = SegDispidList(105i32);
pub const dispid_UnratedDelay: SegDispidList = SegDispidList(188i32);
pub const dispid_VolumesAvailable: SegDispidList = SegDispidList(73i32);
pub const dispid__SourceFilter: SegDispidList = SegDispidList(219i32);
pub const dispid_audiocounter: SegDispidList = SegDispidList(206i32);
pub const dispid_audioencoderint: SegDispidList = SegDispidList(184i32);
pub const dispid_audiolanguage: SegDispidList = SegDispidList(55i32);
pub const dispid_buttonsavailable: SegDispidList = SegDispidList(59i32);
pub const dispid_cccounter: SegDispidList = SegDispidList(208i32);
pub const dispid_channelchangeint: SegDispidList = SegDispidList(197i32);
pub const dispid_currentbutton: SegDispidList = SegDispidList(60i32);
pub const dispid_playattime: SegDispidList = SegDispidList(46i32);
pub const dispid_playattimeintitle: SegDispidList = SegDispidList(47i32);
pub const dispid_playbackwards: SegDispidList = SegDispidList(53i32);
pub const dispid_playchapter: SegDispidList = SegDispidList(44i32);
pub const dispid_playchapterintitle: SegDispidList = SegDispidList(43i32);
pub const dispid_playchaptersautostop: SegDispidList = SegDispidList(45i32);
pub const dispid_playforwards: SegDispidList = SegDispidList(52i32);
pub const dispid_playnextchapter: SegDispidList = SegDispidList(51i32);
pub const dispid_playperiodintitleautostop: SegDispidList = SegDispidList(48i32);
pub const dispid_playprevchapter: SegDispidList = SegDispidList(50i32);
pub const dispid_playtitle: SegDispidList = SegDispidList(42i32);
pub const dispid_replaychapter: SegDispidList = SegDispidList(49i32);
pub const dispid_resetFilterList: SegDispidList = SegDispidList(216i32);
pub const dispid_resume: SegDispidList = SegDispidList(57i32);
pub const dispid_returnfromsubmenu: SegDispidList = SegDispidList(58i32);
pub const dispid_showmenu: SegDispidList = SegDispidList(56i32);
pub const dispid_stilloff: SegDispidList = SegDispidList(54i32);
pub const dispid_videocounter: SegDispidList = SegDispidList(207i32);
pub const dispid_videoencoderint: SegDispidList = SegDispidList(185i32);
pub const dispid_wstcounter: SegDispidList = SegDispidList(209i32);
pub const dispidaudio_analysis: SegDispidList = SegDispidList(213i32);
pub const dispidaudioanalysis: SegDispidList = SegDispidList(210i32);
pub const dispidaudiocounter: SegDispidList = SegDispidList(202i32);
pub const dispidbind: MSViddispidList = MSViddispidList(24i32);
pub const dispidcccounter: SegDispidList = SegDispidList(204i32);
pub const dispiddata_analysis: SegDispidList = SegDispidList(215i32);
pub const dispiddataanalysis: SegDispidList = SegDispidList(212i32);
pub const dispidgetState: MSViddispidList = MSViddispidList(22i32);
pub const dispidlength: SegDispidList = SegDispidList(148i32);
pub const dispidlicenseerrorcode: SegEventidList = SegEventidList(45i32);
pub const dispidposition: SegDispidList = SegDispidList(146i32);
pub const dispidpositionmode: SegDispidList = SegDispidList(147i32);
pub const dispidrate: SegDispidList = SegDispidList(145i32);
pub const dispidrecordingstarted: SegDispidList = SegDispidList(175i32);
pub const dispidrecordingstopped: SegDispidList = SegDispidList(174i32);
pub const dispidrecordingtype: SegDispidList = SegDispidList(177i32);
pub const dispidsbesource: SegDispidList = SegDispidList(190i32);
pub const dispidstart: SegDispidList = SegDispidList(178i32);
pub const dispidstarttime: SegDispidList = SegDispidList(172i32);
pub const dispidstoptime: SegDispidList = SegDispidList(173i32);
pub const dispidunbind: MSViddispidList = MSViddispidList(23i32);
pub const dispidvideo_analysis: SegDispidList = SegDispidList(214i32);
pub const dispidvideoanalysis: SegDispidList = SegDispidList(211i32);
pub const dispidvideocounter: SegDispidList = SegDispidList(203i32);
pub const dispidwstcounter: SegDispidList = SegDispidList(205i32);
pub const dslDefaultSize: DisplaySizeList = DisplaySizeList(0i32);
pub const dslDoubleSourceSize: DisplaySizeList = DisplaySizeList(2i32);
pub const dslFullScreen: DisplaySizeList = DisplaySizeList(3i32);
pub const dslHalfScreen: DisplaySizeList = DisplaySizeList(4i32);
pub const dslHalfSourceSize: DisplaySizeList = DisplaySizeList(1i32);
pub const dslQuarterScreen: DisplaySizeList = DisplaySizeList(5i32);
pub const dslSixteenthScreen: DisplaySizeList = DisplaySizeList(6i32);
pub const dslSourceSize: DisplaySizeList = DisplaySizeList(0i32);
pub const dvdChannel_Audio: DVDTextStringType = DVDTextStringType(32i32);
pub const dvdGeneral_Comments: DVDTextStringType = DVDTextStringType(49i32);
pub const dvdGeneral_Name: DVDTextStringType = DVDTextStringType(48i32);
pub const dvdMenu_Angle: DVDMenuIDConstants = DVDMenuIDConstants(6i32);
pub const dvdMenu_Audio: DVDMenuIDConstants = DVDMenuIDConstants(5i32);
pub const dvdMenu_Chapter: DVDMenuIDConstants = DVDMenuIDConstants(7i32);
pub const dvdMenu_Root: DVDMenuIDConstants = DVDMenuIDConstants(3i32);
pub const dvdMenu_Subpicture: DVDMenuIDConstants = DVDMenuIDConstants(4i32);
pub const dvdMenu_Title: DVDMenuIDConstants = DVDMenuIDConstants(2i32);
pub const dvdOther_Cut: DVDTextStringType = DVDTextStringType(81i32);
pub const dvdOther_Scene: DVDTextStringType = DVDTextStringType(80i32);
pub const dvdOther_Take: DVDTextStringType = DVDTextStringType(82i32);
pub const dvdSPExt_CC_Big: DVDSPExt = DVDSPExt(6i32);
pub const dvdSPExt_CC_Children: DVDSPExt = DVDSPExt(7i32);
pub const dvdSPExt_CC_Normal: DVDSPExt = DVDSPExt(5i32);
pub const dvdSPExt_Caption_Big: DVDSPExt = DVDSPExt(2i32);
pub const dvdSPExt_Caption_Children: DVDSPExt = DVDSPExt(3i32);
pub const dvdSPExt_Caption_Normal: DVDSPExt = DVDSPExt(1i32);
pub const dvdSPExt_DirectorComments_Big: DVDSPExt = DVDSPExt(14i32);
pub const dvdSPExt_DirectorComments_Children: DVDSPExt = DVDSPExt(15i32);
pub const dvdSPExt_DirectorComments_Normal: DVDSPExt = DVDSPExt(13i32);
pub const dvdSPExt_Forced: DVDSPExt = DVDSPExt(9i32);
pub const dvdSPExt_NotSpecified: DVDSPExt = DVDSPExt(0i32);
pub const dvdState_Paused: DVDFilterState = DVDFilterState(1i32);
pub const dvdState_Running: DVDFilterState = DVDFilterState(2i32);
pub const dvdState_Stopped: DVDFilterState = DVDFilterState(0i32);
pub const dvdState_Undefined: DVDFilterState = DVDFilterState(-2i32);
pub const dvdState_Unitialized: DVDFilterState = DVDFilterState(-1i32);
pub const dvdStream_Angle: DVDTextStringType = DVDTextStringType(18i32);
pub const dvdStream_Audio: DVDTextStringType = DVDTextStringType(16i32);
pub const dvdStream_Subpicture: DVDTextStringType = DVDTextStringType(17i32);
pub const dvdStruct_Cell: DVDTextStringType = DVDTextStringType(5i32);
pub const dvdStruct_ParentalID: DVDTextStringType = DVDTextStringType(3i32);
pub const dvdStruct_PartOfTitle: DVDTextStringType = DVDTextStringType(4i32);
pub const dvdStruct_Title: DVDTextStringType = DVDTextStringType(2i32);
pub const dvdStruct_Volume: DVDTextStringType = DVDTextStringType(1i32);
pub const dvdTitle_Album: DVDTextStringType = DVDTextStringType(59i32);
pub const dvdTitle_Movie: DVDTextStringType = DVDTextStringType(57i32);
pub const dvdTitle_Orig_Album: DVDTextStringType = DVDTextStringType(75i32);
pub const dvdTitle_Orig_Movie: DVDTextStringType = DVDTextStringType(73i32);
pub const dvdTitle_Orig_Other: DVDTextStringType = DVDTextStringType(79i32);
pub const dvdTitle_Orig_Series: DVDTextStringType = DVDTextStringType(72i32);
pub const dvdTitle_Orig_Song: DVDTextStringType = DVDTextStringType(76i32);
pub const dvdTitle_Orig_Video: DVDTextStringType = DVDTextStringType(74i32);
pub const dvdTitle_Other: DVDTextStringType = DVDTextStringType(63i32);
pub const dvdTitle_Series: DVDTextStringType = DVDTextStringType(56i32);
pub const dvdTitle_Song: DVDTextStringType = DVDTextStringType(60i32);
pub const dvdTitle_Sub_Album: DVDTextStringType = DVDTextStringType(67i32);
pub const dvdTitle_Sub_Movie: DVDTextStringType = DVDTextStringType(65i32);
pub const dvdTitle_Sub_Other: DVDTextStringType = DVDTextStringType(71i32);
pub const dvdTitle_Sub_Series: DVDTextStringType = DVDTextStringType(64i32);
pub const dvdTitle_Sub_Song: DVDTextStringType = DVDTextStringType(68i32);
pub const dvdTitle_Sub_Video: DVDTextStringType = DVDTextStringType(66i32);
pub const dvdTitle_Video: DVDTextStringType = DVDTextStringType(58i32);
pub const eventidBroadcastEvent: SegEventidList = SegEventidList(46i32);
pub const eventidBroadcastEventEx: SegEventidList = SegEventidList(47i32);
pub const eventidCOPPBlocked: SegEventidList = SegEventidList(43i32);
pub const eventidCOPPUnblocked: SegEventidList = SegEventidList(44i32);
pub const eventidChangeCurrentAngle: SegEventidList = SegEventidList(13i32);
pub const eventidChangeCurrentAudioStream: SegEventidList = SegEventidList(11i32);
pub const eventidChangeCurrentSubpictureStream: SegEventidList = SegEventidList(12i32);
pub const eventidChangeKaraokePresMode: SegEventidList = SegEventidList(24i32);
pub const eventidChangeVideoPresMode: SegEventidList = SegEventidList(25i32);
pub const eventidContentBecomingStale: SegEventidList = SegEventidList(37i32);
pub const eventidContentPrimarilyAudio: SegEventidList = SegEventidList(48i32);
pub const eventidDVDNotify: SegEventidList = SegEventidList(3i32);
pub const eventidEncryptionOff: SegEventidList = SegEventidList(40i32);
pub const eventidEncryptionOn: SegEventidList = SegEventidList(39i32);
pub const eventidEndOfMedia: SegEventidList = SegEventidList(2i32);
pub const eventidLicenseChange: SegEventidList = SegEventidList(42i32);
pub const eventidOnTuneChanged: SegEventidList = SegEventidList(1i32);
pub const eventidOverlayUnavailable: SegEventidList = SegEventidList(26i32);
pub const eventidPauseOn: SegEventidList = SegEventidList(10i32);
pub const eventidPlayAtTime: SegEventidList = SegEventidList(15i32);
pub const eventidPlayAtTimeInTitle: SegEventidList = SegEventidList(14i32);
pub const eventidPlayBackwards: SegEventidList = SegEventidList(5i32);
pub const eventidPlayChapter: SegEventidList = SegEventidList(17i32);
pub const eventidPlayChapterInTitle: SegEventidList = SegEventidList(16i32);
pub const eventidPlayForwards: SegEventidList = SegEventidList(4i32);
pub const eventidPlayNextChapter: SegEventidList = SegEventidList(19i32);
pub const eventidPlayPrevChapter: SegEventidList = SegEventidList(23i32);
pub const eventidPlayTitle: SegEventidList = SegEventidList(22i32);
pub const eventidRateChange: SegEventidList = SegEventidList(41i32);
pub const eventidRatingsBlocked: SegEventidList = SegEventidList(31i32);
pub const eventidRatingsChanged: SegEventidList = SegEventidList(33i32);
pub const eventidRatingsUnlocked: SegEventidList = SegEventidList(32i32);
pub const eventidReplayChapter: SegEventidList = SegEventidList(18i32);
pub const eventidResume: SegEventidList = SegEventidList(7i32);
pub const eventidReturnFromSubmenu: SegEventidList = SegEventidList(21i32);
pub const eventidSelectOrActivateButton: SegEventidList = SegEventidList(8i32);
pub const eventidShowMenu: SegEventidList = SegEventidList(6i32);
pub const eventidSinkCertificateFailure: SegEventidList = SegEventidList(27i32);
pub const eventidSinkCertificateSuccess: SegEventidList = SegEventidList(28i32);
pub const eventidSourceCertificateFailure: SegEventidList = SegEventidList(29i32);
pub const eventidSourceCertificateSuccess: SegEventidList = SegEventidList(30i32);
pub const eventidStaleDataRead: SegEventidList = SegEventidList(36i32);
pub const eventidStaleFileDeleted: SegEventidList = SegEventidList(38i32);
pub const eventidStateChange: SegEventidList = SegEventidList(0i32);
pub const eventidStillOff: SegEventidList = SegEventidList(9i32);
pub const eventidStop: SegEventidList = SegEventidList(20i32);
pub const eventidTimeHole: SegEventidList = SegEventidList(35i32);
pub const eventidWriteFailure: SegEventidList = SegEventidList(34i32);
pub const eventidWriteFailureClear: SegEventidList = SegEventidList(57i32);
pub const g_wszStreamBufferRecordingAlbumArtist: windows_core::PCWSTR = windows_core::w!("WM/AlbumArtist");
pub const g_wszStreamBufferRecordingAlbumCoverURL: windows_core::PCWSTR = windows_core::w!("WM/AlbumCoverURL");
pub const g_wszStreamBufferRecordingAlbumTitle: windows_core::PCWSTR = windows_core::w!("WM/AlbumTitle");
pub const g_wszStreamBufferRecordingAspectRatioX: windows_core::PCWSTR = windows_core::w!("AspectRatioX");
pub const g_wszStreamBufferRecordingAspectRatioY: windows_core::PCWSTR = windows_core::w!("AspectRatioY");
pub const g_wszStreamBufferRecordingAuthor: windows_core::PCWSTR = windows_core::w!("Author");
pub const g_wszStreamBufferRecordingBannerImageData: windows_core::PCWSTR = windows_core::w!("BannerImageData");
pub const g_wszStreamBufferRecordingBannerImageType: windows_core::PCWSTR = windows_core::w!("BannerImageType");
pub const g_wszStreamBufferRecordingBannerImageURL: windows_core::PCWSTR = windows_core::w!("BannerImageURL");
pub const g_wszStreamBufferRecordingBitrate: windows_core::PCWSTR = windows_core::w!("Bitrate");
pub const g_wszStreamBufferRecordingBroadcast: windows_core::PCWSTR = windows_core::w!("Broadcast");
pub const g_wszStreamBufferRecordingComposer: windows_core::PCWSTR = windows_core::w!("WM/Composer");
pub const g_wszStreamBufferRecordingCopyright: windows_core::PCWSTR = windows_core::w!("Copyright");
pub const g_wszStreamBufferRecordingCopyrightURL: windows_core::PCWSTR = windows_core::w!("CopyrightURL");
pub const g_wszStreamBufferRecordingCurrentBitrate: windows_core::PCWSTR = windows_core::w!("CurrentBitrate");
pub const g_wszStreamBufferRecordingDRM_Flags: windows_core::PCWSTR = windows_core::w!("DRM_Flags");
pub const g_wszStreamBufferRecordingDRM_Level: windows_core::PCWSTR = windows_core::w!("DRM_Level");
pub const g_wszStreamBufferRecordingDescription: windows_core::PCWSTR = windows_core::w!("Description");
pub const g_wszStreamBufferRecordingDuration: windows_core::PCWSTR = windows_core::w!("Duration");
pub const g_wszStreamBufferRecordingFileSize: windows_core::PCWSTR = windows_core::w!("FileSize");
pub const g_wszStreamBufferRecordingGenre: windows_core::PCWSTR = windows_core::w!("WM/Genre");
pub const g_wszStreamBufferRecordingGenreID: windows_core::PCWSTR = windows_core::w!("WM/GenreID");
pub const g_wszStreamBufferRecordingHasArbitraryDataStream: windows_core::PCWSTR = windows_core::w!("HasArbitraryDataStream");
pub const g_wszStreamBufferRecordingHasAttachedImages: windows_core::PCWSTR = windows_core::w!("HasAttachedImages");
pub const g_wszStreamBufferRecordingHasAudio: windows_core::PCWSTR = windows_core::w!("HasAudio");
pub const g_wszStreamBufferRecordingHasFileTransferStream: windows_core::PCWSTR = windows_core::w!("HasFileTransferStream");
pub const g_wszStreamBufferRecordingHasImage: windows_core::PCWSTR = windows_core::w!("HasImage");
pub const g_wszStreamBufferRecordingHasScript: windows_core::PCWSTR = windows_core::w!("HasScript");
pub const g_wszStreamBufferRecordingHasVideo: windows_core::PCWSTR = windows_core::w!("HasVideo");
pub const g_wszStreamBufferRecordingIsVBR: windows_core::PCWSTR = windows_core::w!("IsVBR");
pub const g_wszStreamBufferRecordingLyrics: windows_core::PCWSTR = windows_core::w!("WM/Lyrics");
pub const g_wszStreamBufferRecordingMCDI: windows_core::PCWSTR = windows_core::w!("WM/MCDI");
pub const g_wszStreamBufferRecordingNSCAddress: windows_core::PCWSTR = windows_core::w!("NSC_Address");
pub const g_wszStreamBufferRecordingNSCDescription: windows_core::PCWSTR = windows_core::w!("NSC_Description");
pub const g_wszStreamBufferRecordingNSCEmail: windows_core::PCWSTR = windows_core::w!("NSC_Email");
pub const g_wszStreamBufferRecordingNSCName: windows_core::PCWSTR = windows_core::w!("NSC_Name");
pub const g_wszStreamBufferRecordingNSCPhone: windows_core::PCWSTR = windows_core::w!("NSC_Phone");
pub const g_wszStreamBufferRecordingNumberOfFrames: windows_core::PCWSTR = windows_core::w!("NumberOfFrames");
pub const g_wszStreamBufferRecordingOptimalBitrate: windows_core::PCWSTR = windows_core::w!("OptimalBitrate");
pub const g_wszStreamBufferRecordingPromotionURL: windows_core::PCWSTR = windows_core::w!("WM/PromotionURL");
pub const g_wszStreamBufferRecordingProtected: windows_core::PCWSTR = windows_core::w!("Is_Protected");
pub const g_wszStreamBufferRecordingRating: windows_core::PCWSTR = windows_core::w!("Rating");
pub const g_wszStreamBufferRecordingSeekable: windows_core::PCWSTR = windows_core::w!("Seekable");
pub const g_wszStreamBufferRecordingSignature_Name: windows_core::PCWSTR = windows_core::w!("Signature_Name");
pub const g_wszStreamBufferRecordingSkipBackward: windows_core::PCWSTR = windows_core::w!("Can_Skip_Backward");
pub const g_wszStreamBufferRecordingSkipForward: windows_core::PCWSTR = windows_core::w!("Can_Skip_Forward");
pub const g_wszStreamBufferRecordingStridable: windows_core::PCWSTR = windows_core::w!("Stridable");
pub const g_wszStreamBufferRecordingTitle: windows_core::PCWSTR = windows_core::w!("Title");
pub const g_wszStreamBufferRecordingToolName: windows_core::PCWSTR = windows_core::w!("WM/ToolName");
pub const g_wszStreamBufferRecordingToolVersion: windows_core::PCWSTR = windows_core::w!("WM/ToolVersion");
pub const g_wszStreamBufferRecordingTrack: windows_core::PCWSTR = windows_core::w!("WM/Track");
pub const g_wszStreamBufferRecordingTrackNumber: windows_core::PCWSTR = windows_core::w!("WM/TrackNumber");
pub const g_wszStreamBufferRecordingTrusted: windows_core::PCWSTR = windows_core::w!("Is_Trusted");
pub const g_wszStreamBufferRecordingUse_DRM: windows_core::PCWSTR = windows_core::w!("Use_DRM");
pub const g_wszStreamBufferRecordingYear: windows_core::PCWSTR = windows_core::w!("WM/Year");
pub const sslClipByClipRect: SourceSizeList = SourceSizeList(2i32);
pub const sslClipByOverScan: SourceSizeList = SourceSizeList(1i32);
pub const sslFullSize: SourceSizeList = SourceSizeList(0i32);
